VBA Excelcombobox

我有一个Excel VBA UserForm,我无法去工作。 第一个combobox需要链接到相关的表格(年份)。 然后,第二个combobox或列表框将选取所选工作表第一列(数月)内的数据,然后input数据并显示在相关行的相关工作表中。 我的编码是基本的,我的参考是错误的,你能帮忙吗?

这工作,它把它放在正确的工作表,但不是在右边的行(combobox2):

Private Sub CommandButton1_Click() With ThisWorkbook.Worksheets(cboTest.Value) .Range("D2").Value = nightElec .Range("F2").Value = dayHeat .Range("G2").Value = nightHeat .Range("I2").Value = dayWater .Range("J2").Value = nightWater dayElec = Empty End With End Sub 

如何使用这个作为你的用户forms的代码:

 Private Sub UserForm_Initialize() Dim wks As Worksheet 'loop through all worksheets For Each wks In ThisWorkbook.Worksheets 'add their names as items to your combo-box cboTest.AddItem wks.Name Next wks End Sub 

但是,这只是许多方法之一。 在这里,我假定你还没有以任何其他forms保存你的工作表名称,比如数组,并且需要获取这些信息。

而且这只是用户表单初始化的例程 – 不是更新。

 Private Sub UserForm_Initialize() InitCbo End Sub Private Sub InitCbo() Dim wks As Worksheet With cboTest 'delete all current items of cboTest .Clear 'loop through all worksheets For Each wks In ThisWorkbook.Worksheets 'add their names as items to your combo-box .AddItem wks.Name Next wks 'select first item .ListIndex = 0 End With End Sub 

现在你可以使用InitCbo来更新combobox。 就像点击一个button或添加新的工作表时一样。

您也可能对List属性感兴趣,因为您可以使用它来设置Items – 就像在这个excel帮助示例中一样:

 Dim MyArray(6,3) Private Sub UserForm_Initialize() Dim i As Single 'The 1-st list box contains 3 data columns ListBox1.ColumnCount = 3 'The 2nd box contains 6 data columns ListBox2.ColumnCount = 6 'Load integer values into first column of MyArray For i = 0 To 5 MyArray(i, 0) = i Next i 'Load columns 2 and three of MyArray MyArray(0, 1) = "Zero" MyArray(1, 1) = "One" MyArray(2, 1) = "Two" MyArray(3, 1) = "Three" MyArray(4, 1) = "Four" MyArray(5, 1) = "Five" MyArray(0, 2) = "Zero" MyArray(1, 2) = "Un ou Une" MyArray(2, 2) = "Deux" MyArray(3, 2) = "Trois" MyArray(4, 2) = "Quatre" MyArray(5, 2) = "Cinq" 'Load data into ListBox1 and ListBox2 ListBox1.List() = MyArray ListBox2.Column() = MyArray End Sub 

我知道,这是一个ListBox的例子 – 但据我所知,它也适用于ComboBox以及至lesssimmilar。

编辑:

您粘贴的代码将始终使用活动工作簿和活动工作表,因此此Range("C2").Value = dayElec不会更改列表/combobox的选定工作表的值。

你将需要修改它到这个:

 Private Sub CommandButton1_Click() With ThisWorkbook.Worksheets(cboTest.value) .Range("D2").Value = nightElec .Range("F2").Value = dayHeat .Range("G2").Value = nightHeat .Range("I2").Value = dayWater .Range("J2").Value = nightWater dayElec = Empty End With End Sub