更改录制的宏以影响当前工作表

更改录制的宏以影响当前工作表

我有一个时不时使用的宏。它成功删除了我想要的列,但它没有按我想要的方式对列进行排序。当我调试 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

答案1

您已正确识别问题:您对工作表的引用是硬编码的,即您在代码中使用工作表的名称,而不是对工作表的动态引用。因此,当您运行代码时,它会影响名为“Leads_1464523080”的工作表,而不是活动工作表。

要使代码对活动工作表进行排序,您需要更改每个实例

ActiveWorkbook.Worksheets("Leads_1464523080")

ActiveSheet

这将使排序命令应用于 Excel 中的活动工作表。

答案2

以下代码用于选择一列,然后将其删除。它与在宏开头找到的代码相同。要编辑此代码,请将列字母更改为所需的列。

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

注意:删除第一列时,其他所有列都会移动。例如:如果您要删除 A 列和 C 列,如果删除 A 列,C 列会移动到 B 列,因此您需要删除 B 列。如果您从右向左删除列,则可以简化此过程,因为移动不会产生影响。

相关内容