存储数组与单值比较

问题描述 投票:0回答:1

此代码来自另一个工作簿,该工作簿将动态值列

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
arrays excel vba multidimensional-array variant
1个回答
1
投票

如果您将单个值分配给 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")
© www.soinside.com 2019 - 2024. All rights reserved.