Private Sub Command1_Click() On Error GoTo Err CommonDialog1.CancelError = True CommonDialog1.ShowOpen If CommonDialog1.filename <> "" Then msgbox CommonDialog1.FileTitle msgbox CommonDialog1.filename End If
Err: If Err.Number = 32755 Then MsgBox "你按了取消!", vbCritical, "系统提示" End If End Sub
Option ExplicitPrivate Type OPENFILENAME lStructSize As Long hwndOwner As Long hInstance As Long lpstrFilter As String lpstrCustomFilter As String nMaxCustFilter As Long nFilterIndex As Long lpstrFile As String nMaxFile As Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String flags As Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustData As Long lpfnHook As Long lpTemplateName As String End Type'系统全局常量======================================================================== Private Const OFN_LONGNAMES = &H200000 Private Const OFN_PATHMUSTEXIST = &H800 Private Const OFN_FILEMUSTEXIST = &H1000 Private Const OFN_HIDEREADONLY = &H4 Private Const OFN_EXPLORER = &H80000 Private Const OFN_OVERWRITEPROMPT = &H2 Private Const OFN_ALLOWMULTISELECT = &H200Private Const CB_FINDSTRING = &H14C Private Const CB_FINDSTRINGEXACT = &H158 Private Const LB_FINDSTRING = &H18F Private Const EM_SETREADONLY = &HCF Private Const SND_RESOURCE = &H40004 Private Const SND_ASYNC = &H1 ' play asynchronously Private Const SND_MEMORY = &H4 ' lpszSoundName points to a memory file Private Const SND_NODEFAULT = &H2 ' silence not default, if sound not found'系统全局函数======================================================================== Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As LongPrivate Sub Command1_Click() Dim fName As String, OfName As OPENFILENAME OfName.lStructSize = Len(OfName) OfName.hwndOwner = Me.hWnd OfName.hInstance = App.hInstance OfName.lpstrFilter = "*.*" & Chr(0) & "*.*" OfName.lpstrFile = Space(255) & Chr(0) OfName.nMaxFile = 256 OfName.lpstrFileTitle = Space(255) & Chr(0) OfName.nMaxFileTitle = 256 OfName.lpstrTitle = "打开" OfName.flags = OFN_LONGNAMES + OFN_PATHMUSTEXIST + OFN_HIDEREADONLY + OFN_OVERWRITEPROMPT + OFN_ALLOWMULTISELECT + OFN_EXPLORER
If GetOpenFileName(OfName) Then fName = OfName.lpstrFile While fName <> "" MsgBox Left(fName, InStr(fName, Chr(0))) fName = Mid(fName, InStr(fName, Chr(0)) + 1) Wend End If End Sub
使用commondialog可以实现楼主的要求,但lihonggen0(李洪根,用.NET,标准答案来了) 的方法不全面,因为楼主需要选取一些文件,我的代码如下:Private Sub Command1_Click() On Error Resume Next With CommonDialog1 .CancelError = True .Filter = "TextFile(*.txt)|*.txt|AllFile(*.*)|*.*" .Flags = cdlOFNAllowMultiselect Or cdlOFNLongNames Or cdlOFNHideReadOnly .ShowOpen MsgBox "Your selection are " + .FileName, 64, "Select Files" End With End Sub对于flags可参考一下说明进行设置: 常数 值 描述 1、cdlOFNAllowMultiselect &H200 它指定文件名列表框允许多重选择。 运行时,通过按 SHIFT 键以及使用 UP ARROW 和 DOWN ARROW 键可选择多个文件。作完此操作后,FileName 属性就返回一个包含全部所选文件名的字符串。串中各文件名用空格隔开。
On Error GoTo Err
CommonDialog1.CancelError = True CommonDialog1.ShowOpen
If CommonDialog1.filename <> "" Then
msgbox CommonDialog1.FileTitle
msgbox CommonDialog1.filename
End If
Err:
If Err.Number = 32755 Then
MsgBox "你按了取消!", vbCritical, "系统提示"
End If
End Sub
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type'系统全局常量========================================================================
Private Const OFN_LONGNAMES = &H200000
Private Const OFN_PATHMUSTEXIST = &H800
Private Const OFN_FILEMUSTEXIST = &H1000
Private Const OFN_HIDEREADONLY = &H4
Private Const OFN_EXPLORER = &H80000
Private Const OFN_OVERWRITEPROMPT = &H2
Private Const OFN_ALLOWMULTISELECT = &H200Private Const CB_FINDSTRING = &H14C
Private Const CB_FINDSTRINGEXACT = &H158
Private Const LB_FINDSTRING = &H18F
Private Const EM_SETREADONLY = &HCF
Private Const SND_RESOURCE = &H40004
Private Const SND_ASYNC = &H1 ' play asynchronously
Private Const SND_MEMORY = &H4 ' lpszSoundName points to a memory file
Private Const SND_NODEFAULT = &H2 ' silence not default, if sound not found'系统全局函数========================================================================
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As LongPrivate Sub Command1_Click()
Dim fName As String, OfName As OPENFILENAME OfName.lStructSize = Len(OfName)
OfName.hwndOwner = Me.hWnd
OfName.hInstance = App.hInstance
OfName.lpstrFilter = "*.*" & Chr(0) & "*.*"
OfName.lpstrFile = Space(255) & Chr(0)
OfName.nMaxFile = 256
OfName.lpstrFileTitle = Space(255) & Chr(0)
OfName.nMaxFileTitle = 256
OfName.lpstrTitle = "打开"
OfName.flags = OFN_LONGNAMES + OFN_PATHMUSTEXIST + OFN_HIDEREADONLY + OFN_OVERWRITEPROMPT + OFN_ALLOWMULTISELECT + OFN_EXPLORER
If GetOpenFileName(OfName) Then
fName = OfName.lpstrFile While fName <> ""
MsgBox Left(fName, InStr(fName, Chr(0)))
fName = Mid(fName, InStr(fName, Chr(0)) + 1)
Wend
End If
End Sub
On Error Resume Next
With CommonDialog1
.CancelError = True
.Filter = "TextFile(*.txt)|*.txt|AllFile(*.*)|*.*"
.Flags = cdlOFNAllowMultiselect Or cdlOFNLongNames Or cdlOFNHideReadOnly
.ShowOpen
MsgBox "Your selection are " + .FileName, 64, "Select Files"
End With
End Sub对于flags可参考一下说明进行设置: 常数 值 描述
1、cdlOFNAllowMultiselect &H200 它指定文件名列表框允许多重选择。 运行时,通过按 SHIFT 键以及使用 UP ARROW 和 DOWN ARROW 键可选择多个文件。作完此操作后,FileName 属性就返回一个包含全部所选文件名的字符串。串中各文件名用空格隔开。
2、cdlOFNCreatePrompt &H2000 当文件不存在时对话框要提示创建文件。该标志自动设置 cdlOFNPathMustExist 和 cdlOFNFileMustExist 标志。 3、cdlOFNExplorer &H80000 它使用类似资源管理器的打开一个文件的对话框模板。适用于 Windows 95 和 Windows NT 4.0。 4、CdlOFNExtensionDifferent &H400 它指示返回的文件扩展名与 DefaultExt 属性指定的扩展名不一致。如果 DefaultExt 属性是 Null,或者扩展相匹配,或者没有扩展时,此标志不设置。当关闭对话框时,可以检查这个标志的值。 5、cdlOFNFileMustExist &H1000 它指定只能输入文件名文本框已经存在的文件名。如果该标志被设置,则当用户输入非法的文件名时,要显示一个警告。该标志自动设置cdlOFNPathMustExist 标志。 6、cdlOFNHelpButton &H10 使对话框显示帮助按钮。 7、cdlOFNHideReadOnly &H4 隐藏只读复选框。 8、cdlOFNLongNames &H200000 使用长文件名。 9、cdlOFNNoChangeDir &H8 强制对话框将对话框打开时的目录置成当前目录。 10、CdlOFNNoDereferenceLinks &H100000 不要间接引用外壳链接(也称作快捷方式)。缺省时,选取外壳链接会引起它被外壳间接引用。 11、cdlOFNNoLongNames &H40000 无长文件名。 12、CdlOFNNoReadOnlyReturn &H8000 它指定返回的文件不能具有只读属性,也不能在写保护目录下面。 13、cdlOFNNoValidate &H100 它指定公共对话框允许返回的文件名中含有非法字符。 14、cdlOFNOverwritePrompt &H2 使“另存为”对话框当选择的文件已经存在时应产生一个信息框,用户必须确认是否覆盖该文件。 15、cdlOFNPathMustExist &H800 它指定只能输入有效路径。如果设置该标志,输入非法路径时,应显示一个警告信息。 16、cdlOFNReadOnly &H1 建立对话框时,只读复选框初始化为选定。该标志也指示对话框关闭时只读复选框的状态。 17、cdlOFNShareAware &H4000 它指定忽略共享冲突错误。