Thay đổi đường dẫn chọn file mặc định khi dùng hàm GetOpenFilename()

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

TUN11

Thành viên mới
Tham gia
22/11/22
Bài viết
3
Được thích
0
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
 
Lần chỉnh sửa cuối:
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
Thêm đoạn chir đường dẫn thì phải sao ấy nhỉ
 
Upvote 0
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:
Mã:
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ừ 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
 
Upvote 0
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
Bạn thay
PHP:
 MyFile = Application.GetOpenFilename()
bằng
PHP:
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)
PHP:
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
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thay
PHP:
 MyFile = Application.GetOpenFilename()
bằng
PHP:
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)
PHP:
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
.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
 
Upvote 0
.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.
 
Lần chỉnh sửa cuối:
Upvote 0
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ác\thố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.
 
Upvote 0
Web KT
Back
Top Bottom