您可以将宏代码放在运行它的工作表的工作表模块中。这样做可以让您访问Me
对象,在这种情况下将引用工作表。因此,您不需要对工作表名称进行硬编码,虽然您可以从其他地方调用 sub,但它会在进行任何更改之前退出。
例如:如果您的宏在 sheet1 上运行,您可以将其放在 sheet1 模块中。
Sub riordino()
If Not Me.Name = Application.ActiveSheet.Name Then Exit Sub
Me.Range("A1:L22").Sort _
Key1:=Me.Range("C2"), _
Order1:=xlAscending, _
Key2:=Me.Range("D2"), _
Order2:=xlAscending, _
Key3:=Me.Range("A2"), _
Order3:=xlAscending, _
Header:=xlGuess, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlSortRows
Me.Range("A2").Select
ThisWorkbook.Save
End Sub
更新
当您使用宏记录器创建宏时,它将创建一个模块,称为“模块 1”(或 2 或 3 等)。如果您打开 VBA 编辑器,并查看项目资源管理器,将会有一个名为“Sheet 1”的项目(或在您的情况下为“当前”)。双击该项目并将代码粘贴到编辑器窗口中。
更新 2
当您发布代码时,请编辑您的问题并将其包含在其中,这样更容易阅读,每个人都可以阅读它而无需通过评论。
您需要将生成的代码修改为与我的相似。差异很小,因此如果您有任何其他类似的宏,则调整其余部分应该相当简单。(代码的格式无关紧要,只是为了可读性)
Sub Ordinare()
If Not Me.Name = Application.ActiveSheet.Name Then Exit Sub
Me.Range("A2:L201").Sort _
Key1:=Me.Range("C2"), _
Order1:=xlAscending, _
Key2:=Me.Range("D2"), _
Order2:=xlAscending, _
Key3:=Me.Range("A2"), _
Order3:=xlAscending, _
Header:= xlGuess, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, _
DataOption2:=xlSortNormal, _
DataOption3:= xlSortNormal
Me.Range("A2").Select
ThisWorkbook.Save
End Sub
将其粘贴到“Sheet N(Current)”模块后,就不再需要“Module11”。(保留它会导致问题)键盘快捷键也将不再起作用,您必须使用主 Excel 窗口中宏对话框中的“编辑”按钮重新配置它。