Thay đổi đường dẫn chọn file mặc định khi dùng hàm GetOpenFilename()
Em chào các bác, hiện e đang dùng hàm này để mở cửa sổ chọn file
Dim MyFile As String MyFile = Application.GetOpenFilename() Workbooks.Open (MyFile)Nhưng cửa sổ Open luôn hiển thị tại thư mục C/Document,
liệu có cách nào thay đổi để mặc định cửa sổ mở ra tại thư mục chứa file excel đang làm việc không ạ
Em cảm ơn
Có thể sử dụng một hàm cho việc này:
Function FileOpen(initialFilename As String, _
Optional sDesc As String = "Excel (*.xls)", _
Optional sFilter As String = "*.xls") As String
With Application.FileDialog(msoFileDialogOpen)
.ButtonName = "&Open"
.initialFilename = initialFilename
.Filters.Clear
.Filters.Add sDesc, sFilter, 1
.Title = "File Open"
.AllowMultiSelect = False
If .Show = -1 Then FileOpen = .SelectedItems(1)
End With
End Function
'Cách sử dụng:'
Sub Test()
MsgBox FileOpen("x:", "Kens Files", "*.xls; *.xlsx; *.xlsm")
End Sub
Code trên tham khảo từ [URL='www.mrexcel.com/board/threads/getopenfilename-default-directory.574110/post-2839787']Link này
Thêm đoạn chir đường dẫn thì phải sao ấy nhỉ
ChDir / Dir gì đó nhớ không nhầm là không hoạt động với Unicode
www.giaiphapexcel.com/diendan/threads/thay-%C4%91%E1%BB%95i-%C4%91%C6%B0%E1%BB%9Dng-d%E1%BA%ABn-ch%E1%BB%8Dn-file-m%E1%BA%B7c-%C4%91%E1%BB%8Bnh-khi-d%C3%B9ng-h%C3%A0m-getopenfilename.163325/post-1089389
Bạn thay
MyFile = Application.GetOpenFilename()
bằng
Set xDlg = Application.FileDialog(msoFileDialogOpen)
xDlg.InitialFileName = thisworkbook.Path
If xDlg.Show <> -1 Then Exit Sub
MyFile = xDlg.SelectedItems(1)
—————
Có thể tham khảo thêm cách mở lần lượt từng file (chọn nhiều file cùng lúc)
Sub UseFileDialogOpen()
Dim fileCount As Long
' Open the file dialog
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = True
.InitialFileName = ThisWorkbook.Path
.Show
' Display paths of each file selected
For fileCount = 1 To .SelectedItems.Count
Workbooks.Open .SelectedItems(lngCount)
Next
End With
End Sub
www.giaiphapexcel.com/diendan/threads/thay-%C4%91%E1%BB%95i-%C4%91%C6%B0%E1%BB%9Dng-d%E1%BA%ABn-ch%E1%BB%8Dn-file-m%E1%BA%B7c-%C4%91%E1%BB%8Bnh-khi-d%C3%B9ng-h%C3%A0m-getopenfilename.163325/post-1089390
.InitialFileName = ThisWorkbook.Path
Cho em hỏi dòng lệnh này có nghĩa gì ạ, khi e xóa đi thì cửa sổ mở ra lại trở về ổ C
Initial File Name = Tên file ban đầu –> Lấy giá trị ban đầu của hộp thoại.
ThisWorkbook = File hiện hành (1) file này, file chứa code; ".Path" = lấy đường dẫn của (1) file này;
Túm lại:
Lấy giá trị khi mở ra của hộp thoại là địa chỉ thư mục chứa file đang chứa đoạn mã này.
GetOpenFileName là đối tượng cho phép xem và mở files, nhanh và giản dị.
FileDialog là đối tượng cho phép xem và chọn files đầy đủ hơn GetOpenFileName một chút.Vì vậy, trong VBA, khi sử dụng FileDiaLog là người ta muốn nạp thêm một số tham số thay vì mặc định. Điển hình, GetOpenFileName mặc định là cho xem folder hiện hành, FileDialog dựa vào thuộc tính InitialFileName để cho xem folder.
Nếu:
– InitialFileName không được set. Filedialog sẽ dựa vào giá trị set trước đó. Nếu chưa hề set thì mặc định là ổ systems (thường là ổ C:, nhưng chả ai bảo đảm 100%).
– InitialFileName set là thư mục/folder chứ không có filename thì FilDialog sẽ cho xem thư mục ấy và dựa vào Filters để hiển thị files trong thư mục. {#}
– InitiaFileName set với thư mục và tên file:
— Nếu file không có trong thư mục thì sẽ hiện ra thư mục rỗng.
— Nếu file có thì chỉ hiện ra file này.
— Nếu tên file gồm các ký tự WildCards (*, ?,…) thì dạng này sẽ lướt qua (override) Filters. Ví dụ "C::Rácthối*.xlsx" thì FileDialog sẽ hiển thị thư mục C:Rác với các files tên bắt đầu bằng "thối", và kiểu xlsx.Chú 1: phương pháp được đánh dấu {#} ở trên là phương pháp được khuyến khích dùng ở đây.
Chú 2:
Lưu ý về các thuộc tính của FileDialog:
Là một đối tượng, FileDialog tuân thủ luật chung của đối tượng. Những thuộc tính được set trong lần gọi thứ n sẽ được di truyền sang lần gọi thứ n+1. Chỉ có lần gọi n=1 thì dùng trị mặc định. Vì vậy mõi lần gọi nên nhớ mà set lại nếu cần.
Là một đối tượng của Application cho nên nó chỉ hiệu lực trong thời gian Application đang chạy. Sau khi VBA không chạy nữa thì nó cũng mất theo luôn. Và nếu chạy lại thì trở về n=1.Khác với lệnh gọi DOS như ChDir. ChDir có hiệu lực cho cả hệ thống. Vì vậy, nếu dùng lệnh này thì người ta copy lại trị trước dó, dùng xong thì set nó về trị ban đầu.
Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ
Con người là một trong những yếu tố quan trọng của công ty, là tài sản quý giá của doanh nghiệp. Chính vì thế,...
Xem khóa học
Bình luận