У меня есть макрос, который я использую время от времени. Он успешно удаляет столбцы, которые мне нужны, но не сортирует столбцы так, как я хочу. Когда я отлаживаю VBA, я вижу, что он ссылается на исходную электронную таблицу Excel, которую я использовал для создания макроса.

Когда я воспроизводю этот макрос на другом листе в том же файле, который идентичен оригиналу, ничего не происходит.

Какие изменения мне нужно внести в VBA, чтобы это работало на любом листе?

Вот VBA:

Sub HF_weekly_file()
'
' HF_weekly_file Macro
'

'
    Columns("A:A").Select
    Selection.Delete Shift:=xlToLeft
    Columns("C:N").Select
    Selection.Delete Shift:=xlToLeft
    Columns("D:H").Select
    Selection.Delete Shift:=xlToLeft
    Columns("J:Q").Select
    Selection.Delete Shift:=xlToLeft
    Columns("L:Y").Select
    Selection.Delete Shift:=xlToLeft
    Columns("M:M").Select
    Selection.Delete Shift:=xlToLeft
    Range("A2").Select
    ActiveWorkbook.Worksheets("Leads_1464523080").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Leads_1464523080").Sort.SortFields.Add Key:=Range( _
        "F2:F73"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Leads_1464523080").Sort.SortFields.Add Key:=Range( _
        "G2:G73"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Leads_1464523080").Sort.SortFields.Add Key:=Range( _
        "D2:D73"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Leads_1464523080").Sort.SortFields.Add Key:=Range( _
        "I2:I73"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Leads_1464523080").Sort
        .SetRange Range("A1:M73")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

2 ответа2

2

Вы правильно определили проблему: ваши ссылки на лист жестко запрограммированы, т. Е. Вы используете имя листа в своем коде, а не динамическую ссылку на лист. В результате, когда вы запускаете код, он воздействует на рабочий лист с именем "Leads_1464523080" вместо активного листа.

Чтобы ваш код сортировал активный лист вместо этого, вам нужно изменить каждый экземпляр

ActiveWorkbook.Worksheets("Leads_1464523080")

в

ActiveSheet

Это позволит применять команды сортировки к активному листу в Excel.

0

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

Columns("A:A").Select
Selection.Delete Shift:=xlToLeft

Примечание. Когда первый столбец удаляется, он сдвигает все остальные столбцы. Пример: если вы хотите удалить столбцы A и C, если вы удалите A, C переместится на B, поэтому вам нужно будет удалить B. Это может быть упрощено, если вы удалите столбцы справа налево, так как сдвиги не будут иметь эффекта.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .