2017-06-12 48 views
0

我使用此行的代码:EXCEL VBA - 声明范围当片材名称为可变

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 
+0

问题是你正在设置你引用一个叫做_sName.Name [[#All],[Position]] _的**命名范围**。你想要与表格分列什么?你能否提供一张“美国”表格和数据的快照,并提供代码试图实现的描述。 –

+0

将表格名称添加到数组中并通过 – user1

回答

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”的引用可能会有风险,并且您肯定会遇到运行时错误。 '选择'陈述会产生相同的风险。我知道你很可能通过宏记录器学习(正如我们所做的那样),但在你实际发布该项目之前,请确保你学会了如何避免选择和激活。

+0

循环Ayyyy我知道这是与字符串有关的东西,但我不知道如何将它拉下来,谢谢! – sale108