运行时错误的types

下面的代码给我这个错误: Class does not support automation or does not support expected interface

任何人都可以请解释为什么我得到这个错误

 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 

问题是在As New

AFAIK你不能直接创build一个工作表的新实例; 您必须调用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 

不知道是否可以解释,但我认为你可以通过初始化variableswks来修复你的代码。 像这样的东西

 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你将设置数据types。 但是VBA是一种神秘的东西。 一旦我试图读取MSDN文档中的东西,它比地狱更糟…

编辑1:我做了一些进一步的testing,这个漂亮的错误味精,你提到听起来非常亲,但是如果你debugging代码,并hover有关wksvariables,它告诉你, wks = <Object variable or With block variable not set>更容易阅读。 所以到将来,尝试debugging,并hover你的variables。 如果你不知道该怎么做,试试几个Set s 🙂 VBA是关于魔术的