Hi the macro below works excellent the only thing is that it is not letting me save even if there is no data or data that matches the criteria of less 120 characters in the columns with character count criterias (L to O) Thanks Vish --X-- Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim bad As Range, n As Integer
With Worksheets("Questions")
For Each ocell In .Range("D2:D" & .Range("D50000").End(xlUp).Row)
n = 0
If ocell.Value <> "Sony" Then GoTo NG
n = 6
If ocell.Offset(0, 6).Value <> "RESPONSE_OPTIONS" And ocell.Offset(0, 6).Value <> "NUMBER OF" Then GoTo NG
n = 7
If ocell.Offset(0, 7).Value <> "SI" And ocell.Offset(0, 7).Value <> "POP" Then GoTo NG
n = 14
If ocell.Offset(0, 14).Value <> "0" And ocell.Offset(0, 14).Value <> "1" Then GoTo NG
n = 15
If ocell.Offset(0, 15).Value <> "0" And ocell.Offset(0, 15).Value <> "1" Then GoTo NG
n = 16
If ocell.Offset(0, 16).Value <> "0" And ocell.Offset(0, 16).Value <> "1" Then GoTo NG
n = 17
If ocell.Offset(0, 17).Value <> "0" And ocell.Offset(0, 17).Value <> "1" Then GoTo NG
Dim GotOne As Boolean
For i = 12 To 15 'L to O
If Len(Cells(ocell.Row, i).Value) > 120 Then 'turn it italic
Cells(ocell.Row, i).Font.Bold = True
Else
Cells(ocell.Row, i).Font.Bold = False
If GotOne Then Set bad = Union(bad, Cells(ocell.Row, i)) Else Set bad = Cells(ocell.Row, i)
GotOne = True
End If
Next
Next
End With
then, before the Exit Sub and after the End With:
If GotOne Then MsgBox "The Selected cells have more than 120 characters. Please fix."
bad.Select
Cancel = True
Exit Sub
NG:
Cancel = True ocell.Offset(0, n).Select MsgBox "You can't save until you correct the format of the selected cell", vbOKOnly
End Sub
Sorry. Try this: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim bad As Range, n As Integer
With Worksheets("Questions")
For Each ocell In .Range("D2:D" & .Range("D50000").End(xlUp).Row)
n = 0
If ocell.Value <> "Sony" Then GoTo NG
n = 6
If ocell.Offset(0, 6).Value <> "RESPONSE_OPTIONS" And ocell.Offset(0, 6).Value <> "NUMBER OF" Then GoTo NG
n = 7
If ocell.Offset(0, 7).Value <> "SI" And ocell.Offset(0, 7).Value <> "POP" Then GoTo NG
n = 14
If ocell.Offset(0, 14).Value <> "0" And ocell.Offset(0, 14).Value <> "1" Then GoTo NG
n = 15
If ocell.Offset(0, 15).Value <> "0" And ocell.Offset(0, 15).Value <> "1" Then GoTo NG
n = 16
If ocell.Offset(0, 16).Value <> "0" And ocell.Offset(0, 16).Value <> "1" Then GoTo NG
n = 17
If ocell.Offset(0, 17).Value <> "0" And ocell.Offset(0, 17).Value <> "1" Then GoTo NG
Dim GotOne As Boolean
For i = 12 To 15 'L to O
If Len(Cells(ocell.Row, i).Value) > 120 Then 'turn it italic
Cells(ocell.Row, i).Font.Bold = True
Else
Cells(ocell.Row, i).Font.Bold = False
If GotOne Then Set bad = Union(bad, Cells(ocell.Row, i)) Else Set bad = Cells(ocell.Row, i)
GotOne = True
End If
Next
Next
End With
then, before the Exit Sub and after the End With:
If GotOne Then
MsgBox "The Selected cells have more than 120 characters. Please fix."
bad.Select
Cancel = True
End If
Exit Sub
NG:
Cancel = True ocell.Offset(0, n).Select MsgBox "You can't save until you correct the format of the selected cell", vbOKOnly
End Sub
Advertisement