首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA动态范围Vlookup定义的名称

VBA动态范围Vlookup定义的名称
EN

Stack Overflow用户
提问于 2020-07-14 05:02:11
回答 1查看 49关注 0票数 1

世界!嗯,这是我第一次来这里,所以如果我做错了什么,不要生气。

我需要根据另一个Combobox值填充一个ComboBox RowSource。Userform with combobox

在我的项目中,有两个ComboBox是相关的:实验室和测试

它们分别使用所有实验室(TodosLaboratorios)和所有测试(TodasAmostragens)以定义名称创建的行源进行初始化。

我有464个实验室测试和5个实验室。并不是所有的实验室都能做所有类型的测试。

例如:

代码语言:javascript
复制
     TEST                               | LABORATORIE
     álcool benzilio                    | ALAC
     n-Butano (vide álcoo n-butílico)   | ALAC, ENVIRON
     Clorobenzeno                       | ALAC, ENVIRON, SOLUTECH

我有已定义名称的列表,其中包含由特定实验室完成的所有测试,因此,如果我在第一个ComboBox中选择一个实验室,则另一个ComboBox RowSource将填充特定实验室测试列表。

代码语言:javascript
复制
    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

我不知道如何使用动态引用来定义名称动态范围……我试过这样的东西:

代码语言:javascript
复制
  =index($t3$, match($t$1, todasamostragens, 0), 
         offset($t$3,match($t$1, todasamostragens, 0),0,0,5)

我的方式正确吗?有人能帮我实现我的目标吗?

尊敬这里的程序员。

EN

回答 1

Stack Overflow用户

发布于 2020-07-15 04:46:45

我设法用一种不同的方法解决了我的问题。

我将测试放在一行中,并将实验室放在特定测试的每一列中。

然后,我使用.find搜索该范围并创建一个已定义的名称。

对于测试ComboBox:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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

更改时:

代码语言:javascript
复制
        Private Sub labb1_Change()

        Laboratorios
        valorlab

        End Sub
            
        Private Sub lab1_change()
            
        Amostragens
        valorlab
            
        End Sub

我正在学习VBA,对于改进这段代码的建议我将不胜感激。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62884196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档