在表中插入第一行,其中包含用于数据验证和条件格式的逻辑

时间:2019-06-25 16:54:15

标签: excel vba excel-formula

我有一个表的条件公式,该表需要用户填写所需的单元格,问题是一旦该单元格突出显示,我将无法保存,因为某些VBA阻止了该单元格的保存

我有一些VBA可动态添加行,并正在检查是否有一种方法可以合并条件公式和该行的任何数据验证,从而迫使用户单击带有所有公式的“添加行”按钮和数据验证。

我尝试在包含逻辑的列中的每个单元格中包含一个示例行,但是用户从不更改第一行,这不是真实数据。

''下面的代码将一个表行添加到表中。

Sub AddTableRow()
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Range("Table2[Line Number]").Select
    Selection.ListObject.ListRows.Add AlwaysInsert:=True
        Range("E14").Select
    Application.ScreenUpdating = True
    Application.EnableEvents = True

End Sub

''下面的代码正在寻找橙色/红色的任何单元格,并阻止Excel中的Workbook_BeforeSave事件。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)


Dim rng As Range

For Each rng In Worksheets(1).UsedRange
    If rng.DisplayFormat.Interior.Color = 49407 Or rng.DisplayFormat.Interior.Color = vbRed Then
        MsgBox ("Please correct any fields in red/orange")
        Cancel = True
        Application.ScreenUpdating = True
        Exit Sub
    End If
Next rng

End Sub

enter image description here

因此,总而言之,我想使用所有条件格式设置和数据验证将行添加到表中,而无需使用VBA获得“现有”行。

1 个答案:

答案 0 :(得分:0)

我不确定我是否已完全解决问题,但是一种方法可能是修改您的BeforeSave代码以忽略任何完全为空的表行:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Dim rng As Range, rw As range, c as Range, clr as Long

    Set rng = me.listobjects("Table2").DatabodyRange
    For each rw in rng.Rows
        'any content in this row ?
        If application.counta(rw) > 0 Then
            'check for validation errors
            For Each c in rw.cells
                clr = c.DisplayFormat.Interior.Color
                If clr = 49407 Or clr = vbRed Then

                    MsgBox ("Please correct any fields in red/orange")
                    Cancel = True
                    Exit Sub

                End If
            Next c
        End If
    Next rw

End Sub

...或者让它忽略“样本”第一行中的任何内容。