2017-06-12 49 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