[英]Excel VBA Conditional Formatting Blank Cells in Row
Right off the bat, I am a total novice at coding, and the extent of my skill is modifying based on Google searches. 马上,我是编码的新手,我的技能范围是根据Google搜索进行修改。
I am using Excel 2010, and trying to use VBA to avoid using conditional formatting. 我正在使用Excel 2010,并尝试使用VBA以避免使用条件格式。 The spreadsheet I'm using is a template with 31 columns, 20 of which are mandatory. 我使用的电子表格是一个包含31列的模板,其中20列是必填项。 There is coding in place that if there is an entry in one of these columns for any given row, the other 19 cells must be populated before the file can be saved. 有适当的编码,如果在任一给定行的这些列之一中都有一个条目,则必须先填充其他19个单元格,然后才能保存文件。
I'm trying to do a similar function to highlight the blank cells preventing the file from being saved. 我正在尝试执行类似的功能以突出显示空白单元格,从而防止文件被保存。 I know that I could use the conditional formatting, but that would require it to look at one cell in each row, as opposed to any of the required cells in that row. 我知道我可以使用条件格式,但这将要求它查看每一行中的一个单元格,而不是该行中的任何必需单元格。 I also know that it could do multiple conditional formats, but I know the more layers there are, the slower the spreadsheet will function. 我也知道它可以执行多种条件格式,但是我知道层越多,电子表格的运行速度就越慢。
Is this possible? 这可能吗? The columns I have that are mandatory are AD, FK, MN, SY & AE. 我必须填写的列是AD,FK,MN,SY和AE。 In case it would be a factor, I have attached the code I'm using to mandate entry once any of those columns are populated: 万一这是一个因素,一旦这些列中的任何一个被填充,我都会附上我用来强制输入的代码:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim ws As Worksheet
Dim rg As Range, c As Range
Dim bCanSave As Boolean
Dim sWarning As String
Set ws = Sheets("Main")
Set rg = ws.Range("A2:A10000,B2:B10000,C2:C10000,D2:D10000,F2:F10000,G2:G10000,H2:H10000,J2:J10000,K2:K10000,N2:N10000,S2:S10000,T2:T10000,U2:U10000,V2:V10000,W2:W10000,X2:X10000,Y2:Y10000,AE2:AE10000")
sWarning = "File not saved!" & vbNewLine & "Mandatory cells missing in rows: " & vbNewLine
With ws
bCanSave = True
For Each c In rg
If Not IsEmpty(c) Then
If .Cells(c.Row, "A") = "" Or .Cells(c.Row, "B") = "" Or .Cells(c.Row, "C") = "" Or .Cells(c.Row, "D") = "" Or .Cells(c.Row, "F") = "" Or .Cells(c.Row, "G") = "" Or .Cells(c.Row, "H") = "" Or .Cells(c.Row, "I") = "" Or .Cells(c.Row, "J") = "" Or .Cells(c.Row, "K") = "" Or .Cells(c.Row, "N") = "" Or .Cells(c.Row, "S") = "" Or .Cells(c.Row, "T") = "" Or .Cells(c.Row, "U") = "" Or .Cells(c.Row, "V") = "" Or .Cells(c.Row, "W") = "" Or .Cells(c.Row, "X") = "" Or .Cells(c.Row, "Y") = "" Or .Cells(c.Row, "AE") = "" Then
bCanSave = False
sWarning = sWarning & c.Row & ","
End If
End If
Next c
End With
If Not bCanSave Then
MsgBox sWarning, vbExclamation
Cancel = True
End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Const CHECK_RNG As String = "A1:D1,F1:K1,M1:M1,S1:Y1,AE1"
Dim ws As Worksheet
Dim rg As Range
Dim bCanSave As Boolean, sep As String
Dim sWarning As String, sMissing As String, r As Long, ct As Long
Set ws = Sheets("Main")
sWarning = "File not saved!" & vbNewLine & "Mandatory cells missing in rows: " & vbNewLine
bCanSave = True
For r = 2 To 10000
Set rg = ws.Rows(r).Range(CHECK_RNG)
rg.Interior.ColorIndex = xlNone '<< clear any previous fill
ct = Application.CountA(rg)
If ct > 0 And ct <> rg.Cells.Count Then
rg.SpecialCells(xlCellTypeBlanks).Interior.Color = vbYellow '<< fill empty
bCanSave = False
sMissing = sMissing & sep & r
sep = ","
End If
Next r
If Not bCanSave Then
MsgBox sWarning & sMissing, vbExclamation
Cancel = True
End If
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.