2つの異なるcondiditonsに基づいて範囲をソートしようとしています。 そうするために、私は完璧に動作するマクロを記録しました。Excel VBAの並べ替え方法、実行時エラー1004、 "並べ替え参照が有効ではありません... whithin ..."
コードのマクロ行の一部を 自分の変数などに置き換えようとしたとき、コードが機能せず、いくつかの異なるエラーメッセージが表示されました。
最初の私が得たのだった:「ファイル名を指定して実行時エラー438オブジェクトは、このプロパティまたはメソッドをサポートしていません」
他のエラーメッセージがGOTがソート基準となる「ファイル名を指定して実行時エラー1004でした有効ではありません。ソートするデータの範囲内にあることを確認してください。最初のソート・バイ・ボックスは同じでも空でもありません。
Sub CustomSort() ' CustomSort Macro Range("A1:H958").Select ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Add Key:=Range("A2:A958"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Add Key:=Range("H2:H958"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Run Data from Notes").Sort .SetRange Range("A1:H958") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
は、私は、コードを変更(動作しないと、「ファイル名を指定して実行時エラー438を」私を与える):ここで
Dim StatusRange As Range
Dim PartNumber As Range
Dim WholeRange As Range
Dim wbkToRun As Workbook
Dim NewData As Worksheet
Dim LastRow As Long
Set wbkToRun = ThisWorkbook
Set NewData = Worksheets("Run Data from Notes")
LastRow = NewData.Cells.Find("*", searchorder:=xlByRows, SearchDirection:=xlPrevious).Row
Set WholeRange = NewData.Range("A2:H" & LastRow)
WholeRange.Select
ActiveWorkbook.NewData.Sort.SortFields.Clear
wbkToRun.NewData.Sort.SortFields.Add Key:=WholeRange, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
wbkToRun.NewData.Sort.SortFields.Add Key:=WholeRange, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With wbkToRun.NewData.Sort
.SetRange WholeRange
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
マクロレコーダーコードを使用しているが、範囲を動的に設定された範囲 "WholeRange"に変更すると、エラーメッセージが表示される:「実行時エラー1004。ソート参照が無効です。見たいデータ最初のソート・バイ・ボックスは同じではなく、ブランクではありません。
WholeRange.Select
ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Add Key:=WholeRange, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Add Key:=WholeRange, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Run Data from Notes").Sort
.SetRange WholeRange
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
それは
「.Apply」に壊れる上記の私の2つのコードが動作しない理由を誰かが説明していただけますか? そして私のコードとマクロ記録されたコードとの間にはどのような違いがありますか?おかげさまで
「NewData」は、「ActiveWorkbook」のメンバーではありません。 'ActiveWorkbook'から呼び出す代わりに、参照*自体を使用してください。 – Comintern
ちょっと手を加えて例を挙げてください。完全に理解できなかった。ありがとう。 – Energizer1