Вставьте первую строку в таблицу с логикой для проверки данных и условного форматирования - PullRequest
0 голосов
/ 25 июня 2019

У меня есть условная формула для таблицы, которая требует, чтобы пользователь заполнил требуемую ячейку, проблема в том, что когда эта ячейка выделена, я не могу ее сохранить, поскольку некоторые 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

'' Код ниже ищет любую ячейку с оранжевым / красным цветом и предотвращает событие Workbook_BeforeSave в Excel.

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 голосов
/ 25 июня 2019

Я не уверен, что полностью ясен в проблеме, но один из подходов может заключаться в том, чтобы модифицировать ваш код 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

... или просто игнорировать что-либо в первой строке «образца».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...