Workbook_SheetChange中的VBA错误:458,不支持自动化类型

时间:2018-11-25 02:00:18

标签: excel vba excel-vba

编辑:我几乎确信这是来自here

的Mac版Excel的错误的遗留。

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

Worksheets("Sheet2").Range("A1").Value = 3.14159

我为解决此问题所做的事情:

  1. 创建了一个新的工作表
  2. 将Sheet2的内容复制到新工作表中
  3. 将VBA代码段复制到ThisWorkbook窗口而不是新工作表的窗口。
  4. 而且有效-没有458错误消息

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

下面的原始问题

我在Mac上,正在编写“工作簿表格更改”事件。它可以正确触发,但是在“ 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

1 个答案:

答案 0 :(得分:1)

以下是我要注意的几件事:

  1. 分配范围对象时,您需要Set关键字

    设置ReservationRange = .Range(“ I16:N500”)

  2. reservationRow应该声明为Long,以避免潜在的溢出,因为工作表中的行数可以大于我可以容纳的Integer(我相信Mac也是如此,但是让我知道)

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

  4. 如果Target多于一行怎么办?您只会得到范围行中的第一个单元格。