Excel VBA Dim声明难题

Excel VBA Dim声明难题,excel,vba,Excel,Vba,我希望用户打开一个他们选择的文件在上面做事情。我将变量File_path指定为变量,因为我不知道它的类型。我在代码中包括Debug.Print TypeName(文件路径),以查看它给了我什么。我的代码是: Dim File_path As Variant FilterType = "Text Files (*.txt),*.txt," & "Comma Separated Files (*.csv),*.csv," & "ASCII Files (*.asc),*.asc

我希望用户打开一个他们选择的文件在上面做事情。我将变量File_path指定为变量,因为我不知道它的类型。我在代码中包括Debug.Print TypeName(文件路径),以查看它给了我什么。我的代码是:

 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)
打印给我字符串

但是当我用

 Dim File_path As String
我得到一个运行时错误“13”:行中的类型不匹配

 If File_path = False Then

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

如果您想检查是否有任何字符串分配给您的变量,您需要通过以下方式之一进行检查:

'1st option
if File_path = "" then

'2nd option- recommended
if Len(File_path) = 0 then

在这两种情况下,将变量
文件\u路径保留为String

如果要检查是否有任何字符串分配给变量,则需要通过以下方式之一执行此操作:

'1st option
if File_path = "" then

'2nd option- recommended
if Len(File_path) = 0 then
在这两种情况下,将变量
文件路径保持为字符串

考虑:

Sub dural()
    Dim s As String
    s = CStr(Application.GetOpenFilename())
    If s = "False" Then
        MsgBox "look like you cancelled"
    End If
End Sub
考虑:

Sub dural()
    Dim s As String
    s = CStr(Application.GetOpenFilename())
    If s = "False" Then
        MsgBox "look like you cancelled"
    End If
End Sub

实际上,您应该将返回值声明为变量

Dim File_path As Variant

出现错误的原因是因为
应用程序。GetOpenFileName
返回一个
变量。当该值可以转换为正常的字符串时,但当用户单击“取消”或X按钮时,将返回一个
布尔值
,该值不能直接与
字符串
类型进行比较

Dim ans As Boolean
ans = Application.GetOpenFilename()
为了演示这一点,您可以运行下面的代码。如果单击“取消”,则不会出现错误。如果您选择了一个文件,您会收到与您收到的相同的
类型不匹配
错误,但原因相反。正在尝试将
字符串
分配给
布尔类型

Dim ans As Boolean
ans = Application.GetOpenFilename()

如果您查看了,它会很好地解释其中的用法。

您实际上应该将返回值声明为一个变量

Dim File_path As Variant

出现错误的原因是因为
应用程序。GetOpenFileName
返回一个
变量。当该值可以转换为正常的字符串时,但当用户单击“取消”或X按钮时,将返回一个
布尔值
,该值不能直接与
字符串
类型进行比较

Dim ans As Boolean
ans = Application.GetOpenFilename()
为了演示这一点,您可以运行下面的代码。如果单击“取消”,则不会出现错误。如果您选择了一个文件,您会收到与您收到的相同的
类型不匹配
错误,但原因相反。正在尝试将
字符串
分配给
布尔类型

Dim ans As Boolean
ans = Application.GetOpenFilename()
如果你看一下这本书,它会很好地解释它的用法