Я просто хочу создать новую переменную (или массив) во время выполнения.
Считается, что это невозможно .Но это.Это нигде не задокументировано (по крайней мере, я нигде не читал).
Логика :
Мы просто запрограммируем VBA Editor во время выполнения для создания нового массива.Вы можете прочитать больше о программировании редактора VBA на сайте Чипа Программирование Редактор VBA
Примечание
- Убедитесь, что вы установили ссылкуна
Microsoft Visual Basic For Applications Extensibility 5.3
- Я не занимаюсь обработкой ошибок.Не стесняйтесь включать это в ваш код.
В приведенном ниже коде мы создадим массив MyArray
и измерим его, скажем, размером 5
Код
Option Explicit
Const vbext_ct_StdModule As Integer = 1
Sub Sample()
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Dim LineNum As Long
Set VBProj = ThisWorkbook.VBProject
Set VBComp = VBProj.VBComponents.Add(vbext_ct_StdModule)
'~~> Create new module called MySpecialModule
'~~> It it exists then you will get an error
'~~> Either delete it and create new one or use error handling
VBComp.Name = "MySpecialModule"
Set CodeMod = VBComp.CodeModule
With CodeMod
LineNum = .CountOfLines + 1
.InsertLines LineNum, "Public MyArray() As String"
LineNum = LineNum + 1
.InsertLines LineNum, "Public Sub InitArray()"
LineNum = LineNum + 1
.InsertLines LineNum, " Redim MyArray (1 to 5)"
LineNum = LineNum + 1
.InsertLines LineNum, "End Sub"
End With
'~~> Initialize newly created Array
initializeArray
End Sub
'~~> Run the procedure to initialize the newly created array
Sub initializeArray()
InitArray
Debug.Print UBound(MyArray)
End Sub
Когда вы запускаете код, создается новый модуль, и в этот модуль вводится некоторый код.Затем этот код снова вызывается во время выполнения.Код ниже не существует, когда вы запускаете код.
Public MyArray() As String
Public Sub InitArray()
ReDim MyArray(1 To 5)
End Sub