2017-06-12 29 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]]") 

変数に基づいて、私はちょうどそれを行う方法について正しい解決策を見つけることができません。 **私はいくつかのオプションを試してみましたが、即興で動作しませんでした。

ありがとうございます。ところで、完全なコードです

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 [[#すべて]、[位置]] _と呼ばれる**名前付き範囲**を参照しているという設定です。あなたはそのシートで何をソートしようとしていますか?シート「US」のスナップショットとデータを提供し、コードが達成しようとしていることの説明を提供できますか? –

+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'への参照は危険で、実行時エラーが発生する可能性があります。 「選択」ステートメントは同じリスクを発生させます。マクロレコーダーを使って学習する可能性は高いと思いますが、実際にそのプロジェクトをリリースする前にSelect and Activateを避ける方法を学んでください。

+0

Ayyyy文字列のあることはわかっていましたが、どうしたらいいかわかりませんでした。 – sale108

関連する問題