我无法弄清楚为什么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
答案 0 :(得分:1)
对我来说,for循环中的Name
会提供类似=Sheet1!$G$2:$G$5
的内容......这与C_R
或其他内容不匹配。我需要使用Name.Name
来实现这一点。然后为了得到名称的单元格范围,我需要使用Name.RefersToRange
。
此外,为了使您的If
列表更易于管理,您可以改为使用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
答案 1 :(得分:0)
不要使用名称它是保留字(您可以将名称为File1的文件重命名为File2)。
将变量名称更改为MyName或类似名称然后如果您继续遇到问题,请停止代码并通过键入?activeworkbook.Names.Count在调试风(CTRL-G)中手动评估循环按Enter键(不要忘记?)并查看是否有一个大于零的数字。