Excel VBA Dim声明难题

时间:2013-12-05 16:56:01

标签: excel-vba vba excel

我希望用户打开他们选择的文件来执行操作。我将变量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

在这种情况下,什么是正确的声明,以及发现它的一般过程是什么?感谢。

3 个答案:

答案 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,那就很好地解释了用法。