2016-09-26 3 views
1

Der folgende Code funktioniert gut, wenn ich den Prozess in 3 separate Subs aufteilen, aber ich habe Probleme bei der Kombination dieser in einem Prozess.Excel VBA - Aufruf mehrerer Subs in einem Arbeitsblatt

Idealerweise möchte ich, dass der Code ausgeführt und das 'Sheet' vorübergehend entsperrt wird, führen Sie den 'Worksheet_Calculate'-Unterbefehl aus und sperren Sie das' Sheet 'erneut.

Könnte jemand bitte helfen.


Private Sub UnprotectAll() 
Dim sh As Worksheet 
Dim yourPassword As String 
yourPassword = "Test" 

For Each sh In ActiveWorkbook.Worksheets 
    sh.Unprotect Password:=yourPassword 
Next sh 
End Sub 


Private Sub Worksheet_Calculate() 
Dim LastRow As Long, c As Range 

Application.EnableEvents = False 
LastRow = Cells(Cells.Rows.Count, "E").End(xlUp).Row 
On Error Resume Next 


Dim LastRow As Long, c As Range 
Application.EnableEvents = False 
LastRow = Cells(Cells.Rows.Count, "E").End(xlUp).Row 
On Error Resume Next 

For Each Dependents In Range("G6") 
For Each HideDependents In Range("G18:G19") 
    If Dependents.Value = 0 Then 
     HideDependents.EntireRow.Hidden = True 
    ElseIf Dependents.Value >= 1 Then 
     HideDependents.EntireRow.Hidden = False 
End If 

Next 
Next 

For Each Vehicle In Range("G7") 
For Each HideVehicle In Range("G45:G48") 
    If Vehicle.Value = 0 Then 
     HideVehicle.EntireRow.Hidden = True 
    ElseIf Vehicle.Value >= 1 Then 
     HideVehicle.EntireRow.Hidden = False 
End If 

Next 
Next 

For Each Joint In Range("G9") 
For Each HideJoint In Range("I14:J65") 
    If Joint.Value = 0 Then 
     HideJoint.EntireColumn.Hidden = True 
    ElseIf Joint.Value = 1 Then 
     HideJoint.EntireColumn.Hidden = False 
End If 
Next 
Next 
On Error GoTo 0 
Application.EnableEvents = True 
End Sub 


Private Sub ProtectAll() 
Dim sh As Worksheet 
Dim yourPassword As String 
yourPassword = "Test" 

For Each sh In ActiveWorkbook.Worksheets 
    sh.Protect Password:=yourPassword 
Next sh 

End Sub 

Antwort

0

Es gibt eine Reihe von anderen Effizienzen, die gewonnen werden können, aber dies ist eine Möglichkeit, zu kombinieren, wickelt die jedes Blatt Schleife um die ganze Sache.

Private Sub Combine() 
Dim sh As Worksheet 
Dim yourPassword As String 
yourPassword = "Test" 

For Each sh In ActiveWorkbook.Worksheets 
    sh.Unprotect Password:=yourPassword 

Dim LastRow As Long, c As Range 
Application.EnableEvents = False 
LastRow = Cells(Cells.Rows.Count, "E").End(xlUp).Row 
On Error Resume Next 

For Each Dependents In Range("G6") 
For Each HideDependents In Range("G18:G19") 
    If Dependents.Value = 0 Then 
     HideDependents.EntireRow.Hidden = True 
    ElseIf Dependents.Value >= 1 Then 
     HideDependents.EntireRow.Hidden = False 
End If 

Next 
Next 

For Each Vehicle In Range("G7") 
For Each HideVehicle In Range("G45:G48") 
    If Vehicle.Value = 0 Then 
     HideVehicle.EntireRow.Hidden = True 
    ElseIf Vehicle.Value >= 1 Then 
     HideVehicle.EntireRow.Hidden = False 
End If 

Next 
Next 

For Each Joint In Range("G9") 
For Each HideJoint In Range("I14:J65") 
    If Joint.Value = 0 Then 
     HideJoint.EntireColumn.Hidden = True 
    ElseIf Joint.Value = 1 Then 
     HideJoint.EntireColumn.Hidden = False 
End If 
Next 
Next 

On Error GoTo 0 
Application.EnableEvents = True 
    sh.Protect Password:=yourPassword 

Next sh 

End Sub 
+0

Vielen Dank für Ihre Antwort, es funktioniert jedoch ist es eine Möglichkeit, die das Skript durch den Prozess automatisch ausgeführt wird, wenn ‚G6: G9‘ Änderungen wie ich muß noch den Befehl manuell ausführen, um für die Änderungen zu Ort. –

+0

Fügen Sie dem Arbeitsblatt Folgendes hinzu, das automatisch für Änderungen aktualisiert/überwacht werden soll. Private Sub Worksheet_SelectionChange (ByVal Target As Range) If Not Intersect (Target, Range ("G6: G9")) Is Nothing Dann Anruf End If End Sub kombinieren –

+0

Funktioniert perfekt, Dank für Ihre Hilfe danken. –

Verwandte Themen