使用VB6
代码。
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
从上面的代码中,我选择了一个文件,但是我不想选择文件,我只想选择文件夹。如何修改我的代码。
需要vb6代码帮助吗?
答案 0 :(得分:8)
已经有一段时间了,因为我必须做任何视觉基础工作,但我认为不是使用通用对话框来获取要打开的文件的名称,你应该使用 SHBrowseForFolder 函数它已经是Windows API的一部分。这是一个描述它用法的页面的link。
更新(2017年):提供的链接已损坏,但a backed-up version can be viewed on archive.org
答案 1 :(得分:7)
要选择文件夹,可以使用Shell和自动化组件。
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
您需要在项目中添加对shell32.dll
的引用。使用项目/参考...菜单,然后浏览shell32.dll
。
或者您可以像Twotymz建议的那样使用Windows API。
答案 2 :(得分:3)
这是一个老线程,但也许有人会得到这个帮助。 这段代码在VB6中适用于我:
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
答案 3 :(得分:-1)
我认为这是更普遍的VBA问题,在VBA for Office&gt; = 2k3中打开选择文件夹对话框。
我无法相信它太难了,因为我需要相同的功能。小小的谷歌搜索成功了。 这是一个很好的简单解决方案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