Как хранить Global Array - PullRequest
       6

Как хранить Global Array

0 голосов
/ 08 января 2019

В моей рабочей тетради есть массив, в котором хранятся машины. С помощью кнопки я могу добавить несколько машин в массив.

Окончательный массив используется в трех других кнопках, каждая кнопка находится на отдельном рабочем листе. Теперь у меня вопрос: как сохранить глобальный массив с его изменяющимся значением?

это мой код для добавления некоторого значения в массив:

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 голосов
/ 08 января 2019

Для этого вам не нужен глобальный массив. Поскольку вы используете Redim без Preserve, это означает, что он инициализируется каждый раз из диапазона DataRange

Кроме того, для создания массива вам не нужно зацикливаться на нем каждый раз. Вы можете напрямую создать 2D массив в одну строку

Dim Machine as Variant
Machine = DataRange.Value

Возможно, вы также захотите просмотреть массивы и таблицы VBA

Я обычно избегаю использования глобальных переменных. Они очень легко сбрасываются во время выполнения, если происходит ошибка.

...