Excel 基于单元格值的字段

Excel 基于单元格值的字段,excel,vba,Excel,Vba,我需要的是VBA中自动筛选的变量字段 因此,我目前正在构建一个基于数据的系统,包括他们需要的一些业务和培训。我正在尝试创建一个宏,该宏将基于特定单元格来确定要排序的列,然后在排序后复制范围。我最初打算为每项业务都做一个按钮,但这将包括60多个按钮,因为有60行。下面是单个业务的代码,我需要的是基于单元格范围B85的自动筛选字段 Sub SMBstj() ' ' SMBstj Macro ' ' Application.ScreenUpdating = False Sheets("Trainin

我需要的是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
子SMBstj()
'
'SMBstj宏
'
'
Application.ScreenUpdating=False
工作表(“培训数据”)。选择
ActiveSheet.Range(“$A$2:$CF$116”)。自动筛选字段:=8,标准1:=“”
范围(“A3:G3”)。选择
范围(选择,选择。结束(xlDown))。选择
选择,复制
工作表(“报告”)。选择
范围(“C85”)。选择
Selection.Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
工作表(“培训数据”)。选择
范围(“I2”)。选择
ActiveSheet.Range(“$A$2:$CF$116”)。自动筛选字段:=8
工作表(“报告”)。选择
Application.ScreenUpdating=True
端接头

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

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

Criteria1:=Cells(85,2)。Value
这不起作用吗?这不是仍然在查看字段8吗?我真的需要它根据单元格B85确定要查看哪个字段,所以假设我在单元格B85中有“Sol85”,我需要从字段33自动筛选,但如果是“Sol84”在单元格B85中,我需要它从字段32自动筛选。嗯,对不起,我的错误-我刚刚意识到你要求的是
,我正在尝试创建一个宏,该宏将基于特定单元格来确定要排序的列。让我编辑我的原始帖子。它给了我一个“运行时错误9”的下标超出范围。我不知道这是否是因为数据与我搜索所需的单元格位于不同的工作表中。这是正确的猜测!我现在正在更新我的答案,以包括另一张表格。
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