如何设置ComboBox等于UserForm的特定列?

时间:2019-05-03 15:34:48

标签: excel vba

我对VBA还是很陌生,但是我正在创建一个可以输入数据的UserForm。但是我也想在UserForm中有一个ComboBox来代表月份。每个月假设代表一列。例如,如果我在UserForm上选择January,那么它将把数据放在K列上。 我要1到12代表I到T列

Private Sub CommandButton1_Click

Dim ws As Worksheet
Dim lrCal As Long

lrCal = sheets("TestCal").Cells(7,Columns.Count).End(xlToLeft).Column + 1 

With sheets("TestCal")
     .Cells(7, lrCal).Value = tbApple.Text
     .Cells(8, lrCal).Value = tbOrange.Text
     .Cells(12,lrCal).Value = tbBread.Text
     .Cells(13,lrCal).Value = tbJam.Text 
End With

End Sub

现在,它将转到下一个可用单元格。但我希望它转到我选择的列。

Private Sub cboMonth_Change()

dim cboMonth as ComboBox
dim i as long
dim ws as worksheet

Set ws = ThisWorkbook.sheets("TestCal")


For i = 1 to 12

Next

我被困在这一部分,不知道如何设置。我将如何设置每个数字来代表每一列?

1 个答案:

答案 0 :(得分:0)

根据您填充组合框的方法,有很多种方法可以执行此操作...一个示例是填充组合框,以便您可以将列表位置与列相关联,例如:

Option Explicit

Private Sub CommandButton1_Click()
    Debug.Print Application.Match(ComboBox1.Value, ComboBox1.List, 0)
End Sub

Private Sub UserForm_Initialize()
    With Sheets(1)
        Me.ComboBox1.List = Array("Jan","Feb","Mar")
    End With
End Sub

您可以测试上述内容,并查看列表位置(数组中的位置编号)显示在立即窗口中。


因此,如果一月在第11列(K)中,则可以输出以下数据:

Private Sub CommandButton1_Click()
    '11-1 = 10, you would need to find last row in column for this:
    Sheets(1).Cells(LastRow+1,10+Application.Match(ComboBox1.Value, ComboBox1.List, 0)).value = Me.TextBox1.Value
End Sub

您也可以在不使用Match()Find()的组合框的情况下执行此操作。