2013-10-13 36 views
0

我創建了一個vba代碼來創建組合框,並使用我的命名範圍進行填充。現在我想讓當我從組合框中選擇一些東西時,它必須在當前單元格中設置該值,並且它應該移動到下一行,以便我可以在組合框的每個單元格中設置一個值。將Combobox按鈕移動到下一行excel VBA

我有這個下面的代碼創建組合框,但我不知道如何使它移動到下一行與.onaction

Sub AddComboBoxes() 
Dim cb As Object 
Dim aCell As Range, r As Long 


For i = 1 To 1 
    Set aCell = Sheet1.Cells(i, 5) 
    Set cb = Sheet1.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Left:=aCell.Left, Top:=aCell.Top, Width:=aCell.Width, Height:=aCell.Height) 
    cb.Placement = xlMoveAndSize 
    cb.Name = "ComboBoxN1" 
    cb.ListFillRange = "N1" 
    cb.OnAction = "N1.value" 

Next 

End Sub 

請幫助。

+0

'.OnAction'不是'OLEObjects'的屬性,而是'DropDowns' –

回答

3

就像我提到的.OnAction不是OLEObjects屬性但DropDowns

見這個例子中,這將在第5欄創建的下拉菜單5次,並指定"Sheet2!A1:A5"ListFillRange和執行CallMe當您選擇了一個選項落下。

LOGIC:

  1. 名稱的下拉菜單像"ComboBoxN" & i在一個循環中,使我們可以檢索他們在以後的行。
  2. 你的文章說應該在當前單元格中設置組合的值。我在下面的示例中使用Col A單元格。按適用情況更改。
  3. 我假設你的DropDowns從第一行開始。如果沒有,那麼你將不得不改變確定的行號的邏輯Sub CallMe()

代碼:

Sub AddComboBoxes() 
    Dim cb As Object 
    Dim aCell As Range 
    Dim i As Long 

    For i = 1 To 5 
     Set aCell = Sheet1.Cells(i, 5) 
     Set cb = Sheet1.DropDowns.Add(aCell.Left, aCell.Top, aCell.Width, aCell.Height) 
     cb.Placement = xlMoveAndSize 
     cb.Name = "ComboBoxN" & i 
     cb.ListFillRange = "Sheet2!A1:A5" 
     cb.OnAction = "CallMe" 
    Next 
End Sub 

CallMe應該是這樣的

Sub CallMe() 
    Dim rw As Long 
    Dim cb As Object 

    '~~> Extract the number from the dropdown to 
    '~~> identify which row is it in 
    rw = Val(Trim(Replace(Application.Caller, "ComboBoxN", ""))) 

    Set cb = Sheet1.DropDowns(rw) 

    '~~> We are setting the value in Col A. Chnage as applicable 
    Sheet1.Range("A" & rw).Value = cb.Value 

    '~~> Activate the next cell. 
    Sheet1.Range("A" & rw + 1).Activate 
End Sub 

截圖:

enter image description here

+0

謝謝..我會試試你的想法。 –