我希望用户打开他们选择的文件来执行操作。我将变量File_path指定为Variant,因为我不知道它的类型是什么。我在代码中包含Debug.Print TypeName(File_path)以查看它给我的内容。我的代码是这样的:
Dim File_path As Variant
FilterType = "Text Files (*.txt),*.txt," & "Comma Separated Files (*.csv),*.csv," & "ASCII Files (*.asc),*.asc," & "All Files (*.*),*.*"
FilterIndex = 4
Title = "File to be Selected"
File_path = Application.GetOpenFilename(FileFilter:=FilterType, FilterIndex:=FilterIndex, Title:=Title)
If File_path = False Then
MsgBox "No file was selected."
Exit Sub
End If
Debug.Print TypeName(File_path)
Debug.Print给了我String。
但是当我用
重新运行代码时 Dim File_path As String
我收到运行时错误'13':行上的类型不匹配
If File_path = False Then
在这种情况下,什么是正确的声明,以及发现它的一般过程是什么?感谢。
答案 0 :(得分:2)
如果您想检查是否有任何字符串分配给您的变量,您需要通过以下方式之一来执行此操作:
'1st option
if File_path = "" then
'2nd option- recommended
if Len(File_path) = 0 then
在这两种情况下,请保留变量File_path as String
。
答案 1 :(得分:1)
考虑:
Sub dural()
Dim s As String
s = CStr(Application.GetOpenFilename())
If s = "False" Then
MsgBox "look like you cancelled"
End If
End Sub
答案 2 :(得分:1)
您应该将返回值声明为变体
Dim File_path As Variant
您收到错误的原因是Application.GetOpenFileName
返回Variant
。当该值可以转换为正常的字符串时,但当用户单击“取消”或“X”按钮时,将返回Boolean
并且无法直接与String
类型进行比较。
为了证明这一点,您可以运行以下代码。如果单击取消,则不会出现错误。如果您选择一个文件,则会收到与您收到的相同Type Mismatch
错误,但原因相反。尝试将String
分配给Boolean
类型。
Dim ans As Boolean
ans = Application.GetOpenFilename()
如果你查看了Microsoft Documentation,那就很好地解释了用法。