New Member
April 18, 2022
Hey guys new here 🙂
Look for some help finishing the code.
So I have 3 body(sheet) wich are called body1(2)(2) the mirror to be printed those are called tobeprintedsheet1(2)(3).
I made a sub to call all of those at once, the issue is it doesnt check if all 3 body meet the condition, it has to at least have one cell with "9" then will print, if it has less than 9 will end sub.
How it's working right now, if I press printall button, let assume body 1 and 2 meet the condition and 3 doesn't, it will still print body3, when call tobeprintedsheet1(2)(3).
Take a look to the code here:
Private Sub Print_Body1()
Dim vArray, vEntry, bPrint As Boolean
vArray = Array("D4", "F4", "H4", "J4", "D11", "F11", "H11", "J11")
For Each vEntry In vArray
If Range(vEntry) = 9 Then
bPrint = True
Exit For
End If
Next vEntry
Application.ScreenUpdating = False
With Sheets("sheettobeprinted31")
If bPrint Then
.Visible = True
.PrintOut Copies:=1, Collate:=True
Debug.Print "printed"
.Visible = xlSheetVeryHidden
Else
Debug.Print "printed"
End If
End With
Application.ScreenUpdating = True
End Sub
Private Sub Print_Body2()
Dim vArray, vEntry, bPrint As Boolean
vArray = Array("D4", "F4", "H4", "J4", "D11", "F11", "H11", "J11")
For Each vEntry In vArray
If Range(vEntry) = 9 Then
bPrint = True
Exit For
End If
Next vEntry
Application.ScreenUpdating = False
With Sheets("sheettobeprinted2")
If bPrint Then
.Visible = True
.PrintOut Copies:=1, Collate:=True
Debug.Print "printed"
.Visible = xlSheetVeryHidden
Else
Debug.Print "printed"
End If
End With
Application.ScreenUpdating = True
End Sub
Private Sub Print_Body3()
Dim vArray, vEntry, bPrint As Boolean
vArray = Array("D4", "F4", "H4", "J4", "D11", "F11", "H11", "J11")
For Each vEntry In vArray
If Range(vEntry) = 9 Then
bPrint = True
Exit For
End If
Next vEntry
Application.ScreenUpdating = False
With Sheets("sheettobeprinted3")
If bPrint Then
.Visible = True
.PrintOut Copies:=1, Collate:=True
Debug.Print "printed"
.Visible = xlSheetVeryHidden
Else
Debug.Print "printed"
End If
End With
Application.ScreenUpdating = True
End Sub
Private Sub printall()
Print_Body1
Print_Body2
Print_Body3
End Sub
Trusted Members
February 13, 2021
I think your problem is your bPrint variable and how it is currently operating. I think what you need is to do the print command inside your loop and then set bPrint back to false before moving on to the next variable in your array. As it stands now bPrint is true being changed to true and it will print everything.
My disclaimer: VBA is not my strong area in Excel so I could be misreading things, but I know that's where I'd start at least.
1 Guest(s)