我试图在vba excel中使用全局动态数组。 这个想法:我通过用户形式填写信息:
然后我点击ADD按钮。那里有#34;柱号"和"名称栏"保存在2个数组(arrBoxColumnLetters,arrBoxColumnNames)中。当我点击开始时我想使用上面数组中的信息。但阵列是空的......
我的代码:
我的全局变量:
Public i As Integer
Dim arrBoxColumnLetters() As Variant
Dim arrBoxColumnNames() As Variant
Private Sub UserForm_Initialize()
'empty textbox
TxtBoxExcelName.Value = ""
TxtBoxStartRow.Value = ""
TxtBoxTitleRowCR.Value = ""
TxtBoxTitleRowCG.Value = ""
TxtBoxTitleRowCB.Value = ""
TxtBoxHeaderRowCR.Value = ""
TxtBoxHeaderRowCG.Value = ""
TxtBoxHeaderRowCB.Value = ""
TxtBoxCLetter.Value = ""
TxtBoxCName.Value = ""
TxtBoxColumn.Value = ""
TxtBoxTab.Value = ""
'set focus on TxtBoxStartRow
TxtBoxExcelName.SetFocus
'initialize variables
i = 0
End Sub
Private Sub BtnAddC_Click()
Dim ColumnDataOri, ColumnData As String
ReDim Preserve arrBoxColumnLetters(i + 1)
ReDim Preserve arrBoxColumnNames(i + 1)
ColumnDataOri = TxtBoxColumn.Value
ColumnData = TxtBoxCLetter.Value & vbTab & vbTab & TxtBoxCName.Value
TxtBoxColumn.Value = ColumnDataOri & vbCrLf & ColumnData
arrBoxColumnLetters(i) = TxtBoxCLetter
arrBoxColumnNames(i) = TxtBoxCName
TxtBoxCLetter.Value = ""
TxtBoxCName.Value = ""
TxtBoxCLetter.SetFocus
i = i + 1
End Sub
Private Sub BtnCancel_Click()
Unload Me
End Sub
Private Sub BtnClear_Click()
Call UserForm_Initialize
End Sub
Private Sub BtnSart_Click()
Dim sh As Worksheet
Dim wbori As Workbook
Dim strRGBTitleRow, strRGBHeaderRow, strFilenameOrigineel, strBoxColumnInfo As String
Dim arrBoxColumnInfo(), arrBoxColumnLetters(), arrBoxColumnNames() As String
Debug.Print "i=" & i
ReDim Preserve arrBoxColumnLetters(i + 1)
ReDim Preserve arrBoxColumnNames(i + 1)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
TxtBoxSave.Value = ""
strRGBTitleRow = TxtBoxTitleRowCR.Value & TxtBoxTitleRowCG.Value & TxtBoxTitleRowCB.Value
strRGBHeaderRow = TxtBoxHeaderRowCR.Value & TxtBoxHeaderRowCG.Value & TxtBoxHeaderRowCB.Value
strFilenameOrigineel = TxtBoxExcelName.Value
Debug.Print arrBoxColumnLetters(0)
Debug.Print arrBoxColumnNames(0)
答案 0 :(得分:2)
全局变量在VBA中很少是个好主意。但是,为了确保您的变量有效,请在单独的模块中声明这些变量,而不是在表单上。像这样:
Public i As Integer
Public arrBoxColumnLetters() As Variant
Public arrBoxColumnNames() As Variant
此外 - 在代码顶部写下Option Explicit
。它会告诉您,变量arrBoxColumnLetters
被声明两次,因此这有点问题。