我对 VBA 很陌生。我是一家橱柜制造厂,创建了一个工作跟踪电子表格,其中包含用户表单和工作数据表,其中包含与这些工作有关的各种信息。我的大部分灵感和代码都是来自观看 YouTube 视频和阅读论坛。我说到点上了
我创建了一个用户表单,我的同事用它来通过搜索工作或输入新工作来跟踪我们橱柜制造店的工作。 我有一个构建者的下拉列表,然后是构建者拥有的主管的下拉列表,以及这些主管的电话号码。问题是,我的 VBA 代码中有生成器、主管和电话号码,因为我不知道如何让 VBA 引用另一个工作表中的表。
我尝试将建筑商姓名、主管和电话号码放入表中并让 VBA 读取它,但我不知道如何告诉 VBA 去查看此表并返回结果。
这是我目前的方式。它工作正常,但如果我们得到一个新的构建器而不编辑 VBA 代码,我的同事应该能够更新表格......
'Set up Builder Dropdown list
'These are the Builders we use
Private Sub UserForm_Initialize()
ComboBox2.List = Array("BIDI Builders", "Shelford Building", "LKS Building Services", "Unita Builders")
End Sub
'These are the Builders' supervisors
Private Sub ComboBox2_Change()
ComboBox3.Clear
cmbboxselect = ComboBox2.Value
Select Case cmbboxselect
Case "BIDI Builders"
ComboBox3.List = Array("Marco", "Craig")
Case "Shelford Building"
ComboBox3.List = Array("Trevor", "Danny")
Case "LKS Building Services"
ComboBox3.List = Array("Paul", "Aaron")
Case "Unita Builders"
ComboBox3.List = Array("Luke", "Josh")
End Select
End Sub
'These are the Builders' supervisors Phone Numbers
Private Sub ComboBox3_Change()
ComboBox4.Clear
cmbboxselect = ComboBox3.Value
Select Case cmbboxselect
Case "Marco"
ComboBox4.AddItem "0413 111 111"
Case "Craigo"
ComboBox4.AddItem "0413 222 222"
Case "Trevor"
ComboBox4.AddItem "0413 333 333"
Case "Danny"
ComboBox4.AddItem "0413 444 444"
Case "Paul"
ComboBox4.AddItem "0413 555 555"
Case "Aaron"
ComboBox4.AddItem "0413 666 666"
Case "Marco"
ComboBox4.AddItem "0413 777 777"
Case "Luke"
ComboBox4.AddItem "0413 888 888"
Case "Josh"
ComboBox4.AddItem "0413 999 999"
End Select
End Sub
您的第一步是使用电子表格中的数据填充下拉列表。
将建造者、主管和电话号码以表格格式放置在工作表上。假设该表位于名为“Data”的工作表上,并具有“Builder”、“Supervisor”和“Phone”等列。 您可以通过以下方式将这些值读取到您的表单中:
Private Sub UserForm_Initialize()
Dim ws As Worksheet
Dim builderTable As ListObject
Dim builderCell As ListRow
Dim builderName As String
Dim supervisorName As String
Dim phoneNumber As String
' Set the worksheet and table
Set ws = ThisWorkbook.Worksheets("Data")
Set builderTable = ws.ListObjects("BuilderTable") ' Replace "BuilderTable" with your actual table name
' Clear previous items just in case
Me.cboBuilder.Clear
Me.cboSupervisor.Clear
Me.cboPhoneNumber.Clear
' Populate the Builder names
For Each builderCell In builderTable.ListRows
builderName = builderCell.Range(1, 1).Value ' Assuming the first column is Builder names
If Not IsEmpty(builderName) Then
Me.cboBuilder.AddItem builderName
End If
Next builderCell
' continue like that with other list boxes '
End Sub