简体   繁体   English

Excel VBA条件格式化行中的空白单元格

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM