我现在对学习VBA有点迷茫,我不知道要针对Google的主题。
在我的Excel表格中,我有一个按钮和一个组合框。通过按下按钮,我将一些数据加载到VBA中。某些数据条目的标题作为项添加到ComboBox中。其他数据将添加到锯齿状数组s
中。
现在,通过更改ComboBox-Selection,我想访问数组s
。我该怎么办?
代码在VBA编辑器的sheet1 / workbook控件中
Public Sub CommandButton1_Click()
Dim s() As Variant
Code Execution
For i = 1 To m
s(i) = SomeArray
Next i
For j = 1 To i - 1
Sheets("Sheet1").ComboBox1.AddItem b(j)
Next j
End Sub
Public Sub ComboBox1_Change()
Sheets("Steuerung").Cells(1, 1).Value = ComboBox1.ListIndex
Sheets("Steuerung").Cells(2, 1).Value = UBound(s, ComboBox1.ListIndex + 1)
End Sub
由于变量未知,最后一行UBound(s, ...)
导致错误。
我不知道如何解决这个问题。
PS:对不起,如果我使用了错误的名称,但我的Excel不是英语的。
答案 0 :(得分:0)
您需要做两件事:在模块级别将锯齿状数组声明为Public
,并确保对其进行初始化。例如,您的模块如下所示:
Option Explicit
Public Const MAX_ARRAYS As Long = 25
Public s As Variant 'my jagged array
Public Sub InitializeTheArray()
'--- initializes the jagged array, only if necessary
If Not IsArray(s) Then
'--- perform initialization here...
' at least establish some dimensions
ReDim s(1 To MAX_ARRAYS)
End If
End Sub
Public Sub CommandButton1_Click()
InitializeTheArray
Code Execution
For i = 1 To m
s(i) = SomeArray
Next i
For j = 1 To i - 1
Sheets("Sheet1").ComboBox1.AddItem b(j)
Next j
End Sub
Public Sub ComboBox1_Change()
InitializeTheArray
Sheets("Steuerung").Cells(1, 1).Value = ComboBox1.ListIndex
Sheets("Steuerung").Cells(2, 1).Value = UBound(s, ComboBox1.ListIndex + 1)
End Sub
在每个例程中调用InitializeTheArray
可以确保始终在某种程度上初始化公共数组。