基于单元格值的字段

时间:2019-07-19 14:08:11

标签: excel vba

我需要的是VBA中自动过滤器的变量字段

因此,我目前正在建立一个包含多个业务和所需培训的数据。我正在尝试创建一个基于特定单元格的宏,以找出要排序的列,然后在排序后复制范围。我最初打算为每个业务创建一个按钮,但这将包含60多个按钮,因为有60行。下面是一个单一业务的代码,我需要的是基于单元格范围B85的自动过滤器字段

Sub SMBstj()
'
' SMBstj Macro
'

'
Application.ScreenUpdating = False
Sheets("Training Data").Select
ActiveSheet.Range("$A$2:$CF$116").AutoFilter Field:=8, Criteria1:="<>"
Range("A3:G3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Report").Select
Range("C85").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,   SkipBlanks _
    :=False, Transpose:=False
Sheets("Training Data").Select
Range("I2").Select
ActiveSheet.Range("$A$2:$CF$116").AutoFilter Field:=8
Sheets("Report").Select
Application.ScreenUpdating = True

End Sub

1 个答案:

答案 0 :(得分:0)

要在第二行中查找字段值,您需要使用以下代码:

Dim strField As String

With Sheets("Training Data")
    strField = Application.Match(.Range("B85").Value, .Range("2:2"), 0)
    .Range("$A$2:$CF$116").AutoFilter Field:=strField, Criteria1:="<>"
End With

示例性输出:

enter image description here

编辑:

如果单元格B85在另一张工作表中,则需要按以下方式更新代码:

Match(Sheets("Other Sheet").Range("B85").Value ...

要测试:

Dim varField            As Variant

With Sheets("Training Data")
    varField = Application.Match(Sheets("Other Sheet").Range("B85").Value, .Range("2:2"), 0)
    If IsNumeric(varField) Then
        Call .Range("$A$2:$CF$116").AutoFilter(Field:=varField, Criteria1:="<>")
    Else
        Call MsgBox(Prompt:=Sheets("Other Sheet").Range("B85").Value & " not found!", Buttons:=vbExclamation + vbOKOnly, Title:="Error")
    End If
End With