此代码来自另一个工作簿,该工作簿将动态值列
A6:A50
存储到数组中,当它们更改时,比较它们的差异并打印它们的差异 diff
到 Sheet2
以及从 Sheet1 (Dashboard)
中提取的一些其他值
。当我查看整列 A6:A50
并将该列存储为 2D 数组时,它的效果非常好。
现在我试图查看
F3
上的单个单元格 Sheet 1 (Dashboard)
而不是列 A6:A50
,每次加载代码时 Excel 都会崩溃。我认为问题在于从 A6:A50
数组切换到单个 F3
单元格。
代码在
Sheet1 (Dashboard)
Private Sub ToggleButton1_Click()
End Sub
Private Sub Worksheet_Calculate()
Dim keyCells As Range
Dim i As Long
Dim diff As Range
Dim cKey As Range
Dim ValueArray As Variant
If Worksheets("Dashboard").ToggleButton1.Value = True Then
On Error GoTo SafeExit
Application.Calculation = xlCalculationManual: Application.EnableEvents = False: Application.ScreenUpdating = False
Set keyCells = Me.Range("F3").Value
For i = 1 To UBound(myArr)
Set cKey = keyCells(i, 1)
If cKey.Value <> myArr(i, 1) Then
diff = (cKey.Value - myArr(i, 1))
NextRow = Sheet1.Cells(Sheet1.Rows.Count, "A").End(xlUp).Row + 1
ValueArray = Array(Me.Cells(i + 2, "A").Value, Me.Cells(i + 2, "B").Value, diff, Me.Cells(i + 2, "C").Value, _
Me.Cells(i + 2, "D").Value, Me.Cells(i + 2, "E").Value, Me.Cells(i + 5, "F").Value, _
Me.Cells(i + 2, "G").Value)
With Sheet2.Cells(NextRow, "A").Resize(, UBound(ValueArray) + 1)
.Value = ValueArray
End With
NextRow = NextRow + 1
End If
Next i
End If
SafeExit:
Application.Calculation = xlCalculationAutomatic: Application.EnableEvents = True: Application.ScreenUpdating = True
Call PopulateBA:
End Sub
代码在
ThisWorkbook
Private Sub Workbook_Open()
PopulateBA
End Sub
代码在
Module1
Public myArr()
Public Sub PopulateBA()
Dim myArr As Variant
myArr = Sheet1.Range("F3").Value
End Sub
如果您将单个值分配给 Variant 数组,您应该首先
ReDim
它。
Public myArr()
Public Sub PopulateBA()
ReDim myArr(1 To 1, 1 To 1)
myArr(1, 1) = Sheet1.Range("F3").Value
End Sub
当你分配给对象变量时,你不应该使用
Value
:
Set keyCells = Me.Range("F3")