would anyone help me to resolve my problem related to the Procedure Too Large error in VBA?
I'm using Private Sub Worksheet_Calculate()
to hide and unhide rows automatically and there are 275 cells that I would like to set for the triggers. The example below are just shown for 10 triggers cell, and I'd like to create 275 triggers cells
`Private Sub Worksheet_Calculate()
Set iCell = Range("G38")
Set iCell2 = Range("G70")
Set iCell3 = Range("G102")
Set iCell4 = Range("G134")
Set iCell5 = Range("G166")
Set iCell6 = Range("G198")
Set iCell7 = Range("G230")
Set iCell8 = Range("G262")
Set iCell9 = Range("G294")
Set iCell10 = Range("G326")
Application.EnableEvents = False
byFALSE1Hidden = Rows("38:68").Hidden
byTRUE1Hidden = Rows("10000:10000").Hidden
' New logic for trigger 2
byFALSE2Hidden = Rows("70:100").Hidden
byTRUE2Hidden = Rows("10001:10001").Hidden
' New logic for trigger 3
byFALSE3Hidden = Rows("102:132").Hidden
byTRUE3Hidden = Rows("10002:10002").Hidden
' New logic for trigger 4
byFALSE4Hidden = Rows("134:164").Hidden
byTRUE4Hidden = Rows("10003:10003").Hidden
' New logic for trigger 5
byFALSE5Hidden = Rows("166:196").Hidden
byTRUE5Hidden = Rows("10004:10004").Hidden
' New logic for trigger 6
byFALSE6Hidden = Rows("198:228").Hidden
byTRUE6Hidden = Rows("10005:10005").Hidden
' New logic for trigger 7
byFALSE7Hidden = Rows("230:260").Hidden
byTRUE7Hidden = Rows("10006:10006").Hidden
' New logic for trigger 8
byFALSE8Hidden = Rows("262:292").Hidden
byTRUE8Hidden = Rows("10007:10007").Hidden
' New logic for trigger 9
byFALSE9Hidden = Rows("294:324").Hidden
byTRUE9Hidden = Rows("10008:10008").Hidden
' New logic for trigger 10
byFALSE10Hidden = Rows("326:356").Hidden
byTRUE10Hidden = Rows("10009:10009").Hidden
If iCell.value = "FALSE1" Then
If Not byFALSE1Hidden Then
Rows("38:68").Hidden = True
Rows("10000:10000").Hidden = False
End If
ElseIf iCell.value = "TRUE1" Then
If Not byTRUE1Hidden Then
Rows("38:68").Hidden = False
Rows("10000:10000").Hidden = True
End If
End If
' New logic for trigger 2
If iCell2.value = "FALSE2" Then
If Not byFALSE2Hidden Then
Rows("70:100").Hidden = True
Rows("10001:10001").Hidden = False
End If
ElseIf iCell2.value = "TRUE2" Then
If Not byTRUE2Hidden Then
Rows("70:100").Hidden = False
Rows("10001:10001").Hidden = True
End If
End If
' New logic for trigger 3
If iCell3.value = "FALSE3" Then
If Not byFALSE3Hidden Then
Rows("102:132").Hidden = True
Rows("10002:10002").Hidden = False
End If
ElseIf iCell3.value = "TRUE3" Then
If Not byTRUE3Hidden Then
Rows("102:132").Hidden = False
Rows("10002:10002").Hidden = True
End If
End If
' New logic for trigger 4
If iCell4.value = "FALSE4" Then
If Not byFALSE4Hidden Then
Rows("134:164").Hidden = True
Rows("10003:10003").Hidden = False
End If
ElseIf iCell4.value = "TRUE4" Then
If Not byTRUE4Hidden Then
Rows("134:164").Hidden = False
Rows("10003:10003").Hidden = True
End If
End If
' New logic for trigger 5
If iCell5.value = "FALSE5" Then
If Not byFALSE5Hidden Then
Rows("166:196").Hidden = True
Rows("10004:10004").Hidden = False
End If
ElseIf iCell5.value = "TRUE5" Then
If Not byTRUE5Hidden Then
Rows("166:196").Hidden = False
Rows("10004:10004").Hidden = True
End If
End If
' New logic for trigger 6
If iCell6.value = "FALSE6" Then
If Not byFALSE6Hidden Then
Rows("198:228").Hidden = True
Rows("10005:10005").Hidden = False
End If
ElseIf iCell6.value = "TRUE6" Then
If Not byTRUE6Hidden Then
Rows("198:228").Hidden = False
Rows("10005:10005").Hidden = True
End If
End If
' New logic for trigger 7
If iCell7.value = "FALSE7" Then
If Not byFALSE7Hidden Then
Rows("230:260").Hidden = True
Rows("10006:10006").Hidden = False
End If
ElseIf iCell7.value = "TRUE7" Then
If Not byTRUE7Hidden Then
Rows("230:260").Hidden = False
Rows("10006:10006").Hidden = True
End If
End If
' New logic for trigger 8
If iCell8.value = "FALSE8" Then
If Not byFALSE8Hidden Then
Rows("262:292").Hidden = True
Rows("10007:10007").Hidden = False
End If
ElseIf iCell8.value = "TRUE8" Then
If Not byTRUE8Hidden Then
Rows("262:292").Hidden = False
Rows("10007:10007").Hidden = True
End If
End If
' New logic for trigger 9
If iCell9.value = "FALSE9" Then
If Not byFALSE9Hidden Then
Rows("294:324").Hidden = True
Rows("10008:10008").Hidden = False
End If
ElseIf iCell9.value = "TRUE9" Then
If Not byTRUE9Hidden Then
Rows("294:324").Hidden = False
Rows("10008:10008").Hidden = True
End If
End If
' New logic for trigger 10
If iCell10.value = "FALSE10" Then
If Not byFALSE10Hidden Then
Rows("326:356").Hidden = True
Rows("10009:10009").Hidden = False
End If
ElseIf iCell10.value = "TRUE10" Then
If Not byTRUE10Hidden Then
Rows("326:356").Hidden = False
Rows("10009:10009").Hidden = True
End If
End If
Application.EnableEvents = True
End Sub
Thank you.
You can shorten the sub using the cycle:
Option Explicit
Option Base 1
Private Sub Worksheet_Calculate()
Dim aTrue, aFalse, i&, k&, n&
aTrue = Array("TRUE1", "TRUE2", "TRUE3", "TRUE4", "TRUE5", "TRUE6", "TRUE7", "TRUE8", "TRUE9", "TRUE10")
aFalse = Array("FALSE1", "FALSE2", "FALSE3", "FALSE4", "FALSE5", "FALSE6", "FALSE7", "FALSE8", "FALSE9", "FALSE10")
Application.EnableEvents = False
For i = 1 To UBound(aTrue)
k = 6 + 32 * i: n = 9999 + i
If Cells(k, "G").Value = aFalse(i) And Not Rows(k).Hidden Then
Rows(k & ":" & (30 + k)).Hidden = True
Rows(n).Hidden = False
End If
With Rows(n)
If Cells(k, "G").Value = aTrue(i) And Not .Hidden Then
Rows(k & ":" & (30 + k)).Hidden = False
.Hidden = True
End If
End With
Next
Application.EnableEvents = True
End Sub
For "some different number of gaps in the triggers" use:
Dim aNumbers, j&
j = UBound(aTrue)
ReDim aNumbers(j)
' Generate the regular sequence
For i = 1 To j
aNumbers(i) = 6 + 32 * i
Next
' Substitute some numbers
aNumbers(3) = 11
aNumbers(7) = 22
...
If Cells(aNumbers(i), "G").Value = aFalse(i) Then
...