0

我正在研究 excel 宏,并在某一时刻卡住了。需要帮助来解决它。

我必须在工作表中查找 2 行,并为 1 行中的每个值查找 2 行中的单元格值。如果第 2 行中的值范围等于某个条件值,则退出第 2 行检查并将标志设置为真。为了实现这一点,我使用了两个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变量定义为 Boolean ,但我无法正确使用它,并且每次都found = false在执行。我只想要第 2 行的条件为真,那么只有邮件应该被创建。

4

2 回答 2

2

我注意到的几件事......我没有测试过代码,但这是我的一般观察。

A)一个明显的代码是If cells.Value Like "*@*" Then. 将其更改为If cell.Value Like "*@*" Then

B)更改xlCellTypeConstantxlCellTypeConstants

C) EmailAddr = cell.Offset.Value如果要获取相同单元格的值,则不需要Offset另外指定 Offset 的参数

D) @ChrisProsser 已经评论过For Each row In Sheet14.Range("O244:AK244").Cells

E)看在上帝的份上(请忽略……看在你的份上),使用Option Explicit! 我强烈建议使用Option Explicit我还建议查看此链接(请参阅链接中的第 2 点)。

主题:“犯错”是人之常情

链接http ://www.siddharthout.com/2011/08/01/to-err-is-human/

于 2013-08-06T13:11:02.013 回答
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 语句也应该在这个循环中?也许 found = False 在哪里?

于 2013-08-06T13:03:17.663 回答