我对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
我被困在这一部分,不知道如何设置。我将如何设置每个数字来代表每一列?
答案 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()
的组合框的情况下执行此操作。