2011-10-28 219 views
0

我创建一个excel文件,列A到H是强制单元格。 这个excel文件将被传递给输入。 所以,我想强调空单元作为提醒。vba @ excel_highlight空单元格

我已经写下面的代码...

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可以是空白的,然后你怎么知道这是最后一行是c在A:H中保存数据?是否有另一个数据部分超出此范围设置限制? – brettdj

回答

0

这是一个VBA的解决方案,防止用户保存,直到所希望的范围被填充(承认Gserg的意见,即,该最后一行是具有输入至少一个细胞)

在你可以在第二部分无论是直接添加你的表的索引,Set ws = Sheets(x)的位置x,或Set ws = Sheets("YourSheet")特定表名称

的代码只将内的一大亮点真正的空白单元格至H此片,直到最后进入的小区(使用SpecialCells作为快捷方式) 。任何这样的细胞将通过代码在退出来选择

  1. 将这个代码的ThisWorkbook模块中(所以它触发每当用户试图关闭文件)

    Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    bCheck = False 
    Call CheckCode 
    If bCheck Then Cancel = True 
    End Sub 
    
  2. 将这个代码在标准模块

    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