在所有工作表上应用VBA代码

时间:2018-05-28 12:15:16

标签: excel vba excel-vba

我的VBA代码按特定列对工作表进行排序,即" AT"。我喜欢的是这个VBA同时应用于工作簿的所有工作表。我原来的工作代码如下:

Dim sort As String
Dim area As String
area = "A4:FJ4100"
sort = "AT"
ActiveSheet.Range(area).Sort _
Key1:=Range(sort & "1"), Order1:=xlDescending, _
Header:=xlGuess, MatchCase:=False, _
Orientation:=xlTopToBottom
Application.ScreenUpdating = False 

我尝试添加

dim sh as Worksheet 
For each sh in ActiveWorkbook.Worksheets 
sh.activate 
"my code"
Next

但这不起作用。很高兴为您提供帮助!

2 个答案:

答案 0 :(得分:1)

如果将代码放在模块中,这是一种使代码正常工作的方法。它避免了SelectActive,因此它使其更加健壮:

Public Sub Main()

    Dim sh As Worksheet

    For Each sh In ThisWorkbook.Worksheets
        SortSomething sh
    Next sh

End Sub

Sub SortSomething(sh As Worksheet)

    Dim sort As String
    Dim area As String
    area = "A4:FJ4100"
    sort = "AT"
    sh.Range(area).sort _
    Key1:=sh.Range(sort & "1"), Order1:=xlDescending, _
        Header:=xlGuess, MatchCase:=False, _
        Orientation:=xlTopToBottom
        Application.ScreenUpdating = False

End Sub

答案 1 :(得分:0)

在“For Each”循环中,激活工作表后,您需要在循环'ws'var上应用范围。 试试这个,它对我来说很好用:

gdal.TranslateOptions(creationOptions=['STREAMABLE_OUTPUT=TRUE'])