Excel 运行时错误的类型

Excel 运行时错误的类型,excel,runtime-error,vba,Excel,Runtime Error,Vba,下面的代码给出了此错误: 类不支持自动化或不支持预期接口 谁能解释一下我为什么会犯这个错误 Sub typeofcheck() Dim wks As New Worksheet If TypeOf wks Is Worksheet Then MsgBox "This is Worksheet" Else MsgBox "This is not" End If End Sub 不确定是否可以解释,但我认为可以通过初始化变量wks来修复代码 Sub typeofcheck() D

下面的代码给出了此错误:
类不支持自动化或不支持预期接口

谁能解释一下我为什么会犯这个错误

Sub typeofcheck()
Dim wks As New Worksheet

If TypeOf wks Is Worksheet Then
    MsgBox "This is Worksheet"
Else
    MsgBox "This is not"
End If
End Sub

不确定是否可以解释,但我认为可以通过初始化变量wks来修复代码

Sub typeofcheck()
Dim wks As New Worksheet
Set wks = Sheets("someFunnySheetName")


If TypeOf wks Is Worksheet Then
    MsgBox "This is Worksheet"
Else
    MsgBox "This is not"
End If
End Sub
问题是,使用
DIM
只需分配一些内存,而使用
Set
则需要设置数据类型。但是VBA是一种迷雾。有一次我试图阅读MSDN文档中的内容,结果比地狱还糟糕


edit1:我做了一些进一步的测试,你提到的这个不错的错误消息听起来非常专业,但是如果你调试代码,并将鼠标悬停在wks变量上,它会告诉你
wks=
,这更容易阅读。所以,为了将来,尝试调试,并悬停您的变量。如果你不知道该怎么做,试着设置一些
Set
s:)VBA是关于魔法的

不确定是否可以解释,但我认为你可以通过初始化变量wks来修复你的代码

Sub typeofcheck()
Dim wks As New Worksheet
Set wks = Sheets("someFunnySheetName")


If TypeOf wks Is Worksheet Then
    MsgBox "This is Worksheet"
Else
    MsgBox "This is not"
End If
End Sub
问题是,使用
DIM
只需分配一些内存,而使用
Set
则需要设置数据类型。但是VBA是一种迷雾。有一次我试图阅读MSDN文档中的内容,结果比地狱还糟糕


edit1:我做了一些进一步的测试,你提到的这个不错的错误消息听起来非常专业,但是如果你调试代码,并将鼠标悬停在wks变量上,它会告诉你
wks=
,这更容易阅读。所以,为了将来,尝试调试,并悬停您的变量。如果你不知道该怎么做,试着设置一些
s:)VBA是关于魔法的问题在于
作为新的

当然,您不能直接创建工作表的新实例;您必须调用
Sheets
集合中的
Add
方法,例如:

Public Sub typeofcheck()
    Dim wks As Worksheet
    Set wks = ActiveWorkbook.Sheets.Add

    If TypeOf wks Is Worksheet Then
        MsgBox "This is Worksheet"
    Else
        MsgBox "This is not"
    End If
End Sub

问题出在新的

当然,您不能直接创建工作表的新实例;您必须调用
Sheets
集合中的
Add
方法,例如:

Public Sub typeofcheck()
    Dim wks As Worksheet
    Set wks = ActiveWorkbook.Sheets.Add

    If TypeOf wks Is Worksheet Then
        MsgBox "This is Worksheet"
    Else
        MsgBox "This is not"
    End If
End Sub

该错误是由于尝试访问而导致的

做你想做的事的正确方法是:

Sub typeofcheck()
Dim wks As Worksheet
Set wks = Worksheets.Add

Debug.Print TypeOf wks Is Worksheet
If TypeOf wks Is Worksheet Then
    MsgBox "This is Worksheet"
Else
    MsgBox "This is not"
End If
End Sub

该错误是由于尝试访问而导致的

做你想做的事的正确方法是:

Sub typeofcheck()
Dim wks As Worksheet
Set wks = Worksheets.Add

Debug.Print TypeOf wks Is Worksheet
If TypeOf wks Is Worksheet Then
    MsgBox "This is Worksheet"
Else
    MsgBox "This is not"
End If
End Sub

@如果使用dim,则声明变量,如果使用set,则将对象激活,则使用set语句将内存分配给对象。@如果使用dim,则声明变量,如果使用set语句将对象激活,则使用set语句将内存分配给对象。