Giúp code kiểm tra tên đường dẫn có tồn tại hay không ( có tiếng việt)

Liên hệ QC

minhtuan55

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
23/3/16
Bài viết
705
Được thích
52
Chào cả nhà GPE . Em cần 1 đoạn code để kiểm tra tên đường dẫn có tồn tại hay không. Nếu tồn tại = True , Ngược lại False. Em có thử vài code nhưng thấy chưa đúng như sau

Cụ thể ô A1 em có đường dẫn là:
C:\Users\Administrator\Desktop\Excel Hinh anh\Hinh anh\Mẫn tú\Những Mẫn.jpg

1551255689212.png


1. Code ở diễn đàn ( Bị lỗi khi đường dẫn rỗng và có tiếng việt Kết quả = #value )

Mã:
Private Function FileExists(fname) As Boolean
Dim x As String
x = Dir(fname)
If x <> "" Then FileExists = True _
     Else FileExists = False
End Function

2. Code ở diễn đàn ( Bị lỗi khi đường dẫn và tên File và có tiếng việt Kết quả = False )

Mã:
Private Function PathExists(pname) As Boolean
Dim x As String
On Error Resume Next

x = GetAttr(pname) And 0
If Err = 0 Then PathExists = True _
         Else PathExists = False
End Function

Mong cả nhà giúp em 1 đoạn code phải cực kỳ chính xác kể cả đường dẫn có tiềng việt hay tên tiếng việt Nếu có tồn tại thì True ngược lại False ( Kể cả Rổng cũng = False ). Xin đa tạ mong mọi người Hoan hỷ từ bi giúp chúng sanh. Xin cảm ơn +++N cảm ơn
 
Lần chỉnh sửa cuối:
Chào cả nhà GPE . Em cần 1 đoạn code để kiểm tra tên đường dẫn có tồn tại hay không. Nếu tồn tại = True , Ngược lại False. Em có thử vài code nhưng thấy chưa đúng như sau

1. Code ở diễn đàn ( Bị lỗi khi đường dẫn rỗng và có tiếng việt Kết quả = #value )

Mã:
Private Function FileExists(fname) As Boolean
Dim x As String
x = Dir(fname)
If x <> "" Then FileExists = True _
     Else FileExists = False
End Function

2. Code ở diễn đàn ( Bị lỗi khi đường dẫn và tên File và có tiếng việt Kết quả = False )

Mã:
Private Function PathExists(pname) As Boolean
Dim x As String
On Error Resume Next

x = GetAttr(pname) And 0
If Err = 0 Then PathExists = True _
         Else PathExists = False
End Function

Mong cả nhà giúp em 1 đoạn code phải cực kỳ chính xác kể cả đường dẫn có tiềng việt hay tên tiếng việt Nếu có tồn tại thì True ngược lại False ( Kể cả Rổng cũng = False ). Xin đa tạ mong mọi người Hoan hỷ từ bi giúp chúng sanh. Xin cảm ơn +++N cảm ơn
Không biết đúng ý không nữa

Mã:
Function CheckFile(TenFile As String) As Boolean
  CheckFile = Dir(TenFile) <> ""
End Function
 

File đính kèm

Upvote 0
Chào cả nhà GPE . Em cần 1 đoạn code để kiểm tra tên đường dẫn có tồn tại hay không. Nếu tồn tại = True , Ngược lại False. Em có thử vài code nhưng thấy chưa đúng như sau
Mã:
Function FileExists(ByVal filename As String) As Boolean
Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    FileExists = fso.FileExists(filename)
    Set fso = Nothing
End Function

Function FolderExists(ByVal dir As String) As Boolean
Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    FolderExists = fso.FolderExists(dir)
    Set fso = Nothing
End Function

Không biết đúng ý không nữa

Thế thì chạy code trong Module1 nhé.
1. Sẽ có lỗi.
Mã:
Sub test1()
    MsgBox CheckFile(ThisWorkbook.FullName)
End Sub

2. Sẽ có FALSE. Kết quả đúng phải là TRUE
Mã:
Sub test2()
    MsgBox PathExists(ThisWorkbook.Path)
End Sub
 

File đính kèm

Upvote 0
Không biết đúng ý không nữa

Mã:
Function CheckFile(TenFile As String) As Boolean
  CheckFile = Dir(TenFile) <> ""
End Function

Thanh anh . Code vẫn Bị Lỗi khi đường dẫn tiếng việt ( Và khi đường dẫn trống code bác vẫn bằng TRUE )
C:\Users\Administrator\Desktop\Excel Hinh anh\Hinh anh\Mẫn tú\Những Mẫn.jpg
Bài đã được tự động gộp:

Mã:
Function FileExists(ByVal filename As String) As Boolean
Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    FileExists = fso.FileExists(filename)
    Set fso = Nothing
End Function

Function FolderExists(ByVal dir As String) As Boolean
Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    FolderExists = fso.FolderExists(dir)
    Set fso = Nothing
End Function



Thế thì chạy code trong Module1 nhé.
1. Sẽ có lỗi.
Mã:
Sub test1()
    MsgBox CheckFile(ThisWorkbook.FullName)
End Sub

2. Sẽ có FALSE. Kết quả đúng phải là TRUE
Mã:
Sub test2()
    MsgBox PathExists(ThisWorkbook.Path)
End Sub

Thank bác có thể Bác hiểu nhầm ý câu hỏi của em ( Em đã sửa lại câu hỏi lại rồi )
Ví dụ tại ô A1 em có đường dẫn như thế này :
C:\Users\Administrator\Desktop\Excel Hinh anh\Hinh anh\Mẫn tú\Những Mẫn.jpg
1551255783988.png

Em muốn hỏi dùm hàm gì để kiểm tra đường dẫn tại A1 có tồn tại thì TRUE, ngược lại FLASE mà thật sự nó đang là TRUE mà sao em thử 2 hàm kia nó toàn Value không
 
Lần chỉnh sửa cuối:
Upvote 0
Thank bác có thể Bác hiểu nhầm ý câu hỏi của em ( Em đã sửa lại câu hỏi lại rồi )
Ví dụ tại ô A1 em có đường dẫn như thế này :
C:\Users\Administrator\Desktop\Excel Hinh anh\Hinh anh\Mẫn tú\Những Mẫn.jpg
View attachment 212839

Em muốn hỏi dùm hàm gì để kiểm tra đường dẫn tại A1 có tồn tại thì TRUE, ngược lại FLASE mà thật sự nó đang là TRUE mà sao em thử 2 hàm kia nó toàn Value không
Bạn chỉ dùng hàm FileExists thôi. Hàm FolderExists dùng để kiểm tra THƯ MỤC (thư mục chứ không phải là tập tin) có tồn tại hay không.

Bạn nói kết quả SAI? Nhưng bạn không cho biết code kiểm tra của bạn mặt mũi thế nào nên bótay.com

Code kiểm tra
Mã:
Sub test()
    MsgBox FileExists(ThisWorkbook.Worksheets("Sheet1").Range("A1").Value)
End Sub
 
Upvote 0
Thanh anh . Code vẫn Bị Lỗi khi đường dẫn tiếng việt ( Và khi đường dẫn trống code bác vẫn bằng TRUE )
C:\Users\Administrator\Desktop\Excel Hinh anh\Hinh anh\Mẫn tú\Những Mẫn.jpg
Bài đã được tự động gộp:


Sau mình thử thì được mà ta đâu thấy lỗi nói trên
Dẫn trống vẫn báo false

kq1.png
 
Upvote 0
Bạn thử thế nào mà được FALSE?

Chạy code sau thì nhận được TRUE
Mã:
Function CheckFile(TenFile As String) As Boolean
    CheckFile = Dir(TenFile) <> ""
End Function

Sub test()
    ChDrive "C"
    ChDir "C:\"
    MsgBox CheckFile("")
End Sub
Tại sao thế? Vì khi TenFile = "" thì Dir("") trả về đường dẫn của 1 tập tin có trong thư mục hiện hành trong system. Tôi cố tình chuyển Drive hiện hành về C rồi chuyển thư mục hiện hành về C:\ để chắc chắn trên máy bạn sẽ có ít nhất 1 tập tin trong thư mục hiện hành trong system.

Bạn nhận được FALSE là do trong thư mục hiện hành trong system lúc đó không có tập tin nào.

Nếu bạn muốn test thì: tạo thư mục hichic trên drive D -> chắc chắn trong hichic không có tập tin nào vì thư mục vừa được tạo -> chạy code
Mã:
Function CheckFile(TenFile As String) As Boolean
    CheckFile = Dir(TenFile) <> ""
End Function

Sub test()
    ChDrive "D"
    ChDir "D:\hichic"
    MsgBox CheckFile("")
End Sub
Code chuyển thư mục hiện hành trong system về D:\hichic. Lúc này do trong thư mục hiện hành trong system không có tập tin nào nên CheckFile("") mới trả về FALSE.
 
Lần chỉnh sửa cuối:
Upvote 0
...
Bạn nói kết quả SAI? Nhưng bạn không cho biết code kiểm tra của bạn mặt mũi thế nào nên bótay.com
...
Thớt có một cái phần mềm, đại khái tạm gọi là VBAUnit, tương tự như JUnit cho Java và CUnit cho C++ (thớt là gu ru C++ mờ).
Cái phần mềm này nó load code VBA vào một cái hàm cùi (thunk function - theo ngôn ngữ C++), và thử.

Đúng ra thì mấy cái công việc thế này đâu phải là của VBA. Đã biết thớt là dân chiến về C++ thì các bạn nên bảo thớt tự khai triển cho mình một cái hàm bằng C++ làm công việc kiểm tra trên, gói nó lại thành DLL. Có DLL rồi thì các bạn có thể viết giùm thớt code VBA gọi hàm này.
Ai cũng làm đúng việc chuyên môn của mình. Gọi không được là lỗi người viết VBA, ra kết quả đúng sai là trách nhiệm người viết C++.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn chỉ dùng hàm FileExists thôi. Hàm FolderExists dùng để kiểm tra THƯ MỤC (thư mục chứ không phải là tập tin) có tồn tại hay không.

Bạn nói kết quả SAI? Nhưng bạn không cho biết code kiểm tra của bạn mặt mũi thế nào nên bótay.com

Code kiểm tra
Mã:
Sub test()
    MsgBox FileExists(ThisWorkbook.Worksheets("Sheet1").Range("A1").Value)
End Sub
bác ơi code chạy không đúng khi đường dẫn và File có tiếng viêt. Mong bác giúp em đi.
 
Upvote 0
Bác "fed up" ơi. Bác còng tri biu thêm cho cái kiếng lọc đèn pha từ sau đi :):):)

Ủa mà xe tiền tỷ thì đời 18 nó có cái kiếng lọc ấy rồi. Thôi bác còng tri biu cái ma-ni-quên để quay con đội đi. :p:p:p
 
Upvote 0
Người hỏi ở đây toàn ba má người khác, thử code thì không thử cứ nói sai, nêu câu hỏi thì sửa đi sửa lại rồi nói 1 câu: sửa rồi code sai
 
Upvote 0
Người hỏi ở đây toàn ba má người khác, thử code thì không thử cứ nói sai, nêu câu hỏi thì sửa đi sửa lại rồi nói 1 câu: sửa rồi code sai
"Sếp" chứ đâu phải ba má. Theo thông lệ ở đây thì sếp có quyền ra lịnh vắn tắt, lính phải chạy từng bước một.
Ba má tôi nói chuyện rõ ràng lắm, không có nói tắt.
 
Upvote 0
bác ơi code chạy không đúng khi đường dẫn và File có tiếng viêt. Mong bác giúp em đi.
Tôi thử thì thấy đúng. Có thể tôi nhầm lẫn. Nhưng kiểu "code chạy không đúng khi đường dẫn và File có tiếng viêt" thì chịu rồi. Chả có tập tin tiếng Việt nằm sâu trong thư mục tiếng Việt để thử thì bó tay rồi. Vì nếu tôi chỉ thử với dữ liệu của mình thì không thấy sai. Bạn có dữ liệu mà code sẽ sai thì phải cho người ta chứ thử bằng niềm tin à?

Xe nào cũng có gương.

Bạn đang làm project tiền tỷ để sắm Mada mới tiền tỷ. Mỗi ngày bạn sẽ để dành một chút tiền. Hôm nay khoản này để đủ gương, ngày mai khoản này đủ cho bơm xăng, ngày kia cho bánh v...v

Thì cái mục trong project mà sẽ để ra để cho phần gương là tôi biếu bạn. Tôi không có tiền biếu thì biếu một mục trong project tiền tỷ. Những người khác biếu các mục khác. Cuối cùng bạn có project tiền tỷ bán đi để mua Mada tiền tỷ. Thế thì không là tôi biếu cho bạn gương, người khác biếu bạn lọc xăng, bánh, động cơ là gì? :D

Mà thôi, hãy tải tập tin đính kèm và giải nén. Trong thư mục ... sẽ có tập tin Excel và thư mục "đây là thư mục tiếng Việt nhé". Trong thư mục "đây là thư mục tiếng Việt nhé" có các thư mục con và cuối cùng có tập tin "Những Mẫn.jpg". Tức đường dẫn tới "Những Mẫn.jpg" là
"...\đây là thư mục tiếng Việt nhé\Excel Hinh anh\Hinh anh\Mẫn tú\Những Mẫn.jpg"

Hãy mở tập tin test.xlsm. Trong Sheet1 có
A1 = "đây là thư mục tiếng Việt nhé\Excel Hinh anh\Hinh anh\Mẫn tú\Những Mẫn.jpg"

Hãy chạy Sub test trong Module1.

Sub test trong Module1 có nội dung
Mã:
Sub test()
Dim filename As String
    filename = ThisWorkbook.Path & "\" & Range("A1").Value
    MsgBox FileExists(filename)
End Sub
 

File đính kèm

Upvote 0
"Sếp" chứ đâu phải ba má. Theo thông lệ ở đây thì sếp có quyền ra lịnh vắn tắt, lính phải chạy từng bước một.
Ba má tôi nói chuyện rõ ràng lắm, không có nói tắt.
Sếp thì phải trả lương, mà sếp lởm khởm ra lệnh có khi bị công nhân nó đập cho luôn

Tôi thử thì thấy đúng. Có thể tôi nhầm lẫn. Nhưng kiểu "code chạy không đúng khi đường dẫn và File có tiếng viêt" thì chịu rồi. Chả có tập tin tiếng Việt nằm sâu trong thư mục tiếng Việt để thử thì bó tay rồi. Vì nếu tôi chỉ thử với dữ liệu của mình thì không thấy sai. Bạn có dữ liệu mà code sẽ sai thì phải cho người ta chứ thử bằng niềm tin à?

Xe nào cũng có gương.

Bạn đang làm project tiền tỷ để sắm Mada mới tiền tỷ. Mỗi ngày bạn sẽ để dành một chút tiền. Hôm nay khoản này để đủ gương, ngày mai khoản này đủ cho bơm xăng, ngày kia cho bánh v...v

Thì cái mục trong project mà sẽ để ra để cho phần gương là tôi biếu bạn. Tôi không có tiền biếu thì biếu một mục trong project tiền tỷ. Những người khác biếu các mục khác. Cuối cùng bạn có project tiền tỷ bán đi để mua Mada tiền tỷ. Thế thì không là tôi biếu cho bạn gương, người khác biếu bạn lọc xăng, bánh, động cơ là gì? :D

Mà thôi, hãy tải tập tin đính kèm và giải nén. Trong thư mục ... sẽ có tập tin Excel và thư mục "đây là thư mục tiếng Việt nhé". Trong thư mục "đây là thư mục tiếng Việt nhé" có các thư mục con và cuối cùng có tập tin "Những Mẫn.jpg". Tức đường dẫn tới "Những Mẫn.jpg" là
"...\đây là thư mục tiếng Việt nhé\Excel Hinh anh\Hinh anh\Mẫn tú\Những Mẫn.jpg"

Hãy mở tập tin test.xlsm. Trong Sheet1 có
A1 = "đây là thư mục tiếng Việt nhé\Excel Hinh anh\Hinh anh\Mẫn tú\Những Mẫn.jpg"

Hãy chạy Sub test trong Module1.

Sub test trong Module1 có nội dung
Mã:
Sub test()
Dim filename As String
    filename = ThisWorkbook.Path & "\" & Range("A1").Value
    MsgBox FileExists(filename)
End Sub
Dính đến tiếng việt có dấu thì là lại dính bảng mã bác ah, có khi tên file hay đường dẫn ngoài 1 bảng mã , dữ liệu trong A1 lại là sử dụng bảng mã (tiếng việt) khác thì so sánh FALSE là chính xác rồi. Nhưng anh ta có thử thế nào thì trời biết , anh ta biết, kêu oai oái mà không có thông tin chứng cớ, cứ code sai rồi, #VALUE rồi thì ai mà biết
 
Upvote 0
Tôi thử thì thấy đúng. Có thể tôi nhầm lẫn. Nhưng kiểu "code chạy không đúng khi đường dẫn và File có tiếng viêt" thì chịu rồi. Chả có tập tin tiếng Việt nằm sâu trong thư mục tiếng Việt để thử thì bó tay rồi. Vì nếu tôi chỉ thử với dữ liệu của mình thì không thấy sai. Bạn có dữ liệu mà code sẽ sai thì phải cho người ta chứ thử bằng niềm tin à?

Xe nào cũng có gương.

Bạn đang làm project tiền tỷ để sắm Mada mới tiền tỷ. Mỗi ngày bạn sẽ để dành một chút tiền. Hôm nay khoản này để đủ gương, ngày mai khoản này đủ cho bơm xăng, ngày kia cho bánh v...v

Thì cái mục trong project mà sẽ để ra để cho phần gương là tôi biếu bạn. Tôi không có tiền biếu thì biếu một mục trong project tiền tỷ. Những người khác biếu các mục khác. Cuối cùng bạn có project tiền tỷ bán đi để mua Mada tiền tỷ. Thế thì không là tôi biếu cho bạn gương, người khác biếu bạn lọc xăng, bánh, động cơ là gì? :D

Mà thôi, hãy tải tập tin đính kèm và giải nén. Trong thư mục ... sẽ có tập tin Excel và thư mục "đây là thư mục tiếng Việt nhé". Trong thư mục "đây là thư mục tiếng Việt nhé" có các thư mục con và cuối cùng có tập tin "Những Mẫn.jpg". Tức đường dẫn tới "Những Mẫn.jpg" là
"...\đây là thư mục tiếng Việt nhé\Excel Hinh anh\Hinh anh\Mẫn tú\Những Mẫn.jpg"

Hãy mở tập tin test.xlsm. Trong Sheet1 có
A1 = "đây là thư mục tiếng Việt nhé\Excel Hinh anh\Hinh anh\Mẫn tú\Những Mẫn.jpg"

Hãy chạy Sub test trong Module1.

Sub test trong Module1 có nội dung
Mã:
Sub test()
Dim filename As String
    filename = ThisWorkbook.Path & "\" & Range("A1").Value
    MsgBox FileExists(filename)
End Sub


Thank bác. bác viết dài quá huhu sám hối. Túm lại là bác cũng chưa hiễu ý của em. Em xin nói lại 1 lần cuối cùng
File excel nằm tại đường dẫn C:\Users\Administrator\Desktop\Excel Hinh anh\Hinh anh.xlsb .
Tại ô A1 ( của file Hinh anh.xlsb ) có giá trị là
C:\Users\Administrator\Desktop\Excel Hinh anh\Hinh anh\Mẫn tú\Những Mẫn.jpg
Ý em là Làm sao để kiểm tra đường dẫn tại ô A1 có tồn tại hay không ( sau nay lở đâu người ta đổi tên file ảnh hay đổi tên các thư mục thì là mục địch là nếu nó tồn tại thì TRUE còn Ngược lại là FAlse . Còn chuyện TRUE hay False thì em áp dụng chuyện khác của em, Em chỉ hỏi 5% vấn đề của thôi

View attachment 212941
Bài đã được tự động gộp:

Sếp thì phải trả lương, mà sếp lởm khởm ra lệnh có khi bị công nhân nó đập cho luôn


Dính đến tiếng việt có dấu thì là lại dính bảng mã bác ah, có khi tên file hay đường dẫn ngoài 1 bảng mã , dữ liệu trong A1 lại là sử dụng bảng mã (tiếng việt) khác thì so sánh FALSE là chính xác rồi. Nhưng anh ta có thử thế nào thì trời biết , anh ta biết, kêu oai oái mà không có thông tin chứng cớ, cứ code sai rồi, #VALUE rồi thì ai mà biết

Bạn biết thì giúp. Không giúp thì đừng có nói xấu làm gì. Đức phật dạy bạn làm sao. Phải hoan hỹ, từ bi, giúp đở mọi người. Bạn không hơn ai đâu đừng có khinh người ta. Tôi hỏi ớ đây chỉ là 5% vấn đề của tôi thôi. Còn 95% tôi tự sử bằng C++ nên ai từ bi thì giúp thì tôi cầu công đức gia hộ Vô lượng kiếp. Còn anh ghét thì Nhân quả tự giái quyết. Túm váy lại 1 câu ngắn gọn dành cho Bạn là
=if( And( Biết code giúp tôi, Phải hoan hỷ )) , Tôi chân thành cảm ơn và chúc bạn 1 ngày rực rỡ lên BMW hay Mec hay Audi, Thôi đừng bình luận làm chi ) Bạn thử Enter xem bạn TRUE hay FALSE của hàm này. tự tìm đáp án đi nhé.
 
Lần chỉnh sửa cuối:
Upvote 0
Thank bác. bác viết dài quá huhu sám hối. Túm lại là bác cũng chưa hiễu ý của em. Em xin nói lại 1 lần cuối cùng
File excel nằm tại đường dẫn C:\Users\Administrator\Desktop\Excel Hinh anh\Hinh anh.xlsb .
Tại ô A1 ( của file Hinh anh.xlsb ) có giá trị là
C:\Users\Administrator\Desktop\Excel Hinh anh\Hinh anh\Mẫn tú\Những Mẫn.jpg
Ý em là Làm sao để kiểm tra đường dẫn tại ô A1 có tồn tại hay không ( sau nay lở đâu người ta đổi tên file ảnh hay đổi tên các thư mục thì là mục địch là nếu nó tồn tại thì TRUE còn Ngược lại là FAlse . Còn chuyện TRUE hay False thì em áp dụng chuyện khác của em, Em chỉ hỏi 5% vấn đề của thôi
A1 bạn nhập gì chưa quan tâm, nhưng mọi người mới chỉ biết là tập tin Hinh anh.xlsb nằm ở

C:\Users\Administrator\Desktop\Excel Hinh anh\Hinh anh.xlsb

Thế còn Những Mẫn.jpg nằm ở đâu? Không thấy bạn nói. Vì đường dẫn thực của ảnh và A1 chưa chắc như nhau do có thể sơ suất khi nhập.

Nói tóm lại là bạn không biết biến tấu cách dùng thì phải. Nhiều khi đường dẫn bạn có do đọc từ vd. tập tin text chứ đâu có trong A1, A2, ... Tôi đưa ra một cách gọi hàm FileExists nhưng có lẽ bạn không biết biến đổi. Muốn kiểm tra A1 thì truyền A1 vào FileExists thôi.

Mà thôi, nếu bạn cứ kiểu ấy thì tôi hướng dẫn lần cuối:
1. Nhập chính xác *** đường dẫn của Những Mẫn.jpg vào A1.
2. Thêm vào Hinh anh.xlsb (nằm ở đâu cũng được) một Module1 và dán vào Module1 code dưới đây
Mã:
Function FileExists(ByVal filename As String) As Boolean
Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    FileExists = fso.FileExists(filename)
    Set fso = Nothing
End Function

Sub test()
Dim filename As String
    filename = Range("A1").Value
    MsgBox FileExists(filename)
End Sub
3. Activate sheet có đường dẫn trong A1 -> nhấn Alt + F11 -> chạy sub test

***: Chính xác ở đây có nghĩa là: tốt nhất là vào thư mục có ảnh -> nhìn trên thanh địa chỉ thấy đường dẫn -> copy đường dẫn tới thư mục vào A1 -> phải chuột trên ảnh -> rename -> Ctrl + C -> chợn A1 -> gõ "\" -> Ctrl + V.

Lúc đó mới chắc chắn là đường dẫn chính xác.

Nếu trước đó (tuần trước, tháng trước) khi đặt tên cho thư mục bạn gõ dùng unicode vd. tổ hợp, bây giờ gỡ vào A1 bạn lại dùng unicode dựng sẵn thì 2 đường dẫn chỉ y hệt nhau cho con mắt thôi chứ nội dung của chúng khác nhau. Lúc đó FALSE là đương nhiên
 
Lần chỉnh sửa cuối:
Upvote 0
Cũng cần nói thêm là FileExists chỉ dùng được khi đường dẫn trên đĩa và đường dẫn có từ đâu đó phải cùng là unicode tổ hợp hoặc cùng là unicode dựng sẵn. Điều này nhiều khi không sảy ra vì làm sao biết được đường dẫn trên đĩa và đường dẫn cần kiểm tra khác nhau như thế nào. Chỉ còn nước thử thay từng ký tự Việt sang "phiên bản" tổ hợp/dựng sẵn" rồi kiểm tra. Nhưng nếu nhiều ký tự Việt thì số hoán vị sẽ nhiều.
 
Upvote 0
Chào cả nhà GPE . Em cần 1 đoạn code để kiểm tra tên đường dẫn có tồn tại hay không. Nếu tồn tại = True , Ngược lại False. Em có thử vài code nhưng thấy chưa đúng như sau

Cụ thể ô A1 em có đường dẫn là:
C:\Users\Administrator\Desktop\Excel Hinh anh\Hinh anh\Mẫn tú\Những Mẫn.jpg

View attachment 212838


1. Code ở diễn đàn ( Bị lỗi khi đường dẫn rỗng và có tiếng việt Kết quả = #value )

Mã:
Private Function FileExists(fname) As Boolean
Dim x As String
x = Dir(fname)
If x <> "" Then FileExists = True _
     Else FileExists = False
End Function

2. Code ở diễn đàn ( Bị lỗi khi đường dẫn và tên File và có tiếng việt Kết quả = False )

Mã:
Private Function PathExists(pname) As Boolean
Dim x As String
On Error Resume Next

x = GetAttr(pname) And 0
If Err = 0 Then PathExists = True _
         Else PathExists = False
End Function

Mong cả nhà giúp em 1 đoạn code phải cực kỳ chính xác kể cả đường dẫn có tiềng việt hay tên tiếng việt Nếu có tồn tại thì True ngược lại False ( Kể cả Rổng cũng = False ). Xin đa tạ mong mọi người Hoan hỷ từ bi giúp chúng sanh. Xin cảm ơn +++N cảm ơn
Anh thử cái này không biết được không, cần thay đường dẫn THƯ MỤC nơi lưu hình của anh
Mã:
Sub LayDuongDan()
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim i As Integer
Dim Text As String
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Chon duong dan thu muc can lay
Set objFolder = objFSO.GetFolder("C:\Users\Admin\Desktop\lamna\lâm") 'Thay đường dẫn lưu ảnh'
i = 1
For Each objFile In objFolder.Files
'Duong dan
Cells(i + 1, 1) = objFile.Path
'Ten File
Cells(i + 1, 2) = objFile.Name
i = i + 1
Next objFile
End Sub
 

File đính kèm

Upvote 0
Thank bác. bác viết dài quá huhu sám hối. Túm lại là bác cũng chưa hiễu ý của em. Em xin nói lại 1 lần cuối cùng
File excel nằm tại đường dẫn C:\Users\Administrator\Desktop\Excel Hinh anh\Hinh anh.xlsb .
Tại ô A1 ( của file Hinh anh.xlsb ) có giá trị là
C:\Users\Administrator\Desktop\Excel Hinh anh\Hinh anh\Mẫn tú\Những Mẫn.jpg
Ý em là Làm sao để kiểm tra đường dẫn tại ô A1 có tồn tại hay không ( sau nay lở đâu người ta đổi tên file ảnh hay đổi tên các thư mục thì là mục địch là nếu nó tồn tại thì TRUE còn Ngược lại là FAlse . Còn chuyện TRUE hay False thì em áp dụng chuyện khác của em, Em chỉ hỏi 5% vấn đề của thôi

:) Chính xác là nó sẽ ra FALSE đối với tất cả các code dùng Dir hoặc FSO vì các hàm này không dùng được cho tên Folder hoặc File tiếng Việt có dấu (Non-English name).
Mọi người hiểu sai trong trường hợp của bạn minhtuan55. Mọi người cứ dựa vào cái "text" đường dẫn trong ô A1 trong Excel nên các hàm Dir, FSO đều chạy ra TRUE. Nếu nó là đường dẫn thực tế có folder là tiếng Việt và file jpg thật ngay trên máy của bạn thì nó sẽ báo FALSE ngay. Các bạn tự đổi file ảnh nào đó trên máy bạn rồi copy đường dẫn vô ô A1 đi sẽ thấy.


Theo tôi nhớ là phải khai báo và viết lại hàm DirW cho trường hợp này mới dùng được nhưng tôi chưa viết bao giờ.

Bạn dùng hàm DirW này thử xem (copy trên mạng và sửa chút).

Mã:
Option Explicit

Private Const MAX_PATH = 260

Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type
Public Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
End Type
Private Type FIND_DATAW
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName((MAX_PATH * 2) - 1) As Byte ' 519
    cAlternateFileName(27) As Byte
End Type
'
Private Declare Function GetLongPathNameW Lib "kernel32.dll" (ByRef lpszShortPath As Byte, ByRef lpszLongPath As Byte, ByVal cchBuffer As Long) As Long
Private Declare Function FindFirstFileW Lib "kernel32" (ByVal lpFileName As Long, ByRef lpFindFileData As FIND_DATAW) As Long
Private Declare Function FindNextFileW Lib "kernel32" (ByVal hFindFile As Long, ByRef lpFindFileData As FIND_DATAW) As Long
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
'
Public DirExFindInfo As WIN32_FIND_DATA
Public DirWFindInfo As FIND_DATAW
'


Public Function DirW(Optional sParam As String) As Boolean
   
    Static hSearch As Long
    Dim iRet As Long
    Dim s As String
    Dim sFileNm As String
   
    If Len(sParam) Then
        iRet = FindClose(hSearch)
        hSearch = FindFirstFileW(StrPtr(sParam), DirWFindInfo)
        If hSearch <> 0 And hSearch <> -1 Then
            s = DirWFindInfo.cFileName
            sFileNm = Left$(s, InStr(s, Chr$(0)) - 1)
            Debug.Print sFileNm
       
            DirW = True
            Debug.Print "Dir:" & DirW
        End If
        Exit Function
    Else
        DirW = False
        Debug.Print "Dir:" & DirW
    End If
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom