世界!嗯,这是我第一次来这里,所以如果我做错了什么,不要生气。
我需要根据另一个Combobox值填充一个ComboBox RowSource。Userform with combobox
在我的项目中,有两个ComboBox是相关的:实验室和测试
它们分别使用所有实验室(TodosLaboratorios)和所有测试(TodasAmostragens)以定义名称创建的行源进行初始化。
我有464个实验室测试和5个实验室。并不是所有的实验室都能做所有类型的测试。
例如:
TEST | LABORATORIE
álcool benzilio | ALAC
n-Butano (vide álcoo n-butílico) | ALAC, ENVIRON
Clorobenzeno | ALAC, ENVIRON, SOLUTECH我有已定义名称的列表,其中包含由特定实验室完成的所有测试,因此,如果我在第一个ComboBox中选择一个实验室,则另一个ComboBox RowSource将填充特定实验室测试列表。
Private Sub labb1_Change()
If labb1.Value = "" Then labb1.RowSource = "todoslaboratorios"
If labb1.Value = "ALAC" Then lab1.RowSource = "labALAC"
If labb1.Value = "ENVIRON" Then lab1.RowSource = "labENVIRON"
If labb1.Value = "FIRJAN" Then lab1.RowSource = "labFIRJAN"
If labb1.Value = "SOLUTECH" Then lab1.RowSource = "labSOLUTECH"
If labb1.Value = "UNIANALISYS" Then lab1.RowSource = "labUNIANALISYS"
End Sub我正试图做相反的事情,当我选择一个特定的测试时,我希望实验室的ComboBox只填充可以进行该测试的实验室。
我有一个表,所有的实验室,测试和他们的价格。我以这样的方式组织测试/实验室:tests and labs
我不知道如何使用动态引用来定义名称动态范围……我试过这样的东西:
=index($t3$, match($t$1, todasamostragens, 0),
offset($t$3,match($t$1, todasamostragens, 0),0,0,5)我的方式正确吗?有人能帮我实现我的目标吗?
尊敬这里的程序员。
发布于 2020-07-15 04:46:45
我设法用一种不同的方法解决了我的问题。
我将测试放在一行中,并将实验室放在特定测试的每一列中。

然后,我使用.find搜索该范围并创建一个已定义的名称。
对于测试ComboBox:
Private Sub Amostragens()
Dim teste As Variant
Dim linharange As range
Dim colunarange As range
'Dim Lrow As Long
Dim range As range
Dim rangeD As range
Set range = Worksheets("lab").range("t3:ro3")
If lab1.Value = "" Then
labb1.RowSource = "todoslaboratorios"
Exit Sub
End If
If lab1.Value <> "" Then
With range
If .Find(what:=lab1.Value) <> "" Then
Set linharange = range.Find(what:=lab1.Value).Offset(2, 0)
' Lrow = Cells.Find(what:="*", _
' AFTER:=range(linharange.Address()), _
' searchorder:=xlPrevious, _
' searchdirection:=xlNext, _
' MatchCase:=False).Row
Set colunarange = range.Find(what:=lab1.Value).Offset(6, 0)
Set rangeD = .range(linharange.Offset(-2, -19), colunarange.Offset(-2, -19))
rangeD.Name = "AmostragensLab"
End If
End With
labb1.RowSource = "AmostragensLab"
End If
End Sub对于实验ComboBox:
Private Sub Laboratorios()
If lab1.Value = "" Then
If labb1.Value = "" Then labb1.RowSource = "todoslaboratorios"
If labb1.Value = "ALAC" Then lab1.RowSource = "labALAC"
If labb1.Value = "ENVIRON" Then lab1.RowSource = "labENVIRON"
If labb1.Value = "FIRJAN" Then lab1.RowSource = "labFIRJAN"
If labb1.Value = "SOLUTECH" Then lab1.RowSource = "labSOLUTECH"
If labb1.Value = "UNIANALISYS" Then lab1.RowSource = "labUNIANALISYS"
Exit Sub
End If
If lab1.Value <> "" Then
Exit Sub
End If
End Sub更改时:
Private Sub labb1_Change()
Laboratorios
valorlab
End Sub
Private Sub lab1_change()
Amostragens
valorlab
End Sub我正在学习VBA,对于改进这段代码的建议我将不胜感激。
https://stackoverflow.com/questions/62884196
复制相似问题