VBA 代码 - 跳过某些部分执行其他部分
VBA Code - Skip some parts if some others are excecuted
我已经写了这段代码,但去掉了中间的额外填充物。根据选择的时间点,它会隐藏相应的行。
容器 1 将始终被填充,但是,如果未选择另一个容器,我希望它隐藏所有剩余的行而不处理其余代码。因此,如果选择容器 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
我已经写了这段代码,但去掉了中间的额外填充物。根据选择的时间点,它会隐藏相应的行。
容器 1 将始终被填充,但是,如果未选择另一个容器,我希望它隐藏所有剩余的行而不处理其余代码。因此,如果选择容器 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