Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA Excel组合框_Excel_Vba - Fatal编程技术网

VBA Excel组合框

VBA Excel组合框,excel,vba,Excel,Vba,我有一个Excel VBA用户表单,无法使用。第一个组合框需要链接到相关表格(年份)。然后,第二个组合框或列表框拾取所选工作表(月份)第一列中的数据,然后输入数据并显示在相关行的相关工作表上。 我的编码是基本的,我的引用是错误的,你能帮我吗 这是可行的,它将其放在正确的工作表中,但不在正确的行中(组合框2): 使用此代码作为用户表单的代码如何: Private Sub UserForm_Initialize() Dim wks As Worksheet 'loop through al

我有一个Excel VBA用户表单,无法使用。第一个组合框需要链接到相关表格(年份)。然后,第二个组合框或列表框拾取所选工作表(月份)第一列中的数据,然后输入数据并显示在相关行的相关工作表上。 我的编码是基本的,我的引用是错误的,你能帮我吗

这是可行的,它将其放在正确的工作表中,但不在正确的行中(组合框2):


使用此代码作为用户表单的代码如何:

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
然而,这只是众多方法中的一种。在这里,我假设您没有以任何其他形式保存工作表名称(如数组),需要更新这些信息

此外,这只是用户表单初始化的例程,而不是更新

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
更新组合框。如单击按钮或添加新工作表时

您可能还对
列表
属性感兴趣,因为您也可以使用它设置项目-如此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
我知道,这是一个列表框的例子——但据我所知,它也适用于ComboBox,或者至少适用于Similar

编辑:

粘贴的代码将始终使用活动工作簿和活动工作表,因此此
范围(“C2”)。Value=dayElec
不会更改列表/组合框中所选工作表的值

您需要将其修改为:

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

哇!谢谢你。我会尽力让你知道会发生什么,这太棒了。非常感谢你。我也将尝试你的列表示例。好的,就快到了。一切都很完美;我有我的工作表,我的所有数据都输入到正确的单元格中,除了数据进入打开的工作表,而不是下拉组合框选择的工作表。那么,您没有正确引用它。在这里或在另一个问题中发布让你感到麻烦的代码。你好,Jook,我已经尝试了所有方法,但我就是无法让它工作。如果我解释整件事而不是一点一点。。。我的用户表单上的第一个组合框链接到相关的表单(年份)。然后,第二个组合框或列表框拾取第一列(月份)内的数据,然后输入数据并显示在相关行的相关工作表上。我正陷入困境,如果你能帮助我,我将不胜感激。谢谢。我猜,您想用combobox2中的选项选择正确的行。但我需要看看combobox2中有哪些信息,以及它们是如何到达那里的,以便进一步帮助您。这是一样的,就像工作表一样,excel不是魔术师,当你不在代码中传递这些信息时,excel怎么能使用它?!是的,没错。组合框2中的信息是从10月到9月的月份,按顺序排列,是每张工作表上的第一列,每张工作表上的信息相同。这些信息是作为模板的基础输入的,每年都要复制。莎拉,很抱歉,但实际上,你需要提高你的沟通技巧。我不愿意猜测你想要什么,你拥有什么。除非您提供一个可靠且可理解的“这是我的代码,这是我的问题”-编辑,否则我无法进一步帮助您。好的,我会澄清一下
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