Lỗi không thể mở file với tên file là tiếng nhật, việt

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

VanDunga

Thành viên mới
Tham gia
11/6/23
Bài viết
17
Được thích
1
Chào anh chị diễn đàn GPE, em có đoạn code bên dưới:
Sub copyfile()
Dim wb As Workbook

path = "D:\2d\"
Filename = Dir(path & "*.xls*")
Do While Filename <> ""
Workbooks.Open Filename:=path & Filename, ReadOnly:=True
For i = 1 To 2
//code xử lý
wb.Application.CutCopyMode = False
Next
Workbooks(Filename).Close
Filename = Dir()
Loop
End Sub
Khi chạy thì code thông báo không mở file được như hình dưới, xin nhờ anh chị hướng giải quyết
1695734976629.png
 
. . .code thông báo không mở file được như hình dưới, xin nhờ anh chị hướng giải quyết
Nếu là mình thì đổi tên file, như
Là tiếng Việt thì bỏ dấu tiếng Việt đi;
Ví dụ tên file là Vẫn_Như_Cũ.XLS đổi thành VanNhuCu.xls
Nếu là tiếng Nhật thì đem tên file dịch sang tiếng Anh hay tiếng Lào mà xài cho khỏe đi bạn!

:D :D :D :D :D :D :D :D :D :D :D :D → ← :D :D :D :D :D :D :D :D :D :D :D :D
 
Upvote 0
Nếu là mình thì đổi tên file, như
Là tiếng Việt thì bỏ dấu tiếng Việt đi;
Ví dụ tên file là Vẫn_Như_Cũ.XLS đổi thành VanNhuCu.xls
Nếu là tiếng Nhật thì đem dịch sang tiếng Anh hay tiếng Lào mà xài cho khỏe đi bạn!

:D :D :D :D :D :D :D :D :D :D :D :D → ← :D :D :D :D :D :D :D :D :D :D :D :D
Thật ra nếu mà đổi tên là xong thì dễ rồi anh, em làm để phục vụ công việc mà file ở chỗ làm thì không được đổi tên :(
 
Upvote 0
Chào anh chị diễn đàn GPE, em có đoạn code bên dưới:
Sub copyfile()
Dim wb As Workbook

path = "D:\2d\"
Filename = Dir(path & "*.xls*")
Do While Filename <> ""
Workbooks.Open Filename:=path & Filename, ReadOnly:=True
For i = 1 To 2
//code xử lý
wb.Application.CutCopyMode = False
Next
Workbooks(Filename).Close
Filename = Dir()
Loop
End Sub
Khi chạy thì code thông báo không mở file được như hình dưới, xin nhờ anh chị hướng giải quyết
View attachment 295180
Bạn tìm đọc https://www.giaiphapexcel.com/diendan/threads/bài-12-filesystemobject.129399/
Và các bài khác của @befaint
 
Upvote 0
Dir là hàm thượng cổ. Nó có trước khi Script Engine được tu chỉnh hoàn tất - lúc Microsoft còn ở giai đoạn chuyển Win NT qua Win 95 để xóa sổ Win 3.1 (chạy trên nền tảng DOS).
Khi dùng nền tảng Win (không qua DOS) chạy vững rồi (Win 98E) thì MS chú ý cái Script Engine và tạo các đối tượng hổ trợ. Unicode cũng phổ biến ở thời điểm đó cho nên MS cho File System Object ôm lấy nó (unicode) liền. Dir là đồ cũ, MS không muốn cải tiến nó thêm với Unicode. Vì vậy, các file/folder muốn dùng Dir thì phải theo tiêu chuẩn ANSI/ASCII; tiếng Nhật, Việt có dấu là theo tiêu chuẩn Unicode, Dir đọc không được; lúc nó la làng thì chính VBA cũng không hổ trợ trình bày cho nên những ký tự ấy ra ? hết.

Tên folder/file không thể nằm trong giới hạn Latin thì không cách nào dùng Dir được. Cách phổ biến hiện này là dùng FileSystemObject của Script Engine.
 
Upvote 0
Dir là hàm thượng cổ. Nó có trước khi Script Engine được tu chỉnh hoàn tất - lúc Microsoft còn ở giai đoạn chuyển Win NT qua Win 95 để xóa sổ Win 3.1 (chạy trên nền tảng DOS).
Khi dùng nền tảng Win (không qua DOS) chạy vững rồi (Win 98E) thì MS chú ý cái Script Engine và tạo các đối tượng hổ trợ. Unicode cũng phổ biến ở thời điểm đó cho nên MS cho File System Object ôm lấy nó (unicode) liền. Dir là đồ cũ, MS không muốn cải tiến nó thêm với Unicode. Vì vậy, các file/folder muốn dùng Dir thì phải theo tiêu chuẩn ANSI/ASCII; tiếng Nhật, Việt có dấu là theo tiêu chuẩn Unicode, Dir đọc không được; lúc nó la làng thì chính VBA cũng không hổ trợ trình bày cho nên những ký tự ấy ra ? hết.

Tên folder/file không thể nằm trong giới hạn Latin thì không cách nào dùng Dir được. Cách phổ biến hiện này là dùng FileSystemObject của Script Engine.
Cảm ơn anh vì câu trả lời rất tâm huyết rõ ngọn nguồn ạ
Bài đã được tự động gộp:

Cảm ơn anh
 
Upvote 0
Nó có trước khi Script Engine được tu chỉnh hoàn tất - lúc Microsoft còn ở giai đoạn chuyển Win NT qua Win 95 để xóa sổ Win 3.1 (chạy trên nền tảng DOS).
Windows 95 thuộc nhóm Windows 9x là một hệ điều hành dựa trên nền tảng MS-DOS dành cho người dùng phổ thông, tức là có nhiều tương đồng với Windows 3.1 trong khi Windows NT lại là hệ điều hành không dựa trên nền MS-DOS dùng cho máy trạm hoặc server. Không có chuyện "chuyển Win NT qua Win 95 để xóa sổ Win 3.1" như VetMini phát biểu bởi giữa Windows 95 với Windows NT là các nền tảng và mục tiêu khác nhau.
 
Upvote 0
Web KT
Back
Top Bottom