簡體   English   中英

VBA Excel組合框

[英]VBA Excel Combo Boxes

我有一個Excel VBA用戶窗體,我無法工作。 第一個組合框需要鏈接到相關表(年份)。 然后,第二個組合框或列表框將在所選工作表的第一列(月份)中獲取數據,然后輸入數據並顯示在相關行的相關工作表中。 我的編碼是基本的,我的引用是錯誤的,你能幫忙嗎?

這是有效的,它將它放在正確的工作表中,但不在右邊的行(組合框2)中:

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

如何將其用作用戶表單的代碼:

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來更新組合框。 就像點擊按鈕或添加新工作表一樣。

您可能也對List屬性感興趣,因為您也可以使用它設置Items - 就像在這個excel-help示例中一樣:

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或至少是simmilar。

編輯:

您粘貼的代碼將始終使用活動工作簿和活動工作表,因此此Range("C2").Value = dayElec不會更改列表/組合框的selceted工作表的值。

您需要將其修改為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM