使用 VBA 在用户窗体上生成组合框和编辑文本框
Generating Combobox and Editing Textbox on Userform using VBA
基本上,我有一个我想制作的对话框
如果你能看到上面的内容,我想让组合框应用于 BDI Industry Group 和 CIF 的搜索。
然后,每当我点击“按行业组搜索”组合框并选择一个时,CIF 字段就会给你另一个下拉列表供你选择,然后,其他字段的其余部分将根据下面的数据自动填写
上面的截图只是我数据库的一小部分。一共7504行,表头从A2开始。
假设我选择交通
然后我希望对话框显示 CIF 13039099 和 12901262 的下拉列表供我选择。
接下来比如我选的是CIF 13039099,剩下的其他字段会直接根据数据库自动显示信息,即:
- 客户姓名:Adit Jaya Mandiri 的简历
- RM 姓名:Irawan Noor
- 片段:商业
我想要客户名称、客户名称和细分市场是可编辑.
之后当我点击保存时,它会根据最新的变化自动更新。这可以执行吗?下面是我制作的VBA代码
Private Sub ComboBox1_Change()
Me.ComboBox2 = ""
Select Case Me.ComboBox1
Case "BDIIndustryGroup"
Me.ComboBox2.RowSource = "BDIIndustryGroup"
Case "CIF"
Me.ComboBox2.RowSource = "CIF"
Case "Client Name"
Me.ComboBox2.RowSource = "CLientName"
Case "RM Name"
Me.ComboBox2.RowSource = "RM Name"
Case "Segment"
Me.ComboBox2.RowSource = "Segment"
End Select
End Sub
Private Sub UserForm_Initialize()
Dim lastrow As Long
Dim lastcolumn As Long
lastcolumn = ActiveSheet.Cells(2, Columns.Count).End(xlToLeft).Column
With Worksheets("sheet2")
For I = 1 To lastcolumn
With .Columns(I)
lastrow = Sheet2.Cells(Rows.Count, I).End(xlUp).Row
With Range(Cells(1, I), Cells(lastrow, I))
Range(Cells(1, I), Cells(lastrow, I)).Select
Selection.CreateNames Top:=True
End With
End With
Next I
End With
Me.ComboBox1.RowSource = "BDIIndustryGroup"
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
我试过这段代码,但它没有像我想要的那样工作。
我还从@Harun24HR 那里得到了第二个替代代码,但是无法根据 BDI 行业组生成 CIF 下拉列表。
'Codes to form
Option Explicit
Private matchRow As Long
Private Sub Combobox1_Change()
Dim rng As Range, cel As Range
Dim lstrow As Long
Dim strBDI As String
strBDI = Me.ComboBox1
lstrow = Cells(ActiveSheet.Rows.Count, "E").End(xlUp).Row 'Change column E with BDI Industry Group column in case of you.
Set rng = ActiveSheet.Range("E3:E" & lstrow)
Me.ComboBox2.Clear
For Each cel In rng
If cel = strBDI Then
Me.ComboBox2.AddItem cel.Offset(0, -4) '-4 need to adjust with CIF column left from BDI column
End If
Next
End Sub
Private Sub Combobox2_Change()
Dim rng As Range, cel As Range
Dim lstrow As Long
Dim strBDI As String
Dim strCIF As String
strBDI = Me.ComboBox1
strCIF = Me.ComboBox2
lstrow = Cells(ActiveSheet.Rows.Count, "E").End(xlUp).Row 'Change column E with BDI Group Industry column in case of you.
Set rng = ActiveSheet.Range("E3:E" & lstrow)
For Each cel In rng
If cel = strBDI And cel.Offset(0, -4) = strCIF Then
matchRow = cel.Row
Exit For
End If
Next
Me.TextBox1 = ActiveSheet.Cells(matchRow, 2)
Me.TextBox2 = ActiveSheet.Cells(matchRow, 3)
Me.TextBox3 = ActiveSheet.Cells(matchRow, 4)
End Sub
Private Sub cmdSave_Click()
ActiveSheet.Cells(matchRow, 2) = Me.TextBox1
ActiveSheet.Cells(matchRow, 3) = Me.TextBox2
ActiveSheet.Cells(matchRow, 4) = Me.TextBox3
MsgBox "Data Saved Succesfully!", vbInformation, "Save"
End Sub
Private Sub UserForm_Initialize()
'Add items manually or use sub to add unique items from BDI Industry Group column
Me.ComboBox1.AddItem "AUTOMOTIVE ATPM & DEALER"
Me.ComboBox1.AddItem "AUTOMOTIVE COMPONENT"
Me.ComboBox1.AddItem "CABLE"
Me.ComboBox1.AddItem "CEMENT"
Me.ComboBox1.AddItem "CHEMICAL"
Me.ComboBox1.AddItem "chemical & PLASTICS"
Me.ComboBox1.AddItem "COAL INDUSTRY"
Me.ComboBox1.AddItem "COMPUTER & RELATED"
Me.ComboBox1.AddItem "CONSTRUCTION"
Me.ComboBox1.AddItem "COSMETICS & TOILETRIES"
Me.ComboBox1.AddItem "CPO INDUSTRY"
Me.ComboBox1.AddItem "ELECTRICITY & POWER PLANT"
Me.ComboBox1.AddItem "ENGINE MACHINERIES & TOOLS"
Me.ComboBox1.AddItem "FARMING & ANIMAL FEED"
Me.ComboBox1.AddItem "FINANCIAL SERVICES"
Me.ComboBox1.AddItem "FISHERIES"
Me.ComboBox1.AddItem "FOOD & BEVERAGE"
Me.ComboBox1.AddItem "FORESTRY & WOOD PRODUCT"
Me.ComboBox1.AddItem "FURNITURE"
Me.ComboBox1.AddItem "GARMENT"
Me.ComboBox1.AddItem "HOME APPLIANCES"
Me.ComboBox1.AddItem "HOSPITAL & HEALTHCARE"
Me.ComboBox1.AddItem "HOTEL & ACCOMMODATION SERVICE"
Me.ComboBox1.AddItem "INFRASTRUCTURE"
Me.ComboBox1.AddItem "MEDICAL EQUIPMENT"
Me.ComboBox1.AddItem "METAL NON STEEL"
Me.ComboBox1.AddItem "MINING & QUARRING"
Me.ComboBox1.AddItem "OIL & GAS - DOWNSTREAM"
Me.ComboBox1.AddItem "OIL & GAS - UPSTREAM"
Me.ComboBox1.AddItem "OTHERS"
Me.ComboBox1.AddItem "PACKAGING & CORRUGATED"
Me.ComboBox1.AddItem "PETROCHEMICAL & PLASTICS"
Me.ComboBox1.AddItem "PHARMACEUTICAL"
Me.ComboBox1.AddItem "PRINTING"
Me.ComboBox1.AddItem "PROPERTIES & REAL ESTATE"
Me.ComboBox1.AddItem "PULP & PAPER"
Me.ComboBox1.AddItem "RENTAL SERVICES"
Me.ComboBox1.AddItem "RETAILER"
Me.ComboBox1.AddItem "RUBBER INDUSTRY"
Me.ComboBox1.AddItem "SERVICE INDUSTRY"
Me.ComboBox1.AddItem "SHIPPING"
Me.ComboBox1.AddItem "STEEL"
Me.ComboBox1.AddItem "SUGAR INDUSTRY"
Me.ComboBox1.AddItem "TELECOMMUNICATION"
Me.ComboBox1.AddItem "TEXTILE"
Me.ComboBox1.AddItem "TOBACCO & CIGARETTE"
Me.ComboBox1.AddItem "TRANSPORTATION"
Me.ComboBox1.AddItem "WHOLESALES TRADING"
End Sub
如有任何帮助,我们将不胜感激。
谢谢。
按照下面的截图控件名称设置尝试下面的代码。
'Codes to form.
Option Explicit
Private matchRow As Long
Private Sub ComboBox1_Change()
Dim rng As Range, cel As Range
Dim lstRow As Long
Dim strBDI As String
strBDI = Me.ComboBox1
lstRow = Cells(ActiveSheet.Rows.Count, "E").End(xlUp).Row 'Change column E with BDI column in case of you.
Set rng = ActiveSheet.Range("E2:E" & lstRow)
Me.ComboBox2.Clear
For Each cel In rng
If cel = strBDI Then
Me.ComboBox2.AddItem cel.Offset(0, -4) '-4 need to adjust with CIF column left from BDI column
End If
Next
End Sub
Private Sub ComboBox2_Change()
Dim rng As Range, cel As Range
Dim lstRow As Long
Dim strBDI As String
Dim strCIF As String
strBDI = Me.ComboBox1
strCIF = Me.ComboBox2
lstRow = Cells(ActiveSheet.Rows.Count, "E").End(xlUp).Row 'Change column E with BDI column in case of you.
Set rng = ActiveSheet.Range("E2:E" & lstRow)
For Each cel In rng
If cel = strBDI And cel.Offset(0, -4) = strCIF Then
matchRow = cel.Row
Exit For
End If
Next
Me.TextBox1 = ActiveSheet.Cells(matchRow, 2)
Me.TextBox2 = ActiveSheet.Cells(matchRow, 3)
Me.TextBox3 = ActiveSheet.Cells(matchRow, 4)
End Sub
Private Sub cmdSave_Click()
ActiveSheet.Cells(matchRow, 2) = Me.TextBox1
ActiveSheet.Cells(matchRow, 3) = Me.TextBox2
ActiveSheet.Cells(matchRow, 4) = Me.TextBox3
MsgBox "Data Saved Successfully!", vbInformation, "Save"
End Sub
Private Sub UserForm_Initialize()
'Add items manually or use sub to add unique items from BDI column.
Me.ComboBox1.AddItem "Transport"
Me.ComboBox1.AddItem "Food"
End Sub
基本上,我有一个我想制作的对话框
如果你能看到上面的内容,我想让组合框应用于 BDI Industry Group 和 CIF 的搜索。
然后,每当我点击“按行业组搜索”组合框并选择一个时,CIF 字段就会给你另一个下拉列表供你选择,然后,其他字段的其余部分将根据下面的数据自动填写
上面的截图只是我数据库的一小部分。一共7504行,表头从A2开始。
假设我选择交通
然后我希望对话框显示 CIF 13039099 和 12901262 的下拉列表供我选择。
接下来比如我选的是CIF 13039099,剩下的其他字段会直接根据数据库自动显示信息,即:
- 客户姓名:Adit Jaya Mandiri 的简历
- RM 姓名:Irawan Noor
- 片段:商业
我想要客户名称、客户名称和细分市场是可编辑.
之后当我点击保存时,它会根据最新的变化自动更新。这可以执行吗?下面是我制作的VBA代码
Private Sub ComboBox1_Change()
Me.ComboBox2 = ""
Select Case Me.ComboBox1
Case "BDIIndustryGroup"
Me.ComboBox2.RowSource = "BDIIndustryGroup"
Case "CIF"
Me.ComboBox2.RowSource = "CIF"
Case "Client Name"
Me.ComboBox2.RowSource = "CLientName"
Case "RM Name"
Me.ComboBox2.RowSource = "RM Name"
Case "Segment"
Me.ComboBox2.RowSource = "Segment"
End Select
End Sub
Private Sub UserForm_Initialize()
Dim lastrow As Long
Dim lastcolumn As Long
lastcolumn = ActiveSheet.Cells(2, Columns.Count).End(xlToLeft).Column
With Worksheets("sheet2")
For I = 1 To lastcolumn
With .Columns(I)
lastrow = Sheet2.Cells(Rows.Count, I).End(xlUp).Row
With Range(Cells(1, I), Cells(lastrow, I))
Range(Cells(1, I), Cells(lastrow, I)).Select
Selection.CreateNames Top:=True
End With
End With
Next I
End With
Me.ComboBox1.RowSource = "BDIIndustryGroup"
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
我试过这段代码,但它没有像我想要的那样工作。
我还从@Harun24HR 那里得到了第二个替代代码,但是无法根据 BDI 行业组生成 CIF 下拉列表。
'Codes to form
Option Explicit
Private matchRow As Long
Private Sub Combobox1_Change()
Dim rng As Range, cel As Range
Dim lstrow As Long
Dim strBDI As String
strBDI = Me.ComboBox1
lstrow = Cells(ActiveSheet.Rows.Count, "E").End(xlUp).Row 'Change column E with BDI Industry Group column in case of you.
Set rng = ActiveSheet.Range("E3:E" & lstrow)
Me.ComboBox2.Clear
For Each cel In rng
If cel = strBDI Then
Me.ComboBox2.AddItem cel.Offset(0, -4) '-4 need to adjust with CIF column left from BDI column
End If
Next
End Sub
Private Sub Combobox2_Change()
Dim rng As Range, cel As Range
Dim lstrow As Long
Dim strBDI As String
Dim strCIF As String
strBDI = Me.ComboBox1
strCIF = Me.ComboBox2
lstrow = Cells(ActiveSheet.Rows.Count, "E").End(xlUp).Row 'Change column E with BDI Group Industry column in case of you.
Set rng = ActiveSheet.Range("E3:E" & lstrow)
For Each cel In rng
If cel = strBDI And cel.Offset(0, -4) = strCIF Then
matchRow = cel.Row
Exit For
End If
Next
Me.TextBox1 = ActiveSheet.Cells(matchRow, 2)
Me.TextBox2 = ActiveSheet.Cells(matchRow, 3)
Me.TextBox3 = ActiveSheet.Cells(matchRow, 4)
End Sub
Private Sub cmdSave_Click()
ActiveSheet.Cells(matchRow, 2) = Me.TextBox1
ActiveSheet.Cells(matchRow, 3) = Me.TextBox2
ActiveSheet.Cells(matchRow, 4) = Me.TextBox3
MsgBox "Data Saved Succesfully!", vbInformation, "Save"
End Sub
Private Sub UserForm_Initialize()
'Add items manually or use sub to add unique items from BDI Industry Group column
Me.ComboBox1.AddItem "AUTOMOTIVE ATPM & DEALER"
Me.ComboBox1.AddItem "AUTOMOTIVE COMPONENT"
Me.ComboBox1.AddItem "CABLE"
Me.ComboBox1.AddItem "CEMENT"
Me.ComboBox1.AddItem "CHEMICAL"
Me.ComboBox1.AddItem "chemical & PLASTICS"
Me.ComboBox1.AddItem "COAL INDUSTRY"
Me.ComboBox1.AddItem "COMPUTER & RELATED"
Me.ComboBox1.AddItem "CONSTRUCTION"
Me.ComboBox1.AddItem "COSMETICS & TOILETRIES"
Me.ComboBox1.AddItem "CPO INDUSTRY"
Me.ComboBox1.AddItem "ELECTRICITY & POWER PLANT"
Me.ComboBox1.AddItem "ENGINE MACHINERIES & TOOLS"
Me.ComboBox1.AddItem "FARMING & ANIMAL FEED"
Me.ComboBox1.AddItem "FINANCIAL SERVICES"
Me.ComboBox1.AddItem "FISHERIES"
Me.ComboBox1.AddItem "FOOD & BEVERAGE"
Me.ComboBox1.AddItem "FORESTRY & WOOD PRODUCT"
Me.ComboBox1.AddItem "FURNITURE"
Me.ComboBox1.AddItem "GARMENT"
Me.ComboBox1.AddItem "HOME APPLIANCES"
Me.ComboBox1.AddItem "HOSPITAL & HEALTHCARE"
Me.ComboBox1.AddItem "HOTEL & ACCOMMODATION SERVICE"
Me.ComboBox1.AddItem "INFRASTRUCTURE"
Me.ComboBox1.AddItem "MEDICAL EQUIPMENT"
Me.ComboBox1.AddItem "METAL NON STEEL"
Me.ComboBox1.AddItem "MINING & QUARRING"
Me.ComboBox1.AddItem "OIL & GAS - DOWNSTREAM"
Me.ComboBox1.AddItem "OIL & GAS - UPSTREAM"
Me.ComboBox1.AddItem "OTHERS"
Me.ComboBox1.AddItem "PACKAGING & CORRUGATED"
Me.ComboBox1.AddItem "PETROCHEMICAL & PLASTICS"
Me.ComboBox1.AddItem "PHARMACEUTICAL"
Me.ComboBox1.AddItem "PRINTING"
Me.ComboBox1.AddItem "PROPERTIES & REAL ESTATE"
Me.ComboBox1.AddItem "PULP & PAPER"
Me.ComboBox1.AddItem "RENTAL SERVICES"
Me.ComboBox1.AddItem "RETAILER"
Me.ComboBox1.AddItem "RUBBER INDUSTRY"
Me.ComboBox1.AddItem "SERVICE INDUSTRY"
Me.ComboBox1.AddItem "SHIPPING"
Me.ComboBox1.AddItem "STEEL"
Me.ComboBox1.AddItem "SUGAR INDUSTRY"
Me.ComboBox1.AddItem "TELECOMMUNICATION"
Me.ComboBox1.AddItem "TEXTILE"
Me.ComboBox1.AddItem "TOBACCO & CIGARETTE"
Me.ComboBox1.AddItem "TRANSPORTATION"
Me.ComboBox1.AddItem "WHOLESALES TRADING"
End Sub
如有任何帮助,我们将不胜感激。
谢谢。
按照下面的截图控件名称设置尝试下面的代码。
'Codes to form.
Option Explicit
Private matchRow As Long
Private Sub ComboBox1_Change()
Dim rng As Range, cel As Range
Dim lstRow As Long
Dim strBDI As String
strBDI = Me.ComboBox1
lstRow = Cells(ActiveSheet.Rows.Count, "E").End(xlUp).Row 'Change column E with BDI column in case of you.
Set rng = ActiveSheet.Range("E2:E" & lstRow)
Me.ComboBox2.Clear
For Each cel In rng
If cel = strBDI Then
Me.ComboBox2.AddItem cel.Offset(0, -4) '-4 need to adjust with CIF column left from BDI column
End If
Next
End Sub
Private Sub ComboBox2_Change()
Dim rng As Range, cel As Range
Dim lstRow As Long
Dim strBDI As String
Dim strCIF As String
strBDI = Me.ComboBox1
strCIF = Me.ComboBox2
lstRow = Cells(ActiveSheet.Rows.Count, "E").End(xlUp).Row 'Change column E with BDI column in case of you.
Set rng = ActiveSheet.Range("E2:E" & lstRow)
For Each cel In rng
If cel = strBDI And cel.Offset(0, -4) = strCIF Then
matchRow = cel.Row
Exit For
End If
Next
Me.TextBox1 = ActiveSheet.Cells(matchRow, 2)
Me.TextBox2 = ActiveSheet.Cells(matchRow, 3)
Me.TextBox3 = ActiveSheet.Cells(matchRow, 4)
End Sub
Private Sub cmdSave_Click()
ActiveSheet.Cells(matchRow, 2) = Me.TextBox1
ActiveSheet.Cells(matchRow, 3) = Me.TextBox2
ActiveSheet.Cells(matchRow, 4) = Me.TextBox3
MsgBox "Data Saved Successfully!", vbInformation, "Save"
End Sub
Private Sub UserForm_Initialize()
'Add items manually or use sub to add unique items from BDI column.
Me.ComboBox1.AddItem "Transport"
Me.ComboBox1.AddItem "Food"
End Sub