2009-07-07 65 views

Trả lời

38

Nhận xét của tôi về câu trả lời của Renaud Bompuis đã sai lầm.

Thực ra, bạn có thể sử dụng kết buộc trễ và tham chiếu đến thư viện đối tượng 11.0 không bắt buộc.

Đoạn mã dưới đây sẽ làm việc mà không cần bất kỳ tài liệu tham khảo:

Dim f As Object 
Set f = Application.FileDialog(3) 
f.AllowMultiSelect = True 
f.Show 

MsgBox "file choosen = " & f.SelectedItems.Count 

Lưu ý rằng các công trình trên cũng trong thời gian chạy cũng có.

+2

+1 Luôn hy vọng điều này là có thể, chìa khóa để thực hiện công việc ràng buộc muộn là đi qua các tùy chọn số thay vì msoOpenFileDialog vv Vì vậy, đơn giản nhưng một câu trả lời tuyệt vời:) –

+0

Bạn có thể, nhưng không nên. Với sự ràng buộc trễ bạn đang mã hóa trong bóng tối .. Khi bạn thêm tham chiếu và khai báo đúng và thiết lập đối tượng đệ trình của bạn, IDE cho bạn thấy các gợi ý, trong khi với sự ràng buộc trễ nó sẽ không. – Chris

+1

@Chris OTOH, sử dụng ràng buộc sớm có nghĩa là người dùng của bạn cũng phải có các tham chiếu được thêm vào. Điều đó có nghĩa là ràng buộc trễ là cần thiết cho một số ứng dụng. –

17

Trong Access 2007, bạn chỉ cần sử dụng Application.FileDialog.

Dưới đây là ví dụ từ các tài liệu Access:

' Requires reference to Microsoft Office 12.0 Object Library. ' 
Private Sub cmdFileDialog_Click() 
    Dim fDialog As Office.FileDialog 
    Dim varFile As Variant 

    ' Clear listbox contents. ' 
    Me.FileList.RowSource = "" 

    ' Set up the File Dialog. ' 
    Set fDialog = Application.FileDialog(msoFileDialogFilePicker) 

    With fDialog 

     ' Allow user to make multiple selections in dialog box ' 
     .AllowMultiSelect = True 

     ' Set the title of the dialog box. ' 
     .Title = "Please select one or more files" 

     ' Clear out the current filters, and add our own.' 
     .Filters.Clear 
     .Filters.Add "Access Databases", "*.MDB" 
     .Filters.Add "Access Projects", "*.ADP" 
     .Filters.Add "All Files", "*.*" 

     ' Show the dialog box. If the .Show method returns True, the ' 
     ' user picked at least one file. If the .Show method returns ' 
     ' False, the user clicked Cancel. ' 
     If .Show = True Then 

     'Loop through each file selected and add it to our list box. ' 
     For Each varFile In .SelectedItems 
      Me.FileList.AddItem varFile 
     Next 

     Else 
     MsgBox "You clicked Cancel in the file dialog box." 
     End If 
    End With 
End Sub 

Như mẫu nói, chỉ cần chắc chắn rằng bạn có một tham chiếu đến Microsoft Access 12.0 Object Library (dưới VBE IDE> Tools> Tài liệu tham khảo thực đơn).

+0

Thực ra, bạn có thể sử dụng ràng buộc trễ và tham chiếu đến thư viện đối tượng 11.0 không bắt buộc. Đoạn mã dưới đây sẽ làm việc mà không cần bất kỳ tài liệu tham khảo: Dim f Như Object Set f = Application.FileDialog (3) f.AllowMultiSelect = True f.Show MsgBox "tập tin choosen =" & f.SelectedItems .Count Lưu ý rằng các công trình trên cũng tốt tôi cũng chạy. Albert D.Kallal Edmonton, Alberta Canada [email protected] –

+0

Ví dụ được sao chép từ đây: http://support.microsoft.com/en-us/kb/824272 – Mike

2

bổ sung những gì Albert đã nói:

Mã này (một mashup các mẫu khác nhau) cung cấp khả năng để có một hộp thoại SaveAs

Function getFileName() As String 
    Dim fDialog As Object 
    Set fDialog = Application.FileDialog(msoFileDialogSaveAs) 
    Dim varFile As Variant 

    With fDialog 
     .AllowMultiSelect = False 
     .Title = "Select File Location to Export XLSx :" 
     .InitialFileName = "jeffatwood.xlsx" 

    If .Show = True Then 
     For Each varFile In .SelectedItems 
     getFileName = varFile 
     Next 
    End If 
End With 
End Function 
+1

Đây chỉ là mã cho cùng một câu trả lời mà mọi người khác đã đưa ra. Đó là chi tiết hơn và hiển thị nhiều tùy chọn hơn, nhưng nó chỉ là một câu trả lời của câu trả lời hiện có. –

+0

@ David-W-Fenton Không, không phải vậy. Nó trả về một tên tập tin và cho phép bạn thiết lập một bộ lọc, mà không phải của các câu trả lời khác làm. Nó hoàn toàn miễn phí các phụ thuộc của Office và có thể được dán trực tiếp vào bất kỳ dạng hoặc mô-đun nào, vì vậy nó là plug and play. Đây là câu trả lời tốt hơn, và đối với các câu trả lời khác, phê bình của bạn thậm chí còn thích hợp hơn cho những người sao chép/dán từ tài liệu. –

0

Tôi đồng ý John M có câu trả lời tốt nhất để OP của câu hỏi. Tư tưởng không được giải thích rõ ràng, mục đích rõ ràng là lấy tên tệp đã chọn, trong khi các câu trả lời khác trả về số lượng hoặc danh sách. Tuy nhiên, tôi sẽ thêm rằng msofiledialogfilepicker có thể là một lựa chọn tốt hơn trong trường hợp này. tức là:

Dim f As object 
Set f = Application.FileDialog(msoFileDialogFilePicker) 
dim varfile as variant 
f.show 
with f 
    .allowmultiselect = false 
    for each varfile in .selecteditems 
     msgbox varfile 
    next varfile 
end with 

Lưu ý: giá trị của varfile sẽ giữ nguyên vì chọn nhiều lần là sai (chỉ một mục được chọn). Tôi đã sử dụng giá trị của nó bên ngoài vòng lặp với thành công như nhau. Nó có lẽ là thực hành tốt hơn để làm điều đó như John M đã làm, tuy nhiên. Ngoài ra, bộ chọn thư mục có thể được sử dụng để nhận thư mục đã chọn. Tôi luôn thích kết buộc muộn hơn, nhưng tôi nghĩ đối tượng có nguồn gốc từ thư viện truy cập mặc định, vì vậy có thể không cần thiết ở đây

1

Tôi có giải pháp tương tự ở trên và hoạt động để mở, lưu, chọn tệp. Tôi dán nó vào mô-đun riêng của nó và sử dụng trong tất cả các Access DB của tôi tạo ra. Khi mã nói nó yêu cầu Thư viện đối tượng Microsoft Office 14.0. Chỉ một tùy chọn khác tôi giả sử:

Public Function Select_File(InitPath, ActionType, FileType) 
    ' Requires reference to Microsoft Office 14.0 Object Library. 

    Dim fDialog As Office.FileDialog 
    Dim varFile As Variant 


    If ActionType = "FilePicker" Then 
     Set fDialog = Application.FileDialog(msoFileDialogFilePicker) 
     ' Set up the File Dialog. 
    End If 
    If ActionType = "SaveAs" Then 
     Set fDialog = Application.FileDialog(msoFileDialogSaveAs) 
    End If 
    If ActionType = "Open" Then 
     Set fDialog = Application.FileDialog(msoFileDialogOpen) 
    End If 
    With fDialog 
     .AllowMultiSelect = False 
     ' Disallow user to make multiple selections in dialog box 
     .Title = "Please specify the file to save/open..." 
     ' Set the title of the dialog box. 
     If ActionType <> "SaveAs" Then 
      .Filters.Clear 
      ' Clear out the current filters, and add our own. 
      .Filters.Add FileType, "*." & FileType 
     End If 
     .InitialFileName = InitPath 
     ' Show the dialog box. If the .Show method returns True, the 
     ' user picked a file. If the .Show method returns 
     ' False, the user clicked Cancel. 
     If .Show = True Then 
     'Loop through each file selected and add it to our list box. 
      For Each varFile In .SelectedItems 
       'return the subroutine value as the file path & name selected 
       Select_File = varFile 
      Next 
     End If 
    End With 
End Function 
Các vấn đề liên quan