【问题标题】:VBA Error in Workbook_SheetChange: 458, Automation Type Not SupportedWorkbook_SheetChange 中的 VBA 错误:458,不支持自动化类型
【发布时间】:2019-04-27 02:11:08
【问题描述】:

编辑:我几乎确信这是 Excel for Mac 的一个错误的遗留物,记录在 here

该错误消息最初是在单击工作表的 VBA 编辑器代码窗口中的下拉菜单时显示的,如上面的链接中所述。从那时起,不仅开始发生以下错误,而且在特定工作表上编辑范围的其他尝试也产生了相同的错误消息。甚至像

这样简单的东西
Worksheets("Sheet2").Range("A1").Value = 3.14159

我做了什么来解决这个问题:

  1. 创建了一个新工作表
  2. 将 Sheet2 的内容复制到新工作表中
  3. 将 VBA sn-p 复制到 ThisWorkbook 窗口而不是新工作表的窗口。
  4. 它成功了 - 没有 458 错误消息

感谢 QHarr 的反馈和修复;我也将您的建议纳入了代码中。

下面的原始问题

我在 Mac 上,正在编写 Workbook Sheet Change 事件。它正确触发,但在“Dim reservationRange As Range”行出错。使用 Excel 16.19 以下是错误:

运行时错误“458”:

变量使用 Visual Basic 不支持的自动化类型

代码如下:

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   With ThisWorkbook.Worksheets("Sheet2")
        Dim reservationRange As Range
        reservationRange = .Range("I16:N500")
            ' If change was made in Reservations section
            If Not Intersect(Target, reservationRange) Is Nothing Then
                Dim reservationRow As Integer
                reservationRow = Target.Row
                ' If weekly budget is less than 0
                If .Range("O" & reservationRow).Value < 0 Then
                    ' Output Message and undo
                    MsgBox ("Error")
                    Application.Undo
                End If
            End If
   End With
End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    以下是我需要注意的几点:

    1. 分配 Range 对象时需要 Set 关键字

      设置reservationRange = .Range("I16:N500")

    2. reservationRow 应声明为 Long 以避免潜在的溢出,因为工作表中的行数可能大于 Integer 我可以持有(我相信 Mac 也是如此,但请告诉我)

    3. MsgBox ("Error") 周围不需要()

    4. 如果Target 超过一行会怎样?您只会得到范围行中的第一个单元格。

    【讨论】:

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