【问题标题】:Generating Combobox and Editing Textbox on Userform using VBA使用 VBA 在用户窗体上生成组合框和编辑文本框
【发布时间】:2020-11-13 21:48:49
【问题描述】:

基本上,我有一个我想要制作的对话框

如果您可以在上面看到,我想将组合框应用于 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

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: excel vba combobox textbox userform


    【解决方案1】:

    按照下面的截图控件名称设置尝试以下代码。

    '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
    

    【讨论】:

    • 嗨@Harun24HR,非常感谢您的帮助。对此,我真的非常感激。问题是我的数据截图只是数据库的一小部分。工作表本身有 7504 行。我已经尝试在 VBA 代码上将其更改为 TRANSPORTATION 并在组合框中输入它,但 CIF 不起作用,下拉列表仍然为空。您能否建议对给定代码进行任何更改?
    • 我已经把它放在上面的帖子上,注意到你是代码的发起者。我只是根据我的数据更改并添加带有多个项目的 Me.Combobx1.AddItem。然后,我也更改了范围,因为标题从 A2 开始。非常感谢。
    • @RendiJulian 我测试了你的代码,对我来说效果很好。你能通过谷歌驱动器或保管箱分享一个示例工作簿,以便我检查。
    • 你应该避免ActiveSheet。除此之外,它非常坚固。 OP 对命名范围的使用非常巧妙。通过使用命名范围,您可以在任何位置引用数据(例如,Sheets.Range("BDIIndustryGroup").CurrentRegion`。无论如何,我很高兴我查看了您的代码,因为它让我意识到我我的原始草稿有误。
    • @Harun24HR 这是我修改并上传到谷歌驱动器drive.google.com/file/d/1rIDuijBr6dqgsYBjEBs94ja9eTuI2Jiw/… 的示例工作簿,希望它会有用。提前致谢。
    猜你喜欢
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2017-12-23
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    相关资源
    最近更新 更多