首页 > 解决方案 > 基于单元格值的字段

问题描述

我需要的是 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

标签: excelvba

解决方案


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

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

示例输出:

在此处输入图像描述

编辑:

如果单元格 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

推荐阅读