错误430类不支持自动化或不支持预期的接口?

时间:2018-12-11 15:11:42

标签: excel vba

我有一本工作簿,当我打开时,我的一个宏不起作用。如果我进入编辑器并尝试重新编译代码,我会得到

  

错误430类不支持自动化或不支持预期的接口

在此代码行上:

If Sheets("sheet1").Range("myRange").Cells(1,1) = 1 Then
    Sheets("mysheet").Move before:=Sheets("other sheet") **<<<-- ERROR HERE**
    If Sheets("mysheet (1)").Range("DA1").Value > 0 Then
        Dim n as long
        For n = 2 to Sheets("mysheet (1)").Range("DA1").Value + 1
            Sheets("mysheet (" & n & ")").Move before:=Sheets("other sheet")
        Next n
    End If
End If

1 个答案:

答案 0 :(得分:0)

那种单线的飞机一次要做太多事情,很难正确诊断问题。

首先声明Worksheet变量,以便您有一个早期绑定的接口可以让您的成员致电-请注意,我在这里假设ActiveWorkbook符合条件,这应该是等同于您的隐式限定Sheets调用:

Dim mySheet As Worksheet
Set mySheet = ActiveWorkbook.Worksheets("mySheet")

Dim otherSheet As Worksheet
Set otherSheet = ActiveWorkbook.Worksheets("other sheet")

mySheet.Move Before:=otherSheet

如果您的代码进入.Move方法调用,则它应该“正常工作”。如果在此之前炸毁,请验证:

  • 工作表名称正确地用字符串文字拼写
  • 该工作表的父工作簿为ActiveWorkbook

如果所有这些表都在编译时存在于ThisWorkbook(包含VBA项目的工作簿)中,则您不需要任何变量-您已经有了它们。

查看 Project Explorer (Ctrl + R),所有图纸模块都有两个名称。括号中的一个是Name属性;前一个是CodeName,您可以在(Name)下的属性(F4)工具窗口中找到它。将其更改为例如mySheet,现在标识符mySheet可以在此VBA项目中的任何地方用于引用该特定工作表-不管其“标签名”是什么。