我需要的是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
答案 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
示例性输出:
编辑:
如果单元格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