2016-09-26 21 views
1

以下のコードは、プロセスを3つの別々のサブシステムに分割しても問題ありません。Excel VBA - 1つのワークシートで複数のサブセットを呼び出す

理想的には、コードを実行して一時的に 'シート'のロックを解除し、 'Worksheet_Calculate'サブを実行してから再び 'シート'をロックします。

誰かが助けてくれますか?


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 

答えて

0

得たが、これが結合する一つの方法であることができ、他の効率の数は、全部の周りの各シートのループがラップします。

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

は、それがときに自動的にプロセスを実行しているスクリプトのいずれかの方法があるが働き、ご回答いただきありがとうございます「G6は:G9」変更を私は現在、変更がとるようにするために、手動でコマンドを実行するために持っているように場所。 –

+0

変更を自動的に更新/監視するワークシートに以下を追加します。 ます。Private Sub Worksheet_SelectionChange(ByValの対象を範囲) ない交差(対象、範囲( "G6:G9は"))場合は完璧に動作 –

+0

End Subの場合はその後 コール エンドを組み合わせたものではありません、あなたの助けをありがとうございました。 –

関連する問題