EXCEL VBA - 当工作表名称是变量时声明范围

时间:2017-06-12 11:34:16

标签: excel vba variables

我使用这行代码:

    ActiveWorkbook.Worksheets(sName).ListObjects(sName).Sort.SortFields.Add Key:=
    Range ("sName.Name[[#All],[Keyword]]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

现在,这一行是较长函数的一部分,它应该为更广泛的工作表列表做同样的事情。因此,我需要更改范围选择:

  Range ("sName.Name[[#All],[Keyword]]")

基于变量,我无法找到正确的解决方案。 **我尝试了一些选项,即兴的,没有工作。

提前致谢。

这是完整的代码btw:

Sub Filter()
'Application.ScreenUpdating = False
    Call Filtering("US")                  'To prepare Data for All Keywords
    MsgBox "Updated"
'Application.ScreenUpdating = True
End Sub

Function Filtering(sName As String)
'
' Filtering Macro
'

'
    Sheets(sName).Select
    ActiveWorkbook.Worksheets(sName).ListObjects(sName).Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(sName).ListObjects(sName).Sort.SortFields.Add Key:=
        Range ("sName.Name[[#All],[Keyword]]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

    With ActiveWorkbook.Worksheets(sName).ListObjects(sName).Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveWorkbook.Worksheets(sName).ListObjects(sName).Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(sName).ListObjects(sName).Sort.SortFields.Add Key:= _
        Range("sName.Name[[#All],[Position]]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal _

    With ActiveWorkbook.Worksheets(sName).ListObjects(sName).Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveSheet.ListObjects(sName).Range.AutoFilter Field:=2, Criteria1:="<=20" _
        , Operator:=xlAnd
End Function

1 个答案:

答案 0 :(得分:0)

要回答您的问题,此任务非常简单。首先,我想指出(主要是针对具有类似问题的未来编码人员)你试图调用的方法需要一个字符串参数,而你就很接近了。

' String argument, but "sName" is never interpreted. It is taken literally.
Range ("sName[[#All],[Keyword]]")

' Returns the string representation of sName and concatenates it into
' the rest of the string argument. If sName was Foo', this would read as:
' Range ("Foo[[#All],[Keyword]]")
Range (sName & "[[#All],[Keyword]]")

现在,为了对您的代码进行更大的观察,我强烈建议您找到有关改进整体代码的资源。对“ActiveWorkbook”的引用可能存在风险,您必然会遇到运行时错误。 “选择”语句会产生相同的风险。我知道您可能通过宏录制器学习(正如我们所做的那样),但请确保在实际发布该项目之前学习如何避免选择和激活。