VBA代码-如果超出某些部分,则跳过某些部分

VBA代码-如果超出某些部分,则跳过某些部分,vba,performance,excel,lag,Vba,Performance,Excel,Lag,我已经写了这段代码,但是去掉了中间的额外填充。根据选定的时间点,它将隐藏相应的行 容器1将始终被填充,但是,如果未选择另一个容器,我希望它隐藏所有剩余的行,而不处理其余的代码。因此,如果选择容器1和2,它将运行这些容器的代码,而不运行其余的代码 将此重写为循环将非常复杂,因为可能存在如此多的时间点,更重要的是跳过不相关的代码。几乎像是去排队什么的?我不知道 除了暂时禁用DisplayPageBreaks、ScreenUpdated和Enable Events之外,还有其他方法可以使代码运行得更高

我已经写了这段代码,但是去掉了中间的额外填充。根据选定的时间点,它将隐藏相应的行

容器1将始终被填充,但是,如果未选择另一个容器,我希望它隐藏所有剩余的行,而不处理其余的代码。因此,如果选择容器1和2,它将运行这些容器的代码,而不运行其余的代码

将此重写为循环将非常复杂,因为可能存在如此多的时间点,更重要的是跳过不相关的代码。几乎像是去排队什么的?我不知道

除了暂时禁用DisplayPageBreaks、ScreenUpdated和Enable Events之外,还有其他方法可以使代码运行得更高效吗?页面上未执行任何计算,仅隐藏行

例如,如果Q26是空的(没有容器2),我希望它转到代码的末尾,而不处理除我如何编写它以外的任何内容,它仍然处理代码的其余部分

谢谢你的帮助

If Worksheets("StabDataCapture").Range("q26").Value = "" Then Worksheets("Template").Rows("142:1048576").EntireRow.Hidden = True Else
谢谢你的帮助

Sub Containers()

Dim xPctComp As Integer

Application.StatusBar = "Container 1: " & _
  Format(xPctComp, "##0%")

ActiveSheet.DisplayPageBreaks = False
Application.EnableEvents = False
Application.ScreenUpdating = False



'CONTAINER 1 ROW HIDES

'@@@@@@@@@@@@@@@@@@@@@@@@@@@ 60°C @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

'Show/Hide 1@60

    If Worksheets("StabDataCapture").Range("B33").Value = "" Then
        Worksheets("Template").Rows("8:8").EntireRow.Hidden = True
    End If

Application.StatusBar = "Container 2: " & _
  Format(xPctComp, "##25%")

If Worksheets("StabDataCapture").Range("q26").Value = "" Then Worksheets("Template").Rows("142:1048576").EntireRow.Hidden = True Else

'CONTAINER 2 ROW HIDES

'@@@@@@@@@@@@@@@@@@@@@@@@@@@ 60°C @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

'Show/Hide 1@60

    If Worksheets("StabDataCapture").Range("P33").Value = "" Then
                Worksheets("Template").Rows("146:146").EntireRow.Hidden = True
    End If

Application.StatusBar = "Container 3: " & _
  Format(xPctComp, "##50%")

'CONTAINER 3 ROW HIDES

 If Worksheets("StabDataCapture").Range("c91").Value = "" Then Worksheets("Template").Rows("280:1048576").EntireRow.Hidden = True Else

'@@@@@@@@@@@@@@@@@@@@@@@@@@@ 60°C @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

'Show/Hide 1@60

    If Worksheets("StabDataCapture").Range("B98").Value = "" Then
        Worksheets("Template").Rows("284:284").EntireRow.Hidden = True
    End If
Application.StatusBar = "Container 4: " & _
  Format(xPctComp, "##75%")

 If Worksheets("StabDataCapture").Range("q91").Value = "" Then Worksheets("Template").Rows("418:1048576").EntireRow.Hidden = True Else


'@@@@@@@@@@@@@@@@@@@@@@@@@@@ 60°C @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

'Show/Hide 1@60

    If Worksheets("StabDataCapture").Range("P98").Value = "" Then
                Worksheets("Template").Rows("422:422").EntireRow.Hidden = True
    End If

Application.EnableEvents = True
Application.ScreenUpdating = True
Application.StatusBar = ""

End Sub

您需要一个例程来重新激活屏幕和事件

Sub Restart_Screen()
With Application
    .EnableEvents = True
    .ScreenUpdating = True
    .StatusBar = vbNullString
End With
End Sub
使用
Exit Sub
,它可能如下所示:

Sub test_vividillusion()
Dim xPctComp As Integer
Dim wS As Worksheet
Dim wsT As Worksheet
Set wS = Sheets("StabDataCapture")
Set wsT = Sheets("Template")

With Application
    .EnableEvents = False
    .ScreenUpdating = False
    .StatusBar = "Container 1: " & Format(xPctComp, "##0%")
End With
ActiveSheet.DisplayPageBreaks = False

'CONTAINER 1 ROW HIDES
'@@@@@@@@@@@@@@@@@@@@@@@@@@@ 60°C @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'Show/Hide 1@60
If wS.Range("B33").Value = vbNullString Then wsT.Rows("8:8").EntireRow.Hidden = True
Application.StatusBar = "Container 2: " & Format(xPctComp, "##25%")

If wS.Range("q26").Value = vbNullString Then
    wsT.Rows("142:1048576").EntireRow.Hidden = True
    Restart_Screen
    Exit Sub
Else
End If

'CONTAINER 2 ROW HIDES
'@@@@@@@@@@@@@@@@@@@@@@@@@@@ 60°C @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'Show/Hide 1@60
If wS.Range("P33").Value = vbNullString Then wsT.Rows("146:146").EntireRow.Hidden = True
Application.StatusBar = "Container 3: " & Format(xPctComp, "##50%")

If wS.Range("c91").Value = vbNullString Then
    wsT.Rows("280:1048576").EntireRow.Hidden = True
    Restart_Screen
    Exit Sub
Else
End If
'CONTAINER 3 ROW HIDES
'@@@@@@@@@@@@@@@@@@@@@@@@@@@ 60°C @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'Show/Hide 1@60
If wS.Range("B98").Value = vbNullString Then wsT.Rows("284:284").EntireRow.Hidden = True
Application.StatusBar = "Container 4: " & Format(xPctComp, "##75%")

If wS.Range("q91").Value = vbNullString Then
    wsT.Rows("418:1048576").EntireRow.Hidden = True
    Restart_Screen
    Exit Sub
Else
End If

'@@@@@@@@@@@@@@@@@@@@@@@@@@@ 60°C @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'Show/Hide 1@60
If wS.Range("P98").Value = vbNullString Then wsT.Rows("422:422").EntireRow.Hidden = True
Restart_Screen
End Sub

您可以尝试使用
GoTo
,但不太推荐。。。或者只是用更多的逻辑重新排列你的代码!不需要循环,但使用
如果
s或
选择
s和适当的缩进,您可以使用局部变量(例如w=工作表(“StabDataCapture”)执行此操作,并在以后引用它们(或使用块)可能会提供非常小的改进(如此之小,以至于仅当为所选单元格的每次更改调用此函数时才算)。我也会尝试Application.Calculation=xlManual,即使您认为计算不多。然而,我不明白为什么你的代码应该很慢。正如R3uK所指出的,这个缩进很糟糕。如果你也从另一个调用这个函数,那么保存DisplayPageBreaks、EnableEvents等的值,并在最后将其还原为原始值。否则,如果这个sub的调用方也使用了这些优化,那么它可能会失去这些优化。这工作得非常好,但是,要更新的代码将超过400行,即使使用find和replace,我也要花一整天的时间。我肯定会在将来的实现中使用它。我把它分成了几个模块,这一行代码(x3)就是我解决这个问题的方法。谢谢你的帮助!!如果工作表(“StabDataCapture”).Range(“q26”).Value为0,则Container2其他工作表(“模板”).Rows(“142:1048576”).EntireRow.Hidden=True