Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA Excel-如果一列中的单元格包含电子邮件地址,而另一列中的单元格为;“出售”,发送电子邮件_Vba_Email_Excel - Fatal编程技术网

VBA Excel-如果一列中的单元格包含电子邮件地址,而另一列中的单元格为;“出售”,发送电子邮件

VBA Excel-如果一列中的单元格包含电子邮件地址,而另一列中的单元格为;“出售”,发送电子邮件,vba,email,excel,Vba,Email,Excel,今天刚开始用VBA做实验。创建Excel工作表以跟踪已售出、待处理、丢失,这将允许销售人员单击按钮一次向一个类别发送组电子邮件。经过多次搜索,我找到了一些代码,可以通过检查一列来确保正确的地址,从而很好地发送群电子邮件。我发现了一些我认为可以检查“工作状态”列的其他代码,以便只选择“已售出”或其他任何内容作为电子邮件。我是一个笨拙的初学者,需要帮助。这是在我添加-If Sh.Cells(Target.Row,7)=“PENDING”Then-part之前一直有效的代码。任何帮助都将不胜感激。谢谢

今天刚开始用VBA做实验。创建Excel工作表以跟踪已售出、待处理、丢失,这将允许销售人员单击按钮一次向一个类别发送组电子邮件。经过多次搜索,我找到了一些代码,可以通过检查一列来确保正确的地址,从而很好地发送群电子邮件。我发现了一些我认为可以检查“工作状态”列的其他代码,以便只选择“已售出”或其他任何内容作为电子邮件。我是一个笨拙的初学者,需要帮助。这是在我添加-If Sh.Cells(Target.Row,7)=“PENDING”Then-part之前一直有效的代码。任何帮助都将不胜感激。谢谢

Private Sub CommandButton1_Click()
Dim cell As Range
 Dim strto As String
 For Each cell In ThisWorkbook.Sheets("Sales 2013").Range("E3:E500")
 If cell.Value Like "?*@?*.?*" Then
    If Sh.Cells(Target.Row, 7) = "PENDING" Then
     strto = strto & cell.Value & ";"
    End If
 End If
 Next cell
 If Len(strto) > 0 Then strto = Left(strto, Len(strto) - 1)

Application.ScreenUpdating = False
 Set OutApp = CreateObject("Outlook.Application")
 OutApp.Session.Logon

 On Error GoTo cleanup
 Set OutMail = OutApp.CreateItem(0)
 On Error Resume Next
 With OutMail
 .To = "Anchor Sales"
 .Bcc = strto
 .Subject = "Enter subject here"
 .Body = "" ' EMPTY FOR NOW
 'USE THIS FOR ENTERING NAMES OF RECIPIENTS IN BODY TEXT "here"
 '"Dear" & Cells(cell.Row, "A").Value _
 & vbNewLine & vbNewLine & _
 "Enter body text " & _
 "here"
 'You can add files also like this
 '.Attachments.Add ("C:\test.txt")
 '.Send 'Or use Display
 .Display
 End With
 On Error GoTo 0
 Set OutMail = Nothing
cleanup:
 Set OutApp = Nothing
 Application.ScreenUpdating = True
End Sub

Private Sub CommandButton2_Click()

End Sub

请帮忙

当然,我更愿意每人发一封邮件(如果收件人彼此不认识的话),但让我们继续讨论你的问题

您只需要做一些小的更改:

Private Sub CommandButton1_Click()
Dim cell As Range
 Dim strto As String
 For Each cell In ThisWorkbook.Sheets("Sales 2013").Range("E3:E500")
 If cell.Value = "PENDING" Then strto = strto & cell.offset(0, 1).value & ";" 
我不确定您是否需要像“@??*”这样的“if cell.Value”部分,或者它是否来自您找到的代码的复制粘贴。。。如果您需要,最后一行必须替换为

 If cell.Value Like "?*@?*.?*" and cell.Value = "PENDING" Then strto = strto & cell.offset(0, 1).value & ";"  

    'in Offset(0,1) I assume the mailadress is in the cell next to the cell tested for "pending" 
 Next cell
 If Len(strto) > 0 Then strto = Left(strto, Len(strto) - 1)
剩下的就照你说的做

这个问题是由

    If Sh.Cells(Target.Row, 7) = "PENDING" Then
因为你对“sh”没有定义,但你也不需要它


我希望这能有所帮助

我是不是遗漏了什么?“Sh”设置在哪里?如果不是,VBA怎么知道“Sh.Cells”指的是什么?返回,查看示例代码,看看您是否能够找出“Sh”应该指的是什么,并适当地编辑您的代码。@Johnny Bones抱歉,我没有任何线索。在我找到它的那篇文章中,它一般都是这样写的,我在第七栏添加了“7”,并在搜索词中添加了“PENDING”。“Sh”是否仅仅意味着我需要再次输入工作簿/工作表的名称?请原谅我的无知。我一直在做这个,同时也在做一些其他的项目。我想当我今晚回家的时候,我需要在VBA中搜索白痴!是的,我不是Excel专家(我有很多访问经验,但你不必在Access中引用单元格…),所以我不能确切地告诉你怎么做,但“Sh”需要引用一些东西。这就是你的问题所在;“Sh”目前对您的代码没有任何意义。看看谷歌是否知道在电子表格中循环时如何引用特定单元格。您可以尝试设置Sh=ThisWorkbook.Sheets(“Sales 2013”),但我不能保证这会起作用。Sh可能引用了在早期代码中设置的工作表。目标也没有设定。发布更多关于如何在工作表中设置数据的信息,我们可以提供帮助。i、 e.状态为“A”列电子邮件“B”列等。
如果单元格.Value像“*@*?*”和单元格.EntireRow.Cells(7)。Value=“PENDING”那么..