Tại file đang mở thực thi các Sub có trong file đang đóng mà không cần mở file đang đóng!Xin giúp đỡ!

Liên hệ QC

Thư Sinh Áo Trắng

Thành viên hoạt động
Tham gia
26/3/21
Bài viết
160
Được thích
31
dang_mo.jpg
dang_dong.jpg
Xin giúp đỡ cho em trường hợp này với ạ! Em chân thành cảm ơn!
File đính kèm
 

File đính kèm

  • dang_mo.xlsm
    18.1 KB · Đọc: 8
  • dang_dong.xlsm
    21.4 KB · Đọc: 8
Muốn vậy phải Set Wb = Workbooks.Open(tên file xlsm) trước dòng Run "'" & Wb.Name & "'!" & MacroName.

Nhưng như vậy có khác gì bạn chép cái run_sheet1 đó về file đang mở. Trước khi chạy cũng Set như vậy -> Wb.Activate -> chạy code?
Em đọc qua nay không có cách chạy Marco của file đang đóng mà không mở nó lên bác ạ!
Nhờ bác chế cho đoạn code mở file đang đóng đó nó lên, sau khi thực thi Marco trong file đóng đó (đã được mở) rồi đóng nó lại sau khi thực thi xong!
Có lẽ chỉ đến mức này thôi!
Bác cho chế cho mấy dòng code vào code bài 19 giúp em với! Bác @Maika8008
 
Upvote 0
Lời khuyên sau là tốt
Bạn muốn làm gì thì cứ code từ file đang mở.
Bạn cũng nên xem và nghe thêm lời khuyên của nhiều bài khác.

Phần tôi, vì có nhiều cái chưa biết về bài toán nên cũng không muốn làm tiếp, vì sẽ còn phải hỏi nhiều nữa dẫn đến "vô duyên". Ví dụ: có bao nhiêu Sub khác nhau (có thể cùng tên nhưng cách xử lý khác nhau là khác nhau, hoặc vùng xử lý có cột đầu hay dòng đầu khác nhau là khác nhau...) trên khoảng 200 file "dang_dong".

Vừa thấy bạn viết:
"Em đọc qua nay không có cách chạy Marco của file đang đóng mà không mở nó lên bác ạ!
Nhờ bác chế cho đoạn code mở file đang đóng đó nó lên, sau khi thực thi Marco trong file đóng đó (đã được mở) rồi đóng nó lại sau khi thực thi xong!"

tôi cho thế là đúng đó.
 
Upvote 0
Em đọc qua nay không có cách chạy Marco của file đang đóng mà không mở nó lên bác ạ!
Nhờ bác chế cho đoạn code mở file đang đóng đó nó lên, sau khi thực thi Marco trong file đóng đó (đã được mở) rồi đóng nó lại sau khi thực thi xong!
Có lẽ chỉ đến mức này thôi!
Bác cho chế cho mấy dòng code vào code bài 19 giúp em với! Bác @Maika8008
Chế rồi đó. Bạn trích mà không hiểu tôi đã chế cho bạn rồi sao?
Thôi viết luôn cho rồi:
Sub chay_marco_file_khacdangmo()

Dim WorkbookName As String
Dim MacroName As String
WorkbookName = "dang_dong.xlsm"
MacroName = "run_sheet1"

'Chế:
Dim Wb as Workbook
Set Wb = Workbooks.Open(dang_dong.xlsm)

Run "'" & Wb.Name & "'!" & MacroName

End Sub

File dang_dong.xlsm ở trạng thái đóng, được mở ra từ lệnh Set Wb = Workbooks.Open(dang_dong.xlsm)
 
Lần chỉnh sửa cuối:
Upvote 0
Có hai cách để dùng lại các code. Rất hữu hiệu và giản dị.

1. Cách của dân chuyên lập trình: chép chúng vào thư viện, và import thư viện ấy vào project của mình khi cần.

2. Cách giản dị: cho mớ code đó vào file Personal.xlsb
 
Upvote 0
Lời khuyên sau là tốt

Bạn cũng nên xem và nghe thêm lời khuyên của nhiều bài khác.

Phần tôi, vì có nhiều cái chưa biết về bài toán nên cũng không muốn làm tiếp, vì sẽ còn phải hỏi nhiều nữa dẫn đến "vô duyên". Ví dụ: có bao nhiêu Sub khác nhau (có thể cùng tên nhưng cách xử lý khác nhau là khác nhau, hoặc vùng xử lý có cột đầu hay dòng đầu khác nhau là khác nhau...) trên khoảng 200 file "dang_dong".

Vừa thấy bạn viết:
"Em đọc qua nay không có cách chạy Marco của file đang đóng mà không mở nó lên bác ạ!
Nhờ bác chế cho đoạn code mở file đang đóng đó nó lên, sau khi thực thi Marco trong file đóng đó (đã được mở) rồi đóng nó lại sau khi thực thi xong!"

tôi cho thế là đúng đó.
Vâng! Chung quy là gọi được Run được Marco file khác là đạt yêu cầu bác ạ!
Nhưng còn thiếu đoạn code mở file đó nên và đóng lại sau khi làm xong. Code được như này là tối đa và hiệu quả rồi!Vì nó đóng và mở tự động mình chỉ mở file có Marco gọi các Sub file khác là được!
Chế rồi đó. Bạn trích mà không hiểu tôi đã chế cho bạn rồi sao?
Nhờ bác giúp cho vài dòng code để thêm vào bài 19 giúp em với! Vì mở nên rồi còn đóng nó lại. Code truy nhập này em không thạo. Nhờ bác!
 
Upvote 0
Nhờ bác giúp cho vài dòng code để thêm vào bài 19 giúp em với! Vì mở nên rồi còn đóng nó lại. Code truy nhập này em không thạo. Nhờ bác!
Đóng lại thì Wb.Close True/False thôi nhưng tôi nghĩ bạn phải xem kết quả chạy macro? Chứ đóng rồi thì thôi chứ chẳng phải mất công mở lại để xem kết quả.
 
Upvote 0
Chế rồi đó. Bạn trích mà không hiểu tôi đã chế cho bạn rồi sao?
Thôi viết luôn cho rồi:
Sub chay_marco_file_khacdangmo()

Dim WorkbookName As String
Dim MacroName As String
WorkbookName = "dang_dong.xlsm"
MacroName = "run_sheet1"

'Chế:
Dim Wb as Workbook
Set Wb = Workbooks.Open(dang_dong.xlsm)

Run "'" & Wb.Name & "'!" & MacroName

End Sub

File dang_dong.xlsm ở trạng thái đóng, được mở ra từ lệnh Set Wb = Workbooks.Open(dang_dong.xlsm)
Nhiều bài mừng quá mà không F5 không thấy bài mới của bác
PHP:
Sub chay_marco_file_khacdangdong()
    Dim Wb As Workbook
    Dim WorkbookName As String
    Dim MacroName As String
    MacroName = "run_sheet1"
    Set Wb = Workbooks.Open(dang_dong.xlsm)
    Run "'" & Wb.Name & "'!" & MacroName
    Wb.Close False
    Set Wb = Nothing
End Sub
Em chế xong vẫn lỗi bác ạ!
 
Lần chỉnh sửa cuối:
Upvote 0
Đóng lại thì Wb.Close True/False thôi nhưng tôi nghĩ bạn phải xem kết quả chạy macro? Chứ đóng rồi thì thôi chứ chẳng phải mất công mở lại để xem kết quả.
Anh chàng này không rành code nhưng rất giỏi lượm nhặt, chắp vá.

Với những bài đã được giúp, không thể tự điều chỉnh, thiết kế lại được, mà có ý tưởng là giữ nguyên cái đã có và tìm cách điều khiển từ xa từ file khác ==> Vậy nên có cái thớt này.
 
Upvote 0
Anh chàng này không rành code nhưng rất giỏi lượm nhặt, chắp vá.

Với những bài đã được giúp, không thể tự điều chỉnh, thiết kế lại được, mà có ý tưởng là giữ nguyên cái đã có và tìm cách điều khiển từ xa từ file khác ==> Vậy nên có cái thớt này.
Bác bỏ quá cho!
Các bác giúp cho code bài 27 em chạy nó báo lỗi ạ!
 
Upvote 0
Nhiều bài mừng quá mà không F5 không thấy bài mới của bác
PHP:
Sub chay_marco_file_khacdangdong()
    Dim Wb As Workbook
    Dim WorkbookName As String
    Dim MacroName As String
    Set Wb = Workbooks.Open(dang_dong.xlsm)
    Run "'" & Wb.Name & "'!" & MacroName
    Wb.Close False
    Set Wb = Nothing
End Sub
Em chế xong vẫn lỗi bác ạ!
Mệt cho bạn thiệt. Cách làm việc y như các bạn mới toanh khác. Nói lỗi là lỗi gì, lỗi dòng lệnh nào. Nếu lỗi mở Workbook thì mới nói lại tôi để xem lại chứ lỗi thi hành macro từ xa là code của bạn mà.
P/S: chỗ Open("Đường dẫn\dang_dong.xlsm")
 
Upvote 0
Mệt cho bạn thiệt. Cách làm việc y như các bạn mới toanh khác. Nói lỗi là lỗi gì, lỗi dòng lệnh nào. Nếu lỗi mở Workbook thì mới nói lại tôi để xem lại chứ lỗi thi hành macro từ xa là code của bạn mà.
P/S: chỗ Open("Đường dẫn\dang_dong.xlsm")
Lỗi dòng này đây ạ!Bác sửa giúp em với!
111.jpg
 
Upvote 0
Bị lệch pha rồi, hị hị. Bạn xem lại bài trước, do thiếu đường dẫn đến file dang_dong.xlsm
Em cho 2 file vào thư mục VD ở ổ D.Kích Run Marco thấy mở rồi đóng file đang đóng. Nhưng mở file đang đóng ra không thấy thực thi Marco được gọi.Bác xem em với! Hiện code bài 19 thì chạy tốt, sau khi chế xong đến bài 31, thấy chỉ có hiện tượng mở file rồi đóng file mà không thấy Marco được gọi thực thi ra kết quả!
Hay phải thêm đoạn code "Save" nữa bác nhỉ?
PHP:
Sub chay_marco_file_khacdangdong()
    Dim Wb As Workbook
    Dim MacroName As String
    MacroName = "run_sheet1"
    Set Wb = Workbooks.Open("D:\VD\dang_dong.xlsm")
    Run "'" & Wb.Name & "'!" & MacroName
    Wb.Close False
    Set Wb = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Em cho 2 file vào thư mục VD ở ổ D.Kích Run Marco thấy mở rồi đóng file đang đóng. Nhưng mở file đang đóng ra không thấy thực thi Marco được gọi.Bác xem em với! Hiện code bài 19 thì chạy tốt, sau khi chế xong đến bài 31, thấy chỉ có hiện tượng mở file rồi đóng file mà không thấy Marco được gọi thực thi ra kết quả!
Hay phải thêm đoạn code "Save" nữa bác nhỉ?
PHP:
Sub chay_marco_file_khacdangdong()
    Dim Wb As Workbook
    Dim MacroName As String
    MacroName = "run_sheet1"
    Set Wb = Workbooks.Open("D:\VD\dang_dong.xlsm")
    Run "'" & Wb.Name & "'!" & MacroName
    Wb.Close False
    Set Wb = Nothing
End Sub
Tôi thử trên 1 cặp file của tôi thì code hoạt động tốt.
 
Upvote 0
Tôi thử trên 1 cặp file của tôi thì code hoạt động tốt.
Giống như code bài 19 thêm vài dòng code. Bác chạy được mà em lại không có gì.
Bác thử với cặp file em đính kèm bài 1. Code bài 34 có chạy không bác?
PHP:
Sub chay_marco_file_khacdangdong()
    Dim Wb As Workbook
    Dim MacroName As String
    MacroName = "run_sheet1"
    Set Wb = Workbooks.Open("D:\VD\dang_dong.xlsm")
    Run "'" & Wb.Name & "'!" & MacroName
    'Wb.Close False -> bỏ dòng này thì lại chạy được, nhưng xong xuôi phải tắt bằng"cơm" ạ!
    Set Wb = Nothing
End Sub
'Wb.Close False -> bỏ dòng này thì lại chạy được, nhưng xong xuôi phải tắt bằng"cơm" ạ! Bác xem xem em với!
 
Lần chỉnh sửa cuối:
Upvote 0
Giống như code bài 19 thêm vài dòng code. Bác chạy được mà em lại không có gì.
Bác thử với cặp file em đính kèm bài 1. Code bài 34 có chạy không bác?
PHP:
Sub chay_marco_file_khacdangdong()
    Dim Wb As Workbook
    Dim MacroName As String
    MacroName = "run_sheet1"
    Set Wb = Workbooks.Open("D:\VD\dang_dong.xlsm")
    Run "'" & Wb.Name & "'!" & MacroName
    'Wb.Close False -> bỏ dòng này thì lại chạy được, nhưng xong xuôi phải tắt bằng"cơm" ạ!
    Set Wb = Nothing
End Sub
'Wb.Close False -> bỏ dòng này thì lại chạy được, nhưng xong xuôi phải tắt bằng"cơm" ạ! Bác xem xem em với!
Với tôi thì dù False hay True cũng vẫn chạy tốt.
Nhưng tôi không hiểu tình huống gì mà phải mở file đó ra chạy macro Ở TRONG ĐÓ xong rồi đóng mà không lưu?
 
Upvote 0
Với tôi thì dù False hay True cũng vẫn chạy tốt.
Nhưng tôi không hiểu tình huống gì mà phải mở file đó ra chạy macro xong rồi đóng mà không lưu?
Cho em xin đoạn code lưu luôn bác!
'Wb.Close False -> bỏ dòng này thì lại chạy được, nhưng xong xuôi phải tắt bằng"cơm" ạ! Thì mới chạy đúng kết quả bài 19
Hic như có ma ấy!
 
Upvote 0
Cho em xin đoạn code lưu luôn bác!
'Wb.Close False -> bỏ dòng này thì lại chạy được, nhưng xong xuôi phải tắt bằng"cơm" ạ! Thì mới chạy đúng kết quả bài 19
Hic như có ma ấy!
Bạn đùa hay thật vậy: bạn dùng Wb.Close False (tức đóng mà không lưu) mà không hiểu dòng code thật sao? Muốn lưu thì Wb.Close True chứ gì mà xin.

P/S: hèn chi bảo code không chạy. Nó chạy xong rồi đóng và không lưu thì khi mở lại làm sao thấy file thay đổi được.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn đùa hay thật vậy: bạn dùng Wb.Close False (tức đóng mà không lưu) mà không hiểu dòng code thật sao? Muốn lưu thì Wb.Close True chứ gì mà xin.
Đã ok VBA cũng gớm phết ấy chứ.Chạy ngon rồi hihi cảm ơn bác @Maika8008
PHP:
Sub Chaymarco_file_dong_tai_file_dang_mo_mrMaika8008()
    Dim PathToFile As String, NameOfFile As String, wbTarget As Workbook, CloseIt As Boolean
    NameOfFile = "dang_dong.xlsm"
    PathToFile = "D:\VD" 'File dang_dong cho vào ổ D trong Folder VD
    On Error Resume Next
    Set wbTarget = Workbooks(NameOfFile)
    Set wbTarget = Workbooks.Open(PathToFile & "\" & NameOfFile)
    CloseIt = True
    'On Error GoTo 0
    Application.Run (wbTarget.Name & "!run_sheet1") 'run_sheet1 là tên Marco của cần chạy của file đóng
    If CloseIt = True Then
        wbTarget.Close savechanges:=True
    Else
        ThisWorkbook.Activate
    End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu chủ thớt chạy theo vết thì sẽ thấy code này mở file "dang_dong" để chạy code trong "dang_dong", đúng theo gợi ý của tôi là file đang là của mình thì cứ mở ra mà chạy code.

Coi rằng "ngon" cũng được.

Chú ý các câu lệnh trong code trên được trích như sau
Mã:
10    CloseIt = True
20    Application.Run (wbTarget.Name & "!run_sheet1")
30    If CloseIt = True Then ...
dường như vô nghĩa: biến CloseIt có thay đổi gì đâu khi chạy câu lệnh 20. Nên ở dòng 30 , lệnh If luôn chạy lệnh sau Then.

Thêm nữa, câu lệnh 30 chỉ cần viết
Mã:
30    If CloseIt Then ...
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom