Em chào các anh chị ^^
Hiện tại em có lỗi như sau mong cách anh chị giúp em giải thích và sửa lỗi :
Ta có 2 folder "Destination" và "Start" :
Em muốn dùng vòng lặp for each để copy tất cả file từ folder "Start" sang folder "Destination"
Nhưng mà đến dòng số 3 từ dưới lên thì nó bị lỗi như trên mặc dù trong folder destination không có gì . Các anh chị giúp em với ^^
Em vẫn chưa hiểu ý của anh nói cho lắm . Anh có thể nói chi tiết hơn không ạ . Các file hiện có thì nó đều nằm trong folder mà em đã chụp ở hình 1 và 2 rồi ấy anh .
Em vẫn chưa hiểu ý của anh nói cho lắm . Anh có thể nói chi tiết hơn không ạ . Các file hiện có thì nó đều nằm trong folder mà em đã chụp ở hình 1 và 2 rồi ấy anh .
Em đã đọc và kiểm tra thử thì chương trình chạy được rồi anh ạ ^^
Nhưng mà cái chỗ em thắc mắc là tại sao phải cho thêm dấu "\" ạ . Tại sao cho thêm dấu "\" vào cuối đường dẫn thì nó lại tìm được đến chỗ thư mục Destination ạ ( Nếu tất cả các đường dẫn em đều thêm "\" ở cuối cùng của đường dẫn thì "nó" có tìm được đúng vị trí của thư mục không?) .
Hay muốn tìm đến thư mục thì ta phải thêm "\" ở cuối còn muốn tìm đến File thì ta không cần thêm. Liệu giả thiết này có đúng không ạ ?
Ví dụ:
Đường dẫn đến thư mục:
F:\EXCEL\VBA\Start\
Đường dẫn đến file:
F:\EXCEL\VBA\Start\a.txt
Phiền anh giải thích giúp em ^^
Với hiện tại em cũng đang có một lỗi nhỏ nữa tiện thể anh giải thích nó luôn giúp em ^^, nó như sau:
Cái dòng thứ 2 từ dưới lên
Nếu em thêm dấu ngoặc đơn vào: FSO.MoveFile (Start_ & "\*", Destination_)
thì nó bị lỗi như sau:
Vậy cái lỗi này tại sao có ạ ^^
Em đã đọc và kiểm tra thử thì chương trình chạy được rồi anh ạ ^^
Nhưng mà cái chỗ em thắc mắc là tại sao phải cho thêm dấu "\" ạ . Tại sao cho thêm dấu "\" vào cuối đường dẫn thì nó lại tìm được đến chỗ thư mục Destination ạ ( Nếu tất cả các đường dẫn em đều thêm "\" ở cuối cùng của đường dẫn thì "nó" có tìm được đúng vị trí của thư mục không?) .
Hay muốn tìm đến thư mục thì ta phải thêm "\" ở cuối còn muốn tìm đến File thì ta không cần thêm. Liệu giả thiết này có đúng không ạ ?
Ví dụ:
Đường dẫn đến thư mục:
F:\EXCEL\VBA\Start\
Đường dẫn đến file:
F:\EXCEL\VBA\Start\a.txt
Phiền anh giải thích giúp em ^^
Với hiện tại em cũng đang có một lỗi nhỏ nữa tiện thể anh giải thích nó luôn giúp em ^^, nó như sau: View attachment 276182
Cái dòng thứ 2 từ dưới lên
Nếu em thêm dấu ngoặc đơn vào: FSO.MoveFile (Start_ & "\*", Destination_)
thì nó bị lỗi như sau: View attachment 276183
Vậy cái lỗi này tại sao có ạ ^^
Nếu muốn chuyển sang thư mục xyz thì bắt buộc phải kết thúc bằng "\". Nguyên nhân là nếu dùng MOVE thì có thể vừa chuyển vừa ĐỔI TÊN tập tin.
Ta xét trường hợp trong thư mục Start có tập tin hichic.txt.
Hãy chạy code
Mã:
Sub test()
Dim A As File
Dim Start_ As Folder, Destination_ As Folder
Dim FSO As FileSystemObject
Set FSO = New FileSystemObject
Set Destination_ = FSO.GetFolder("F:\EXCEL\VBA\Destination")
Set Start_ = FSO.GetFolder("F:\EXCEL\VBA\Start")
Set A = Start_.Files("hichic.txt")
A.Move ("F:\EXCEL\VBA\blala")
End Sub
Sau khi chạy code trong thư mục VBA có tập tin blala. Nếu phải chuột trên blala rồi chọn Open with rồi chọn notepad thì ta thấy là blala chính là hichic.txt ở thư mục Start. Như vậy có thể chuyển hichic.txt sang thư mục "F:\EXCEL\VBA\" và đồng thời đổi tên thành blala.
1. Ta xét dạng đích "F:\EXCEL\VBA\Destination\". Rõ ràng không có tên mới cho tập tin, vì tên tập tin không thể kết thức bằng ký tự "\". Vậy đây là kiểu chuyển sang thư mục "F:\EXCEL\VBA\Destination\" và giữ nguyên tên nguồn.
2. Ta xét dạng đích "F:\EXCEL\VBA\Destination". Không có gì đảm bảo Destination phải là tên thư mục. Rất có thể ông A nào đó muốn chuyển tập tin sang thư mục "F:\EXCEL\VBA\" đồng thời đổi tên thành Destination (lúc trước ông A đổi tên thành blala nhưng bây giờ lại muốn đổi tên thành Destination). Ai dám mang đầu ra đảm bảo là ông A không có ý định đó? Vậy code VBA cứ thử chuyển sang thư mục "F:\EXCEL\VBA\" và đổi tên tập tin thành Destination. Và ở thời điểm này sảy ra lỗi, vì trong cùng một thư mục (ở đây là VBA) không thể có 2 thư mục cùng tên, không thể có 2 tập tin cùng tên, không thể có 1 thư mục và 1 tập tin cùng tên. Vì thế khi code cố làm theo ý người viết code là bạn thì sảy ra lỗi "File already exits" (trong VBA đã tồn tại thư mục tên là Destination)
---------------
Nếu bạn có
Sub hichic(ByVal a As String, ByVal b As String)
Thì bạn có thể gọi bằng 2 cách
- hichic "Ngay mai em di", "Bien nho ten em goi ve"
- CALL hichic("Ngay mai em di", "Bien nho ten em goi ve")
Vậy thì hoặc
FSO.MoveFile Start_ & "\*", Destination_
hoặc
Call FSO.MoveFile (Start_ & "\*", Destination_)
Bạn mới học thì không nên học thói quen rất xấu của người khác. Hãy tập viết tường minh. Destination trong MoveFile là String, trong khi đó Destination_ là object.
Nếu muốn chuyển sang thư mục xyz thì bắt buộc phải kết thúc bằng "\". Nguyên nhân là nếu dùng MOVE thì có thể vừa chuyển vừa ĐỔI TÊN tập tin.
Ta xét trường hợp trong thư mục Start có tập tin hichic.txt.
Hãy chạy code
Mã:
Sub test()
Dim A As File
Dim Start_ As Folder, Destination_ As Folder
Dim FSO As FileSystemObject
Set FSO = New FileSystemObject
Set Destination_ = FSO.GetFolder("F:\EXCEL\VBA\Destination")
Set Start_ = FSO.GetFolder("F:\EXCEL\VBA\Start")
Set A = Start_.Files("hichic.txt")
A.Move ("F:\EXCEL\VBA\blala")
End Sub
Sau khi chạy code trong thư mục VBA có tập tin blala. Nếu phải chuột trên blala rồi chọn Open with rồi chọn notepad thì ta thấy là blala chính là hichic.txt ở thư mục Start. Như vậy có thể chuyển hichic.txt sang thư mục "F:\EXCEL\VBA\" và đồng thời đổi tên thành blala.
1. Ta xét dạng đích "F:\EXCEL\VBA\Destination\". Rõ ràng không có tên mới cho tập tin, vì tên tập tin không thể kết thức bằng ký tự "\". Vậy đây là kiểu chuyển sang thư mục "F:\EXCEL\VBA\Destination\" và giữ nguyên tên nguồn.
2. Ta xét dạng đích "F:\EXCEL\VBA\Destination". Không có gì đảm bảo Destination phải là tên thư mục. Rất có thể ông A nào đó muốn chuyển tập tin sang thư mục "F:\EXCEL\VBA\" đồng thời đổi tên thành Destination (lúc trước ông A đổi tên thành blala nhưng bây giờ lại muốn đổi tên thành Destination). Ai dám mang đầu ra đảm bảo là ông A không có ý định đó? Vậy code VBA cứ thử chuyển sang thư mục "F:\EXCEL\VBA\" và đổi tên tập tin thành Destination. Và ở thời điểm này sảy ra lỗi, vì trong cùng một thư mục (ở đây là VBA) không thể có 2 thư mục cùng tên, không thể có 2 tập tin cùng tên, không thể có 1 thư mục và 1 tập tin cùng tên. Vì thế khi code cố làm theo ý người viết code là bạn thì sảy ra lỗi "File already exits" (trong VBA đã tồn tại thư mục tên là Destination)
---------------
Nếu bạn có
Sub hichic(ByVal a As String, ByVal b As String)
Thì bạn có thể gọi bằng 2 cách
- hichic "Ngay mai em di", "Bien nho ten em goi ve"
- CALL hichic("Ngay mai em di", "Bien nho ten em goi ve")
Vậy thì hoặc
FSO.MoveFile Start_ & "\*", Destination_
hoặc
Call FSO.MoveFile (Start_ & "\*", Destination_)
Bạn mới học thì không nên học thói quen rất xấu của người khác. Hãy tập viết tường minh. Destination trong MoveFile là String, trong khi đó Destination_ là object.