vba @ excel_highlight порожні клітинки

Я створюю файл Excel з стовпцями від A до H обов'язковими осередками. Цей файл Excel буде передаватися для введення. Отже, я хотів би виділити порожні клітини як нагадування.

Я написав наступний код ...

Sub Highlight_Cell()
Dim Rng As Range

For Each Rng In Range("A2:H20") 
If Rng.Value = "" Then
Rng.Interior.ColorIndex = 6 ‘yellow
Else
Rng.Interior.ColorIndex = 0 'blank
End If
Next Rng
   MsgBox "Please fill in all mandatory fields highlighted in yellow."
End Sub

Однак я хотів би встановити діапазон від A2 до останнього рядка, який містить дані в стовпці від A до H. Крім того, відобразити вікно повідомлення лише тоді, коли існує порожня клітинка. Не могли б ви повідомити, як я повинен змінити?

Мільйон Дякуємо !!!

0
якщо дані в colulmn A: H можуть бути порожніми, то як ви знаєте, які останні рядки містять дані в межах A: H? Чи є інший розділ даних за межами цього діапазону, який встановлює обмеження?
додано Автор brettdj, джерело

1 Відповіді

Це рішення VBA, яке запобігає збереженню користувача до заповнення потрібного діапазону (підтверджуючи коментар Gserg про те, що останній рядок є тим, що має принаймні одну введену осередок)

У другій частині можна додати індекс вашого листа безпосередньо, Set ws = Sheets (x) для позиції x або Set ws = Sheets ("YourSheet") для конкретне ім'я листа

Код буде висвітлювати лише порожні клітинки в межах від A до H цього аркуша до останнього введення клітинки (використовуючи SpecialCells як ярлик). Будь-які такі комірки будуть обрані кодом на виході

  1. Put this code in the ThisWorkbook module (so it fires whenever the user tries to close the file)

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    bCheck = False
    Call CheckCode
    If bCheck Then Cancel = True
    End Sub
    
  2. Put this code in a standard module

    Public bCheck As Boolean
    Sub CheckCode()
    Dim ws As Worksheet
    Dim rng1 As Range
    Dim rng2 As Range
    bCheck = False
    'works on sheet 1, change as needed
    Set ws = Sheets(1)
    Set rng1 = ws.Columns("A:H").Find("*", ws.[a1], xlValues, xlWhole, xlByRows)
    If rng1 Is Nothing Then
        MsgBox "No Cells in columns A:H on " & ws.Name & " file will now close", vbCritical
        Exit Sub  
    End If
    Set rng2 = ws.Range(ws.[a1], ws.Cells(rng1.Row, "H"))
    On Error Resume Next
    Set rng2 = rng2.SpecialCells(xlBlanks)
    On Error GoTo 0
    If rng2 Is Nothing Then Exit Sub
    bCheck = True
    rng2.Interior.Color = vbYellow
    MsgBox "Please fill in all mandatory fields on " & ws.Name & " highlighted in yellow", vbCritical, "Save Cancelled!"
    Application.Goto rng2.Cells(1)
    End Sub
    
0
додано