Chỉnh sửa giúp CODE VBA mở file Excell từ folder

Liên hệ QC

dothetai

Thành viên mới
Tham gia
25/5/21
Bài viết
14
Được thích
2
Chào mọi người.tình hình là mình mới học VBA và có tham khảo 1 số code để mở file excell từ folder trên mạng.Tự viết lại nhưng khi chạy thì lại báo lỗi.mong mọi người hỗ trợ giúp mình với

Sub copyfile13()
Application.ScreenUpdating = False
Dim chonFile As Variant
chonFile = Application.GetOpenFilename(Title:="Chon cac file can copy", MultiSelect:=True)
If chonFile = False Then Exit Sub
Filename = Dir(Path & "*.xls*")
Do While Filename <> ""
Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
For Each Sheet In ActiveWorkbook.Sheets
Sheet.Copy AFTER:=ThisWorkbook.Sheets(1)
Next
Workbooks(Filename).Close
Filename = Dir()
Loop
Application.ScreenUpdating = True

End Sub

1622820486973.png
 
Chào mọi người.tình hình là mình mới học VBA và có tham khảo 1 số code để mở file excell từ folder trên mạng.Tự viết lại nhưng khi chạy thì lại báo lỗi.mong mọi người hỗ trợ giúp mình với

Sub copyfile13()
Application.ScreenUpdating = False
Dim chonFile As Variant
chonFile = Application.GetOpenFilename(Title:="Chon cac file can copy", MultiSelect:=True)
If chonFile = False Then Exit Sub
Filename = Dir(Path & "*.xls*")
Do While Filename <> ""
Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
For Each Sheet In ActiveWorkbook.Sheets
Sheet.Copy AFTER:=ThisWorkbook.Sheets(1)
Next
Workbooks(Filename).Close
Filename = Dir()
Loop
Application.ScreenUpdating = True

End Sub

View attachment 260073
Dòng: chonFile = Application.GetOpenFilename(Title:="Chon cac file can copy", MultiSelect:=True)
bỏ chỗ đỏ đỏ ấy đi
 
Upvote 0
cảm ơn bạn nhiều.mình chạy được rồi.có cách nào sửa lại code vẫn giữ nguyên dòng đó để chạy không bạn?
Tại sao lại bỏ MultiSelect:=True? Rõ ràng dụng ý là chọn NHIỀU tập tin.

Code của bạn hổ lốn. Hoặc là tự chọn các tập tin, hoặc chọn thư mục để lấy TẤT CẢ các tập tin trong nó. Một trong 2 thôi.

1. Đoạn
Mã:
chonFile = Application.GetOpenFilename(Title:="Chon cac file can copy", MultiSelect:=True)
If chonFile = False Then Exit Sub
có dụng ý mở cửa sổ để chọn TẤT CẢ các tập tin cần sao chép sheet sang tập tin hiện hành - tập tin chứa code.
Bạn để ý là cho dù bạn có chọn bao nhiêu tập tin thì những tập tin đó cũng chả để làm gì. Code tiếp theo cho tới cuối không sử dụng biến chonFile. Kết quả là 2 dòng code ở trên là thừa. Tuy thừa nhưng tôi giải thích cho bạn, tại sao có lỗi.

Rõ ràng nhìn tiêu đề cửa sổ chọn tập tin: Title:="Chon cac file can copy", thì thấy dụng ý là chọn CÁC file. Vậy tại sao lại nghe người khác bỏ MultiSelect:=True? Thế người ta xui gì cũng làm à? Đã muốn chọn nhiều tập tin thì bắt buộc phải có MultiSelect:=True. Khi MultiSelect:=True thì có 2 trường hợp sảy ra:

- nếu chọn Cancel thì chonFile = FALSE, tức chỉ là 1 GIÁ TRỊ.

- nêu chọn tập tin thì chonFile là một MẢNG. Nếu chọn 1 tập tin thì chonFile là một MẢNG có 1 giá trị là đường dẫn tới tập tin được chọn. Nếu chọn k tập tin thì chonFile là một MẢNG có k giá trị, mà mỗi giá trị là đường dẫn của 1 tập tin được chọn.

Khi MultiSelect:=True thì phải dùng như sau để khôg có lỗi
Mã:
...
If IsArray(chonFile) = False Then Exit Sub
...

2. Đoạn
Mã:
Filename = Dir(Path & "*.xls*")
Do While Filename <> ""
    Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
    For Each Sheet In ActiveWorkbook.Sheets
    Sheet.Copy AFTER:=ThisWorkbook.Sheets(1)
    Next
    Workbooks(Filename).Close
    Filename = Dir()
Loop

lại có dụng ý khác. Ở đây không có chuyện chọn các TẬP TIN để copy. Ở đây là lấy TẤT CẢ các tập tin có trong thư mục cho trước. Path là thư mục cho trước, chính xác hơn là đường dẫn tới thư mục. Path phải được đọc từ đâu đó, vd từ 1 ô trên sheet, hoặc phải mở cửa sổ để chọn thư mục PATH. Hiện thời thì không có code đọc từ sheet và cũng không có code mở cửa sổ để chọn PATH nên có 2 trường hợp:

- nếu ở đầu module có Option Explicit thì khi chạy code sẽ có lỗi "Variable not defined"

- nếu không có Option Explicit thì PATH được coi là biến không được khai báo tường minh. Do không được thiết lập giá trị ở thời điểm "chào buổi sáng" nên PATH = RỖNG. Do PATH = RỖNG (Empty) nên toàn bộ code chạy không đúng ý.
 
Upvote 0
Bác Batman góp ý tận tình quá làm bạn ấy rối nùi. Từng đoạn code ở đây là do bạn ấy cóp nhặt về do đó không đầu không đuôi. Cần có thời gian để sai và sửa.
 
Upvote 0
Bác Batman góp ý tận tình quá làm bạn ấy rối nùi. Từng đoạn code ở đây là do bạn ấy cóp nhặt về do đó không đầu không đuôi. Cần có thời gian để sai và sửa.
Người ta đã trả lời tôi đâu mà bạn biết người ta rối?

Tất nhiên cần thời gian để hiểu và nâng cao kiến thức, nhưng nếu tôi không phân tích thì làm sao người ta biết người ta đã sai ở đâu? Tôi không nói mà người ta tự biết?
 
Lần chỉnh sửa cuối:
Upvote 0
Người ta đã trả lời tôi đâu mà bạn biết người ta rối?

Tất nhiên cần thời gian để hiểu và nâng cao kiến thức, nhưng nếu tôi không phân tích thì làm sao người ta biết người ta đã sai ở đâu? Tôi không nói mà người ta tự biết?
Hì hì. Tôi mượn bác để nói "đối tượng" chứ có nói gì bác đâu.
 
Upvote 0
Web KT

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

Back
Top Bottom