VBA代码 – 跳过一些部分,如果其他人被执行

我已经写了这段代码,但已经消除了之间的额外填充。 根据选定的时间点,它将隐藏适当的行。

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

将其重写为循环会非常复杂,因为有很多可能的时间点,所以更多的是跳过与代码无关的问题。 几乎像goto线或什么的? 我不知道!

有没有其他方法可以使这段代码比暂时禁用DisplayPageBreaks,ScreenUpdating和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