编辑:我几乎确信这是来自here
的Mac版Excel的错误的遗留。如上面链接中所述,在工作表的VBA编辑器代码窗口中单击下拉菜单时,最初会显示错误消息。从那时起,不仅开始发生以下错误,而且在特定工作表上编辑范围的其他尝试也产生了相同的错误消息。甚至像
Worksheets("Sheet2").Range("A1").Value = 3.14159
我为解决此问题所做的事情:
感谢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
答案 0 :(得分:1)
以下是我要注意的几件事:
分配范围对象时,您需要Set
关键字
设置ReservationRange = .Range(“ I16:N500”)
reservationRow
应该声明为Long
,以避免潜在的溢出,因为工作表中的行数可以大于我可以容纳的Integer
(我相信Mac也是如此,但是让我知道)
()
周围不需要MsgBox ("Error")
如果Target
多于一行怎么办?您只会得到范围行中的第一个单元格。