Có cách nào thay đổi thư mục mặc định ngay khi hộp thoại OPEN đuợc mở khi dùng code Application.GetOpenFilename ?
Private Declare Function SetCurrentDirectoryW Lib "kernel32" (ByVal lpPathName As Long) As Long
Function ChangeDefaultPath(ByVal szPath As String) as Long
ChangeDefaultPath = SetCurrentDirectoryW(StrPtr(szPath))
End Function
Sub Main()
Dim ret As Long, vFile
ret = ChangeDefaultPath("[COLOR=#ff0000]C:\Windows[/COLOR]")
vFile = Application.GetOpenFilename("Excel File, *.xls") '<--- Mở hộp open file
'Làm gì nữa tùy bạn
End Sub
Có cách nào thay đổi thư mục mặc định ngay khi hộp thoại OPEN đuợc mở khi dùng code Application.GetOpenFilename ?
Sub test()
[B] ChDir "C:\windows"[/B]
ret = Application.GetOpenFilename()
End Sub
có thể dùng hàm API như anh Ndu hoặc dùng hàm chDir trong vb
Mã:Sub test() [B] ChDir "C:\windows"[/B] ret = Application.GetOpenFilename() End Sub
* Máy em thì vẫn đổi được thư mục bình thườngThứ nhất: Tôi đã từng nghĩ qua cách này và đã thử. Trên máy tôi nó cóc có đổi thư mục gì cả
Thứ hai: Cứ cho rằng máy tôi có vấn đề còn máy khác chạy được thì e rằng ChDir cũng không thể làm việc với thư mục có tên tiếng Việt có dấu
Bạn thí nghiệm lại lần nữa xem
* Máy em thì vẫn đổi được thư mục bình thường
* và tất nhiên chDir cũng không thể làm viêc với folder tiếng việt có dấu,hay bất kỳ loại unicode nào <---- Cái này là tình trạng chung của các hàm thao tác với tệp tin trong vb thì phải !
Em test trên Win7 64bit + Office 2010 32bit vẫn "nuột nà' lắm thầy à.
Sub test()
ChDir [COLOR=#ff0000]"D:\"[/COLOR]
Application.GetOpenFilename
End Sub
Đúng rồi thầy ah, vẫn "nuột nà' với C:\Window, còn "cóc - ép - phê" với D:\. Thầy bật mí đáp án được không ạ?Giả định rằng bạn thử code ở bài 3 thành công. Tức là hiện giờ, mỗi khi hộp Open File hiện ra nó sẽ chỉ đến thư mục C:\Windows
Vậy bạn thử thêm 1 phát nữa, sửa code thành:
Chạy code lần này xem hộp Open file có chỉ đúng đến ổ D hay không?Mã:Sub test() ChDir [COLOR=#ff0000]"D:\"[/COLOR] Application.GetOpenFilename End Sub
Tôi thì e rằng nó cóc có ép phê!
Thử xem
(Tôi biết nguyên nhân tại sao tôi thử không thành công hàm ChDir rồi)
Đúng rồi thầy ah, vẫn "nuột nà' với C:\Window, còn "cóc - ép - phê" với D:\. Thầy bật mí đáp án được không ạ?
Sub test()
[COLOR=#ff0000][B]ChDrive "D:"[/B][/COLOR]
ChDir "D:\"
Application.GetOpenFilename
End Sub
ChDir chỉ ép phê nếu hiện tai thư mục mặc định nằm cùng ổ đĩa với thư mục mà ta cần chuyển
Trong trường hợp chuyển thư mục khác ổ đĩa với thư mục hiện hành thì BẮT BUỘC phải dùng thêm hàm ChDrive nữa
Ví dụ:
Đây là mấu chốt vấn đềMã:Sub test() [COLOR=#ff0000][B]ChDrive "D:"[/B][/COLOR] ChDir "D:\" Application.GetOpenFilename End Sub
(tức mình quá, đọc Help thì phát hiện ra thôi. Ẹc... Ẹc...)
-------------------
Cuối cùng vẫn khuyên không nên dùng các hàm trong VB, vì nó không hổ trợ Unicode
Cảm ơn các bác đã giúp đỡ. Câu hỏi khó các bác đã xử lý xong, cho em hỏi 1 câu dễ hơn: Nếu muốn thư mục mặc định chính là thư mục của file excel có code Application.GetOpenFilename thì làm thế nào ạ ? Em chưa biết đặt ThisWorkbook.Path như thế nào cho ngắn gọn.
Private Declare Function SetCurrentDirectoryW Lib "kernel32" (ByVal lpPathName As Long) As Long
Function ChangeDefaultPath(ByVal szPath As String) As Long
ChangeDefaultPath = SetCurrentDirectoryW(StrPtr(szPath))
End Function
Sub Main()
Dim ret As Long, vFile
ret = ChangeDefaultPath([COLOR=#ff0000]ThisWorkbook.Path[/COLOR])
vFile = Application.GetOpenFilename("Excel File, *.xls")
End Sub