如何存储全局数组

时间:2019-01-08 07:10:24

标签: arrays excel vba global

在我的工作簿中,我有一个存储机器的数组。通过一个按钮,我可以向阵列添加一些计算机。

最后的数组用在其他三个按钮中,每个按钮在不同的工作表上。我现在的问题是,如何存储具有变化值的全局数组?

这是我为数组添加一些值的代码:

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

但是我知道这是完全错误的。

1 个答案:

答案 0 :(得分:0)

您不需要全局阵列。由于您使用的是Redim,而没有Preserve,因此这意味着它每次都在DataRange范围内被初始化

也可以创建数组,而不必每次都循环遍历它。您可以直接在一行中创建2D数组

Dim Machine as Variant
Machine = DataRange.Value

您可能还希望看到VBA Arrays And Worksheet Ranges

我通常避免使用全局变量。如果发生错误,它们很容易在运行时重置。