【问题标题】:Look up data based on multiple variables in VBA UserForm在 VBA UserForm 中根据多个变量查找数据
【发布时间】:2016-09-05 03:18:02
【问题描述】:

我在 vba 中创建了一个用户窗体,如下所示:

用户填写表格后,记录将保存在“Sheet2”中。对于每个控件 ID,应该有 3 个可能的活动。我想要做的是,在用户输入控件 ID 和活动名称后,表单将填充来自“Sheet2”的现有数据。这是我通过使用“索引”/“匹配”得出的结果,但它返回“类型不匹配”错误。

Private Sub Reg3_AfterUpdate()

With Me
.Reg2 = Application.WorksheetFunction.Index(Sheet2.Columns(3), Application.WorksheetFunction.Match(1, (Sheet2.Columns(2) = CLng(Me.Reg1)) * (Sheet2.Columns(4) = CLng(Me.Reg3)), 0))

End With

End Sub

Reg1 是位于第 2 列的控制 ID; Reg2 是位于第 3 列的全名;和 Reg3 是位于第 4 列的活动。

有人可以帮帮我吗?

【问题讨论】:

    标签: vba excel userform


    【解决方案1】:

    Thomas 有一个很好的解决方案。如果你只想使用 VBA(没有 Excel 函数),你也可以像这样设置一个搜索循环:

    With ws
        For row = fisrtRow To lastRow
            val = .Cells(row, col)
            If val = controlID And val = activity Then
                '....
            Else
                '...
            End If
        Next row
    End With
    

    【讨论】:

    • 实际上我没有考虑第二个条件。你的解决方案是正确的。 +1
    【解决方案2】:

    这样的事情可以让你走上正轨

                                '-- lets assume you want value from row 1, column 3
                                '   from "Sheet2"
    Dim wb As Workbook
    Dim ws As Worksheet
    
    Dim row As Integer, column As Integer
    
    Set wb = ActiveWorkbook
    Set ws = wb.Sheets("Sheet2")
    row = 1
    col = 3
    
    Me.Reg2.Text = ws.Cells(row, col)
    

    【讨论】:

    • 感谢您的回复。但是,您所做的假设过于僵化。我只知道每个变量所在的列,但我不知道行。这就是我使用“索引/匹配”的原因。我需要根据两个条件(控件 ID 和活动)查找值
    【解决方案3】:
    here is the best solution for you
    
    
    write the following code ih the after update event
    
    Private Sub Reg3_AfterUpdate()
    SheetS("SHEET2").Range("A1:C4").Select
     Selection.AutoFilter
        SheetS("SHEET2").Range("$A$1:$C$4").AutoFilter Field:=1, Criteria1:="=Product no",  Operator:=xlAnd
    
        SheetS("SHEET2")..Range("$A$1:$C$4").AutoFilter Field:=1, Criteria1:="=Activity",  Operator:=xlAnd
    
    'add your code to get the value from range(a2:c2) like the following
    FULLNAME.TEXT=SHEETS("sheet2").range("B2)
    End Sub
    
    
    
    'in this example I assume that the data is stored in range(A1:C4) 
    'SO AFTER YOU APPLY THE FILTER YOU WILL GET ONE UNIQUE ROW  REPRESENTING 
    'YOUR 'DATA  .THEN YOU JUST NEED TO IMPORT THE DATA FROM THE sheet2 CELLs
    
    'and so on
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      • 1970-01-01
      相关资源
      最近更新 更多