如何指示哪个单元格在Excel中为空?

我有这个macros

Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim S1 As String, S2 As String Dim S3 As String, S4 As String, sMsg As String Dim lRow As Long, i As Long Dim ws As Worksheet Dim rng As Range Set ws = ThisWorkbook.Sheets("Sheet1") S1 = "Football": S2 = "Basket": S3 = "Sport1": S4 = "Sport2" With ws lRow = .Range("A" & .Rows.Count).End(xlUp).Row For i = 1 To lRow If Len(Trim(.Range("E" & i).Value)) = 0 Then Select Case .Range("C" & i).Value Case S1, S2 sMsg = .Range("E" & i).Address Set rng = .Range("E" & i) End Select End If If (Len(Trim(.Range("F" & i).Value)) = 0) Or _ (Len(Trim(.Range("G" & i).Value)) = 0) Or _ (Len(Trim(.Range("H" & i).Value)) = 0) Then Select Case .Range("C" & i).Value Case S3, S4 If sMsg = "" Then sMsg = .Range("F" & i).Address & " OR " & _ .Range("G" & i).Address & " OR " & _ .Range("H" & i).Address Else sMsg = sMsg & " OR " & _ .Range("F" & i).Address & " OR " & _ .Range("G" & i).Address & " OR " & _ .Range("H" & i).Address End If If rng Is Nothing Then Set rng = .Range("F" & i & ":H" & i) Else Set rng = Union(rng, .Range("F" & i & ":H" & i)) End If End Select End If If sMsg <> "" Then MsgBox "One or all these cells are empty. " & _ "Please insert value in the cell(s) " & _ sMsg If Not rng Is Nothing Then .Activate rng.Select End If Cancel = True Exit For End If Next i End With End Sub 

现在在这一点上

 If sMsg = "" Then sMsg = .Range("F" & i).Address & " OR " & _ .Range("G" & i).Address & " OR " & _ .Range("H" & i).Address Else sMsg = sMsg & " OR " & _ .Range("F" & i).Address & " OR " & _ .Range("G" & i).Address & " OR " & _ .Range("H" & i).Address End If 

macros得到我一个MsgBox与一个错误指示我“在单元格Fi或Gi或Hi插入值” i在哪里是行。 问题是,如果其中一个被正确编译(例如F列),则消息总是相同的。 我需要的,如果只有一个例如是空的,它给我的错误,只有一个是不正确的。 例如; F和G是正确的,但是H是空的。错误将会是“在单元格中插入值Hi”。 我有什么改变?

只需通过分析每个特定的范围(并在逻辑上用“AND”replace“OR”)来创build给定的string(sMsg)。 示例代码:

 Dim curEmpty As String Dim col1 As String, col2 As String, col3 As String col1 = "Column F" col2 = "Column G" col3 = "Column H" If (Len(Trim(.Range("F" & i).Value)) = 0) Then curEmpty = col1 If (Len(Trim(.Range("G" & i).Value)) = 0) Then If (curEmpty <> "") Then curEmpty = curEmpty & " AND " curEmpty = curEmpty & col2 End If If (Len(Trim(.Range("H" & i).Value)) = 0) Then If (curEmpty <> "") Then curEmpty = curEmpty & " AND " curEmpty = curEmpty & col3 End If If sMsg = "" Then sMsg = curEmpty Else sMsg = sMsg & " AND " & curEmpty End If