【问题标题】:Populate comboboxes from a sheet and fill out userform accordingly?从工作表中填充组合框并相应地填写用户表单?
【发布时间】:2021-01-21 17:35:20
【问题描述】:

这是我为这张表格制作的第一个可用的用户表单:Add_Form

我正在尝试制作第二个用户表单来编辑使用第一个用户表单创建的记录。除了“企业名称”文本框 (Textbox1) 被 Combobox5 替换外,外观几乎相同。

Combobox4,员工组合框是从工作簿中名为“员工”的第二张工作表中填充的。我认为这可能是我的问题的根源。

Add_Form 的组合框代码是:

Private Sub UserForm_Activate()

    With Me.ComboBox1
        .Clear
        .AddItem ""
        .AddItem "Weekly"
        .AddItem "Biweekly"
        .AddItem "Monthly"
        .AddItem "As Needed"
        
    End With
    
    
    With Me.ComboBox2
        .Clear
        .AddItem ""
        .AddItem "Check"
        .AddItem "Debit/Credit Card"
        .AddItem "Direct Deposit"
        .AddItem "Other"
        
    End With
    
    
    
    With Me.ComboBox3
        .Clear
        .AddItem ""
        .AddItem "Weekly"
        .AddItem "Biweekly"
        .AddItem "Monthly"
        .AddItem "As Needed"
        
    End With
    
    
    
    
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Employees")
    
    Dim i As Integer
    
    Me.ComboBox4.Clear
    Me.ComboBox4.AddItem ""
    
    For i = 2 To sh.Range("A" & Application.Rows.Count).End(xlUp).Row
        Me.ComboBox4.AddItem sh.Range("A" & i).Value
    Next i
    
    

End Sub

我希望这个 Edit_Form 发生的事情是 Combobox5 从第一​​张表的 A 列“客户”中填充,然后根据所选业务理想地填写表格的其余部分。我试过了

    
  


    
    Me.ComboBox5.Clear
    Me.ComboBox5.AddItem ""
    
    For i = 2 To sh.Range("A" & Application.Rows.Count).End(xlUp).Row
        Me.ComboBox5.AddItem sh.Range("A" & i).Value
    Next i

Dim rng1 As Range
Dim rng2 As Range

Set rng1 = Sheets("Employees").Range("A")
Set rng2 = Sheets("Customers").Range("A")


Dim i as Integer 
    
    Me.ComboBox4.Clear
    Me.ComboBox4.AddItem ""
    
    For i = 2 To sh.rng1("A" & Application.Rows.Count).End(xlUp).Row
        Me.ComboBox4.AddItem sh.rng1("A" & i).Value

    
    Me.ComboBox5.Clear
    Me.ComboBox5.AddItem ""
    
    For i = 2 To sh.rng2("A" & Application.Rows.Count).End(xlUp).Row
        Me.ComboBox5.AddItem sh.rng2("A" & i).Value
    Next i

但我什至无法填充 Combobox5。有什么想法吗?

【问题讨论】:

  • Application 没有 Rows 属性。将所有 Application.Rows.Count 更改为 sh.Rows.Count(或您当时使用的任何工作表变量)

标签: excel vba combobox


【解决方案1】:

您的第二次尝试在第一个 for 循环中缺少 Next i。但在那之前的尝试似乎对我有用。当添加到UserForm_Initialize 时,以下两个子例程都按预期填充了组合框。

我从零开始的尝试:

Public Sub PopulateComboBox()

    Me.cbBusinessName.AddItem "<select>"
    
    Set WS = ActiveWorkbook.Worksheets("Companies")
    Set namesRng = Intersect(WS.Columns(1), WS.UsedRange)
    
    For Each companyName In namesRng
        Me.cbBusinessName.AddItem companyName.Value
    Next companyName

End Sub

根据您的第一次尝试:

Public Sub PopulateComboBox()

    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Companies")

    Me.cbBusinessName.Clear
    Me.cbBusinessName.AddItem ""
    
    For i = 2 To sh.Range("A" & Application.Rows.Count).End(xlUp).Row
        Me.cbBusinessName.AddItem sh.Range("A" & i).Value
    Next i
    
End Sub

附:将控件添加到表单后立即使用描述性名称重命名控件是一种非常好的做法。这有助于您跟踪代码。

附言我们看不到您为编辑表单定义sh 的位置。这可能是寻找您的问题的另一个地方。也许你没有指向你想要的工作表。

【讨论】:

    【解决方案2】:

    @BoilermakerRV 感谢您的帮助。我最终不得不从头开始重建,但听取了您的建议并重命名了所有控件以保持井井有条。

    有兴趣的可以看下代码:

         Dim sh As Worksheet
       Set sh = ThisWorkbook.Sheets("Employees")
       
       Dim i As Integer
       
       Me.EmpCombo.Clear
       Me.EmpCombo.AddItem ""
       
       For i = 2 To sh.Range("A" & Application.Rows.Count).End(xlUp).Row
           Me.EmpCombo.AddItem sh.Range("A" & i).Value
       Next i
    
       
      
       Set sh = ThisWorkbook.Sheets("Customers")
       
       
       Me.BusCombo.Clear
       Me.BusCombo.AddItem ""
       
       For i = 2 To sh.Range("A" & Application.Rows.Count).End(xlUp).Row
           Me.BusCombo.AddItem sh.Range("A" & i).Value
       Next I
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-01
      • 2013-12-19
      • 2014-02-15
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      相关资源
      最近更新 更多