2016-09-26 78 views
1

下面的代码工作正常,如果我将进程拆分成3个独立的子文件夹,但我有问题将其组合到一个进程中。Excel VBA - 在一个工作表中调用多个子设备

理想情况下,我希望代码运行并临时解锁'Sheet',执行'Worksheet_Calculate'子,然后再次锁定'Sheet'。

有人请协助。


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

将以下内容添加到要自动更新/监视更改的工作表。 私人小组Worksheet_SelectionChange(BYVAL目标作为范围) 如果没有相交(目标,范围(“G6:G9”))是没有那么 呼叫结合 结束如果 结束小组 –

+0

完美的作品,感谢你的帮助。 –

相关问题