arrays - 如何存储全局数组
问题描述
在我的工作簿中,我有一个存储机器的数组。通过一个按钮,我可以将一些机器添加到阵列中。
最后一个数组用于其他三个按钮,每个按钮位于不同的工作表上。我现在的问题是,我如何存储具有变化值的全局数组?
这是我为数组添加一些值的代码:
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
但我知道这是完全错误的。
解决方案
为此,您不需要全局数组。由于您使用Redim
without Preserve
,因此这意味着它每次都从范围内初始化DataRange
同样要创建数组,您不需要每次都循环遍历它。您可以直接在一行中创建一个二维数组
Dim Machine as Variant
Machine = DataRange.Value
您可能还想查看VBA 数组和工作表范围
我通常避免使用全局变量。如果发生错误,它们在运行时很容易重置。
推荐阅读
- python - 克服 numpy 中的 MemoryError
- javascript - 在javascript中循环遍历多维数组会跳过数据?
- elasticsearch - Elasticsearch 如何使用特定的分析器和附加过滤器
- zurb-foundation - 在 {{#each}} 中使用 {{Variable}}?
- mongodb - 同一个 Kubernetes 集群中的多个 MongoDB 状态集
- xampp - 无法在 MySQL Workbench 中查看表
- javascript - 使用 JavaScript 更改内联 CSS
- c# - 如何在 AuthorizationHandler 中获取 POST 请求参数
- python-3.x - 在主词典中附加词典对象
- html - 创建一个新的空白行元素而不从其上方的行传递值