2016-10-11 1 views
2

Ich habe dieses Stück Code geschrieben, aber habe den zusätzlichen Füllstoff dazwischen ausgemerzt. Abhängig von den ausgewählten Zeitpunkten werden die entsprechenden Zeilen ausgeblendet.VBA-Code - Überspringe einige Teile, wenn einige andere ausgeführt werden

Container 1 wird immer gefüllt. Wenn jedoch kein anderer Container ausgewählt ist, möchte ich alle verbleibenden Zeilen ausblenden, ohne den Rest des Codes zu verarbeiten. Wenn also Container 1 und 2 ausgewählt sind, wird der Code für diese ausgeführt, ohne dass der Rest des Codes ausgeführt wird.

Das Umschreiben als Schleife wäre unglaublich komplex, da es so viele mögliche Zeitpunkte gibt, dass es eher darum geht, den Code zu überspringen, der nicht relevant ist. Fast wie eine Goto-Linie oder so? Ich weiß es nicht!

Gibt es eine andere Möglichkeit, diesen Code effizienter auszuführen, als die DisplayPageBreaks, ScreenUpdating und Enable Events vorübergehend zu deaktivieren? Auf der Seite wird keine Berechnung durchgeführt, nur Zeilen werden ausgeblendet.

Zum Beispiel, wenn Q26 leer ist (Kein Container 2) Ich möchte es an das Ende des Codes gehen, ohne etwas anderes zu verarbeiten, aber wie ich es geschrieben habe, verarbeitet es immer noch den Rest des Codes.

Danke für Ihre Hilfe

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

Vielen Dank für Ihre Hilfe!

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 [email protected] 

    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 [email protected] 

    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 [email protected] 

    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 [email protected] 

    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 
+0

Sie könnten versuchen, 'GoTo' zu verwenden, aber es ist nicht sehr empfehlenswert ... Oder ordne einfach deinen Code mit mehr Logik an! Es wird keine Schleife benötigt, aber mit 'If's oder' Select's und richtigem Einrücken können Sie dies tun – R3uK

+0

Verwenden von lokalen Variablen, z. w = Arbeitsblätter ("StabDataCapture") und spätere Referenzierungen (oder mit Blöcken) können eine sehr kleine Verbesserung darstellen (so klein, dass sie nur zählt, wenn diese Funktion für jede Änderung der ausgewählten Zelle aufgerufen wird). Ich würde auch Application.Calculation = xlManual versuchen, auch wenn Sie denken, dass es nicht viele Berechnungen gibt. Ich sehe jedoch nicht, warum dein Code langsam sein sollte. Und wie R3uK auch bemerkte, ist diese Einrückung schrecklich. – z32a7ul

+0

Wenn Sie diese Funktion auch aus einer anderen aufrufen, speichern Sie den Wert von DisplayPageBreaks, EnableEvents usw. und stellen Sie das Original am Ende wieder her. Andernfalls kann der Aufrufer dieses Subs diese Optimierungen verlieren, wenn er sie auch verwendet. – z32a7ul

Antwort

1

Sie benötigen eine Routine den Bildschirm und Ereignisse zu reaktivieren,

Sub Restart_Screen() 
With Application 
    .EnableEvents = True 
    .ScreenUpdating = True 
    .StatusBar = vbNullString 
End With 
End Sub 

Exit Sub verwenden, könnte es so aussehen:

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 [email protected] 
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 [email protected] 
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 [email protected] 
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 [email protected] 
If wS.Range("P98").Value = vbNullString Then wsT.Rows("422:422").EntireRow.Hidden = True 
Restart_Screen 
End Sub 
+0

Das funktioniert fantastisch gut, aber es würde über 400 Codezeilen zum Aktualisieren geben, und selbst mit Suchen und Ersetzen würde ich einen ganzen Tag brauchen. Ich werde das definitiv in zukünftigen Implementierungen verwenden. Ich brach es in Module und diese einzelne Zeile Code (x3) ist, wie ich um das Problem arbeitete. Danke für Ihre Hilfe !! – vividillusion

+0

Wenn Arbeitsblätter ("StabDataCapture"). Bereich ("q26"). Wert <> 0 Dann Container2 Else Arbeitsblätter ("Vorlage"). Zeilen ("142: 1048576"). EntireRow.Hidden = True – vividillusion

Verwandte Themen