VBA Public Array: как?
Итак, сегодняшняя проблема сводит меня с ума, потому что это должно быть легко, и я не могу найти ответ :
как объявить открытый массив в VBA ? Я использую массив с буквами A, B, C,... потому что я работаю с ячейками Excel, и я не хочу объявлять его в каждой функции, которую я создаю, верно ? Я попытался сначала посмотреть в интернете, и я прочитал, что вы должны объявить его в другом модуле, так что это то, что я сделал :
Public colHeader As String
colHeader = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
но Visual Basic не нравится...
Так что мне делать ?
Спасибо большое :)
Edit: проблема больше в asigning значениях массива, чем в его объявлении
6 ответов
объявить массив как глобальный для всех суб в приложении:
Public GlobalArray(10) as String
GlobalArray = Array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L')
Sub DisplayArray()
Dim i As Integer
For i = 0 to UBound(GlobalArray, 1)
MsgBox GlobalArray(i)
Next i
End Sub
Метод 2: передайте массив в sub. Использовать И Paramarray.
Sub DisplayArray(Name As String, ParamArray Arr() As Variant)
Dim i As Integer
For i = 0 To UBound(Arr())
MsgBox Name & ": " & Arr(i)
Next i
End Sub
ParamArray должен быть последним параметром.
вы используете неправильный тип. The возвращает Variant
, а не String
.
таким образом, в разделе Объявления вашего модуля (он не должен быть другим модулем!), вы определяете
Public colHeader As Variant
и где-то в начале кода программы (например, в Workbook_Open
event) вы инициализируете его с помощью
colHeader = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
другое (простой) альтернативой было бы создать функцию, которая возвращает массив, например, что-то как
Public Function GetHeaders() As Variant
GetHeaders = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
End Function
это имеет то преимущество, что вам не нужно инициализировать глобальную переменную и недостаток, что массив создается снова при каждом вызове функции.
попробуйте это:
Dim colHeader(12)
colHeader = ("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
к сожалению, код, найденный в интернете, был VB.NET не VBA.
это сработало для меня, кажется, работает как глобальный:
Dim savePos(2 To 8) As Integer
и can вызовите его из каждого sub, например, получение первого элемента:
MsgBox (savePos(2))
Option Explicit
Public myarray (1 To 10)
Public Count As Integer
myarray(1) = "A"
myarray(2) = "B"
myarray(3) = "C"
myarray(4) = "D"
myarray(5) = "E"
myarray(6) = "F"
myarray(7) = "G"
myarray(8) = "H"
myarray(9) = "I"
myarray(10) = "J"
Private Function unwrapArray()
For Count = 1 to UBound(myarray)
MsgBox "Letters of the Alphabet : " & myarray(Count)
Next
End Function
ну, в основном, я нашел, что вы можете объявить массив, но когда вы устанавливаете его, vba показывает вам ошибку.
поэтому я поставил специальный sub для объявления глобальных переменных и массивов, что-то вроде:
Global example(10) As Variant
Sub set_values()
example(1) = 1
example(2) = 1
example(3) = 1
example(4) = 1
example(5) = 1
example(6) = 1
example(7) = 1
example(8) = 1
example(9) = 1
example(10) = 1
End Sub
и всякий раз, когда я хочу использовать массив, я сначала вызываю sub, на всякий случай
call set_values
Msgbox example(5)
возможно, это не самый правильный способ, но я надеюсь, что это работает для вас