我正在研究excel宏并且一度陷入困境。需要帮助才能解决它。
我必须在工作表中查找2行,并且对于1行中的每个值,查找2行中的单元格值。如果第2行中的值范围等于某个条件值,则从第2行检查并将该标志设置为true。为实现这一点,我使用了两个For Each
循环:
Sub Sendmail ()
For Each cell in Rows("5").Cells.SpecialCells(xlCellTypeConstant)
If cells.Value Like "*@*" Then
Subj = "Fill the Sheet"
Recipient = cell.Offset(0,-3).Value
EmailAddr = cell.Offset.Value
For Each row In Sheet14.Range("O244:AK244").Cells
If Not row = '8.00" Then
found = False
Else
found = True
End If
Next row
If found = False Then
Msg = "Hi " & Recipient & vbCrLf & vbCrLf
Msg = Msg & " Please fill the sheet for this week " & vbCrLf & vbCrLf
Set MItem = Outlook.CreateItem(oIMailItem)
With MItem
.To = EmailAddr
.Subject = Subj
.Body = Msg
.Save
End With
End If
End If
Next
End Sub
此处使用的found
变量被定义为布尔值,但我无法正确使用它,并且每次执行found = false
时都是如此。我想只有在第2行条件成立时,才能创建邮件。
答案 0 :(得分:2)
我注意到的一些事情......我没有测试过代码,但这是我的一般观察。
A)一段引人注目的代码是If cells.Value Like "*@*" Then
。将其更改为If cell.Value Like "*@*" Then
B)将xlCellTypeConstant
更改为xlCellTypeConstants
C) EmailAddr = cell.Offset.Value
如果您想要获取相同的单元格值,则不需要Offset
指定偏移量的参数
D) @ChrisProsser已对For Each row In Sheet14.Range("O244:AK244").Cells
E)为了上帝的缘故(请忽略......为了您),请使用Option Explicit
!我强烈建议使用Option Explicit
我还建议您查看此链接(链接中的SEE POINT 2)。
主题:'Err'是人类
答案 1 :(得分:0)
您正在运行For循环;
For Each row In Sheet14.Range("O244:AK244").Cells
If Not row = '8.00" Then
found = False
Else
found = True
End If
Next row
对于整个范围,没有按条件执行任何操作。这与仅检查范围中的最后一个单元格(可能为True)相同,这就是为什么您认为False正在执行。也许你的if语句也应该在这个循环中?也许在哪里找到=假是?