对于循环被跳过

我一直没有弄清楚为什么For循环块(有两个for循环)被代码跳过。 我知道它正在被跳过bc消息框正在代码中进一步下降。 有什么想法吗?

Dim OL As Outlook.Application Dim myitem As Outlook.MailItem Dim wb As Workbook Dim ws As Worksheet Dim PicPath As String Dim x, y As Integer Dim Name As Name Dim cell, rng1 As Range Set wb = ActiveWorkbook Set ws = wb.Sheets("Sheet1") wb.Sheets("Sheet1").Activate 'Request type check If (Sheet1.NewResource.Value = False) And (Sheet1.Modification.Value = False) Then MsgBox "Please select a Request Type of your request and complete the other mandatory fields" GoTo cont End If 'checking New Resource Entry mandatory fields If Sheet1.NewResource.Value = True Then If (Sheet1.NewPOnobx.Value = False) And (Sheet1.NewPOyesbx.Value = False) Then MsgBox "Please fill the missing mandatory fields" GoTo cont End If If (Sheet1.POyesbx.Value = False) And (Sheet1.POnobx.Value = False) Then MsgBox "Please fill the missing mandatory fields" GoTo cont End If If (Sheet1.POnobx.Value = True) And (Sheet1.SOWtxt.Value = "") Then MsgBox "Please select a copy of the Signed Agreement" GoTo cont End If For Each Name In ActiveWorkbook.Names 'each named range in gateway fields If (Name = "C_LN") Or (Name = "C_FN") Or (Name = "C_SD") Or (Name = "C_ED") Or (Name = "C_O") Or (Name = "C_D") Or (Name = "C_OF") Or (Name = "C_C") Or (Name = "C_M") Or _ (Name = "C_R") Or (Name = "C_PT") Or (Name = "C_V") Or (Name = "C_SAR") Or (Name = "C_BAR") Or (Name = "C_SR") Or (Name = "C_SS") Or (Name = "C_PO") Then 'all gateway field names x = 0 For Each cell In Name 'cell in the named range If cell.Value = "" Then 'looking for blank mandatory fields If (cell.Name = "LN_Cmt") Or (cell.Name = "FN_Cmt") Or (cell.Name = "SD_Cmt") Or (cell.Name = "ED_Cmt") Or (cell.Name = "O_Cmt") Or _ (cell.Name = "D_Cmt") Or (cell.Name = "OF_Cmt") Or (cell.Name = "C_Cmt") Or (cell.Name = "M_Cmt") Or (cell.Name = "R_Cmt") Or _ (cell.Name = "PT_Cmt") Or (cell.Name = "V_Cmt") Or (cell.Name = "SAR_Cmt") Or (cell.Name = "BAR_Cmt") Or (cell.Name = "SR_Cmt") Or _ (cell.Name = "SS_Cmt") Or (cell.Name = "PO_Cmt") Then GoTo skip1 Else x = x + 1 '+1 for a blank mandatory field End If End If skip1: Next cell If x > 0 Then 'flag the missing info MsgBox "Please fill the missing mandatory fields" GoTo cont End If End If Next Name End If 

对于我来说,在for循环中的Name就像=Sheet1!$G$2:$G$5 …这不符合您的C_R或任何。 我需要使用Name.Name来获得。 然后为了获得名称单元格的范围,我需要使用Name.RefersToRange

此外,为了让您的If列表更易于pipe理,您可以使用Select Case来代替:

  Select Case Name.Name Case "C_LN", "C_FN", "C_SD", "C_ED", "C_O", "C_D", "C_OF", "C_C", "C_M", "C_R", "C_PT", "C_V", "C_SAR", "C_BAR", "C_SR", "C_SS", "C_PO" For Each cell In Name.RefersToRange Debug.Print cell.Address Next cell Case Else Debug.Print "Other Name" End Select 

不要使用名称,它是一个保留字(您可以将名称File1重命名为File2)。

将variables名更改为MyName或类似的东西,如果继续遇到问题,请停止代码并在debugging风(CTRL-G)中手动计算循环,方法是键入?activeworkbook.Names.Count并按Enter(不要忘了?),看看你是否有一个零以上的数字。