Вызов одинаковых таблиц на разных страницах - PullRequest
0 голосов
/ 03 апреля 2019

Я записал макрос и для сортировки таблицы на одной странице ему присваивается имя страницы, я хотел бы установить его в качестве переменной, чтобы он делал то же самое на любой активной странице, на которой он находится.

У меня есть именованная ячейка, которая отражает имя страницы, и я пытался вставить его, но получал ошибки.

Просто пытаюсь заменить ("TRADE") переменной, представляющей активную страницу

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

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Ответ, который Скин дал вам, вероятно, лучший путь, но вот альтернативный: замените жестко закодированное имя на переменную, например так ...

Dim wks As Worksheet
Set wks = ActiveSheet

Вы бы тогданеобходимо заменить каждое мгновение имени листа на wks.Name.Ваш код будет выглядеть примерно так:

Dim wks As Worksheet
Set wks = ActiveSheet

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

End Sub
1 голос
/ 03 апреля 2019

Это не проверено, но замените это ...

ActiveWorkbook.Worksheets("TRADE")

... с этим ...

ActiveSheet

(Когда я говорю «непроверенный», я имею в виду, что ActiveSheet должен существовать в контексте, независимо от того, работает ли он целостно во всем коде, который вы изменяете, это другая история, это всего лишь предостережение для моего ответа.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...