Thay thế thư mục mặc định khi dùng GetOpenFilename ? (1 người xem)

  • Thread starter Thread starter MinhKhai
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

MinhKhai

Giải pháp Ếc-xào
Tham gia
16/4/08
Bài viết
941
Được thích
574
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 ?
 
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 ?

Vầy chắc là được:
Mã:
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
Chổ màu đỏ là đường dẫn thư mục bạn bạn muốn thiết lập mặc định
 
Upvote 0
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 ?

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
 
Upvote 0
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

Thứ 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
 
Upvote 0
Thứ 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 !
 
Upvote 0
* 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 !

Lạ nhỉ!
Các bạn khác test thử ChDir xem thế nào nhé
Tôi dùng Windows 7 + Office 2010 ---> Chẳng ép phê tí nào
 
Upvote 0
Em test trên Win7 64bit + Office 2010 32bit vẫn "nuột nà' lắm thầy à.

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:
Mã:
Sub test()
  ChDir [COLOR=#ff0000]"D:\"[/COLOR]
  Application.GetOpenFilename
End Sub
Chạy code lần này xem hộp Open file có chỉ đúng đến ổ D hay không?
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)
 
Upvote 0
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:
Mã:
Sub test()
  ChDir [COLOR=#ff0000]"D:\"[/COLOR]
  Application.GetOpenFilename
End Sub
Chạy code lần này xem hộp Open file có chỉ đúng đến ổ D hay không?
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 ạ?
 
Upvote 0
Đú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 ạ?

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ụ:
Mã:
Sub test()
  [COLOR=#ff0000][B]ChDrive "D:"[/B][/COLOR]
  ChDir "D:\"
  Application.GetOpenFilename
End Sub
Đây là mấu chốt vấn đề
(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
 
Upvote 0
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ụ:
Mã:
Sub test()
  [COLOR=#ff0000][B]ChDrive "D:"[/B][/COLOR]
  ChDir "D:\"
  Application.GetOpenFilename
End Sub
Đây là mấu chốt vấn đề
(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.
 
Upvote 0
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.

Thì vầy thôi:
Mã:
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
 
Upvote 0

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

Back
Top Bottom