2009-10-18 41 views
7

Sử dụng VB6Cách chọn thư mục chỉ bằng cách sử dụng điều khiển hộp thoại chung

Mã.

CommonDialog1.DialogTitle = "Open File" 
CommonDialog1.Filter = "*.*" 
CommonDialog1.FilterIndex = 1 
CommonDialog1.Flags = cdlOFNAllowMultiselect + cdlOFNExplorer 
CommonDialog1.Flags = cdlOFNFileMustExist + cdlOFNHideReadOnly 
CommonDialog1.CancelError = True 
On Error Resume Next 
CommonDialog1.ShowOpen 
If Err Then 
    'MsgBox "Select Folder" 
    Exit Sub 
End If 

Từ mã trên, tôi chọn tệp, Nhưng tôi không muốn chọn tệp, tôi chỉ muốn chọn thư mục. Cách sửa đổi mã của tôi.

Cần mã vb6 Trợ giúp?

Trả lời

6

Đã một thời gian kể từ khi tôi phải làm bất kỳ công việc cơ bản nào nhưng tôi nghĩ thay vì sử dụng hộp thoại chung để mở tên tệp, bạn nên sử dụng hàm SHBrowseForFolder. của API Windows. Dưới đây là một số link đến trang mô tả cách sử dụng của nó.

Update (2017): liên kết cung cấp được chia nhưng a backed-up version can be viewed on archive.org

+4

lưu ý: liên kết bị hỏng. – Roylee

+0

Đừng làm vậy. Câu trả lời nên được khép kín và không phụ thuộc vào một liên kết bên ngoài vì chúng có thể phá vỡ trong những năm qua. Một liên kết có thể được đưa ra như là một tham chiếu để làm phong phú thêm câu trả lời của bạn nhưng không nên tạo thành phần chính của nó. – thebunnyrules

+0

Bất kỳ ai muốn xem liên kết không gián đoạn có thể nhấp vào đây: https://web.archive.org/web/20081204022345/http://www.base64.co.uk:80/shbrowseforfolder.html – thebunnyrules

6

Để chọn thư mục, bạn có thể sử dụng Thành phần Shell và Tự động hóa.

Private shlShell As Shell32.Shell 
Private shlFolder As Shell32.Folder 
Private Const BIF_RETURNONLYFSDIRS = &H1 

Private Sub Command1_Click() 
    If shlShell Is Nothing Then 
     Set shlShell = New Shell32.Shell 
    End If 
    Set shlFolder = shlShell.BrowseForFolder(Me.hWnd, "Select a Directory", BIF_RETURNONLYFSDIRS) 
    If Not shlFolder Is Nothing Then 
     MsgBox shlFolder.Title 
    End If 
End Sub 

Bạn sẽ cần thêm tham chiếu đến shell32.dll vào dự án của mình. Sử dụng trình đơn Dự án/Tham khảo ... và sau đó duyệt qua shell32.dll.

Hoặc bạn có thể sử dụng API Windows như Twotymz đề xuất.

+0

giá trị này hoạt động khá tốt, nhưng giá trị shlFolder.Title chỉ là tên thư mục được chọn chứ không phải toàn bộ đường dẫn. –

+0

@KenForslund: Tôi đoán rằng bạn có thể truy xuất một thứ khác trên 'shlFolder'object ngoài' Title' phù hợp hơn. –

+0

không xuất hiện như vậy. .ParentFolder là tên thư mục tiếp theo, nhưng một lần nữa, chỉ là một tên đơn giản, không phải là đường dẫn của bất kỳ loại nào. Điều này vẫn giải quyết nhu cầu của tôi cho thời điểm này, nhưng tôi đã mong đợi một con đường mạnh mẽ hơn. –

1

tôi dù đó là tổng quát hơn VBA câu hỏi dù sao, mở chọn hộp thoại thư mục trong VBA cho văn phòng> = 2k3.

Tôi không thể tin rằng nó quá khó, vì tôi cần có chức năng tương tự. Ít googling làm cho nó. Đây là giải pháp đơn giản đẹp take a look

Function GetFolderName() 
    Dim lCount As Long 

    GetFolderName = vbNullString 
    With Application.FileDialog(msoFileDialogFolderPicker) 
     .InitialFileName = OpenAt 
     .Show 
     For lCount = 1 To .SelectedItems.Count 
      GetFolderName = .SelectedItems(lCount) 
     Next lCount 
    End With 
End Function 
+0

Câu hỏi là về VB6, không phải về VBA! , Không có bất kỳ 'Application.FileDialog' trong VB6;). –

2

Đây là một chủ đề cũ, nhưng có lẽ ai đó sẽ được giúp đỡ của thành viên này. Mã này hoạt động trong VB6 cho tôi:

Private Sub ChooseDir_Click() 
    Dim sTempDir As String 
    On Error Resume Next 
    sTempDir = CurDir 'Remember the current active directory 
    CommonDialog1.DialogTitle = "Select a directory" 'titlebar 
    CommonDialog1.InitDir = App.Path 'start dir, might be "C:\" or so also 
    CommonDialog1.FileName = "Select a Directory" 'Something in filenamebox 
    CommonDialog1.Flags = cdlOFNNoValidate + cdlOFNHideReadOnly 
    CommonDialog1.Filter = "Directories|*.~#~" 'set files-filter to show dirs only 
    CommonDialog1.CancelError = True 'allow escape key/cancel 
    CommonDialog1.ShowSave 'show the dialog screen 

    If Err <> 32755 Then ' User didn't chose Cancel. 
     Me.SDir.Text = CurDir 
    End If 

    ChDir sTempDir 'restore path to what it was at entering 
End Sub 
+0

Bằng cách sử dụng mã này, người dùng nên nhập tên cho một tệp sẽ trả về một FileName với phần mở rộng của '~ # ~' và điều này sẽ đi vào trong thư mục bằng cách chọn nút Open và không nhập tên nó sẽ không hoạt động;) . –

+0

'CurDir' là điểm ở đây. Nó hoạt động –

Các vấn đề liên quan