【问题标题】:Error 430 Class does not support Automation or does not support expected interface?错误 430 类不支持自动化或不支持预期的接口?
【发布时间】:2018-12-12 02:09:58
【问题描述】:

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

错误 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

【问题讨论】:

  • 该工作簿的工具 - 参考中有一些 MISSING: 参考?
  • 不,我检查过,没有参考丢失过什么。如果我在没有通知的情况下禁用了宏。然后我可以重新编译宏,打开启用的宏,然后我可以打开它。
  • 该工作簿定义了一个名为Sheets的函数或属性?
  • @GSerg,该代码所做的只是将工作表(“mysheet(1)”)复制到我的“其他工作表”选项卡之前
  • @ThisGuyJustNeedsHelp 不,这不是 GSerg 所要求的。他建议如果您无意中在封闭范围内使用名为Sheets 的变量隐藏了内置Sheets,则可能会出现此错误。你能在这个模块中显示其余的代码吗?

标签: excel vba


【解决方案1】:

单线同时做的事情太多,很难正确诊断问题。

首先声明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) 下的Properties (F4) 工具窗口中找到它。将其更改为例如mySheet,现在标识符 mySheet 可以在此 VBA 项目中的任何位置使用来引用 该特定工作表 - 无论其“选项卡名称”是什么意思。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 2013-11-20
    • 2022-08-09
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多