2016-11-14 649 views
-1

我有一個Excel表格,並希望在保存它們並將其發回給我們之前製作一些單元格。EXCEL VBA - 使單元格爲必填

我有以下代碼,但是檢查不會停止在指定的單元格上,只是繼續。我應該怎麼做才能在指定的範圍內停止?

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


    Dim rngCell As Range 
    Dim lngLstRow As Long, lngTCols As Long 
    Dim lngRowCheck(1 To 2) As String 


    lngRowCheck(1) = "B2:B18" 
    lngRowCheck(2) = "D2:D4" 



    lngLstRow = ActiveSheet.UsedRange.Rows.Count 


    For i = 1 To UBound(lngRowCheck) 
     For Each rngCell In Range(lngRowCheck(i) & "2:" & lngRowCheck(i) & lngLstRow) 
      If rngCell.Value = 0 Then 
       MsgBox ("Please enter a name in cell " & rngCell.Address) 
       rngCell.Select 
       Exit Sub 
      End If 
     Next 
    Next i 


    End Sub 
+0

嘗試的代碼我的回答如下,讓我知道如果這就是你的意思是 –

回答

2

您可以使用Application.Union合併您的搜索範圍,由你可以拿出For循環,你的代碼將清潔ANS更容易理解。 試試下面的代碼:

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

Dim rngCell As Range 
Dim lngLstRow As Long, lngTCols As Long 
Dim lngRowCheck(1 To 2) As String 

lngRowCheck(1) = "B2:B18" 
lngRowCheck(2) = "D2:D4" 

Dim UnionRng  As Range 
Set UnionRng = Application.Union(Range("B2:B18"), Range("D2:D4")) 

lngLstRow = ActiveSheet.UsedRange.Rows.Count 

For Each rngCell In UnionRng.Cells 
    If rngCell.Value = 0 Then 
     MsgBox ("Please enter a name in cell " & rngCell.Address) 
     rngCell.Select 
     Exit Sub 
    End If 
Next 

End Sub 
+0

感謝夏嘉曦它的工作現在。 :)正是我的意思。 –

+0

@Shilos_Dad歡迎您,請標記爲答案 –