在我的工作簿中,我有一个存储机器的数组。通过一个按钮,我可以向阵列添加一些计算机。
最后的数组用在其他三个按钮中,每个按钮在不同的工作表上。我现在的问题是,如何存储具有变化值的全局数组?
这是我为数组添加一些值的代码:
Private Sub Add_Machine_Click()
Dim ws As Worksheet
Dim lastrow As Long
Dim Machine() As Variant
Dim DataRange As Range
Set ws = Worksheets("MachineTemplate")
lastrow = ws.Cells(Rows.Count, "A").End(xlUp).Row
Set DataRange = ws.Range("A1:A" & lastrow)
Set Cell = DataRange.Find(What:=ComboBox1.Value, LookIn:=xlFormulas, lookat:=xlWhole)
If Cell Is Nothing Then
ws.Range("A" & lastrow + 1) = ComboBox1.Value
End If
ReDim Machine(DataRange.Cells.Count)
For Each Cell In DataRange.Cells
Machine(x) = Cell.Value
x = x + 1
Next Cell
End Sub
现在我对其他三个按钮使用相同的代码。有什么办法可以将此代码存储为全局代码?
我已经准备好像这样在WorkbookSheet中尝试过
:Option Explicit
Public Machine() As Variant
Public ws As Worksheet
Public lastrow As Long
Public DataRange As Range
ws = Worksheets("MachineTemplate")
lastrow = ws.Cells(Rows.Count, "A").End(xlUp).Row
Set DataRange = ws.Range("A1:A" & lastrow)
ReDim Machine(DataRange.Cells.Count)
x = 0
For Each Cell In DataRange.Cells
Machine(x) = Cell.Value
x = x + 1
Next Cell
但是我知道这是完全错误的。
答案 0 :(得分:0)
您不需要全局阵列。由于您使用的是Redim
,而没有Preserve
,因此这意味着它每次都在DataRange
范围内被初始化
也可以创建数组,而不必每次都循环遍历它。您可以直接在一行中创建2D数组
Dim Machine as Variant
Machine = DataRange.Value
您可能还希望看到VBA Arrays And Worksheet Ranges
我通常避免使用全局变量。如果发生错误,它们很容易在运行时重置。