簡體   English   中英

尋找Outlook根據IF語句生成的數據發送電子郵件

[英]Looking for Outlook to send an email based from data generated from an IF statement

我知道還有其他關於同一件事的帖子,但我不能讓它與我的變量一起工作。

我有2列數據使用IF語句,這些語句是IF(Asus!C:C=TODAY(),"Promo Today","") 我想使用VBA來檢測一個單元格何時變成"Promo Today"並向收件人發送一封電子郵件(根據我的理解,電子郵件地址必須在單元格中定義,如我將發布的代碼中所示,我試着把它弄進去)。

第2列和第3列,正如我在代碼中嘗試定位的那樣,是IF語句所在的列,我沒有考慮到這一點,我只是想到的是我是否必須將行作為目標好?

Private Sub Worksheet_Change()
Dim sEmailBodyp1 As String
Dim sEmailSubject As String
Dim sEmailTo As String
Dim Outlook As Object
Dim MasterCheck As Worksheet

sEmailTo = MasterCheck.Range("D2").Value
sEmailSubject = MasterCheck.Range("E2").Value
sEmailBodyp1 = MasterCheck.Range("F2").Value

If Target.Column = 2 And Target.Value = "Promo Today" Then
        With CreateObject("Outlook.Application").CreateItem(0)
            .To = sEmailTo
            .Subject = sEmailSubject
            .Body = sEmailBodyp1
            .Send
        End With
    End If


End Sub

簡報

在VBA上有幾種訪問工作Sheet方法,最常見的是:

  • 工作表名稱 ,您可以在Excel工作Sheet上設置(用戶可以更改此)

在此輸入圖像描述

然后像這樣調用你的代碼:

Dim myWorksheet As Worksheet   
Set myWorksheet = Worksheets("Sheet1") 'The user defined Excel sheet name.

  • Microsoft Excel對象表 (可在左窗格中找到)

在此輸入圖像描述

你可以這樣簡單地調用它(假設它的名字是Sheet1 ):

Sheet1.Activate

你的代碼

所以,回到你的代碼,因為變量MasterCheck沒有初始化 ,我們可以使用第一種方法並初始化它的值:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sEmailBodyp1 As String
    Dim sEmailSubject As String
    Dim sEmailTo As String
    Dim Outlook As Object
    Dim MasterCheck As Worksheet

    Set MasterCheck = Sheets("MySheet") 'Change "MySheet" with your sheet name

    sEmailTo = MasterCheck.Range("D2").Value
    sEmailSubject = MasterCheck.Range("E2").Value
    sEmailBodyp1 = MasterCheck.Range("F2").Value

    If Target.Column = 2 And Target.Value = "Promo Today" Then
        With CreateObject("Outlook.Application").CreateItem(0)
            .To = sEmailTo
            .Subject = sEmailSubject
            .Body = sEmailBodyp1
            .Send
        End With
    End If

End Sub

這樣的事情應該有效:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("B:B")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub

    Dim sEmailBodyp1 As String
    Dim sEmailSubject As String
    Dim sEmailTo As String
    Dim Outlook As Object
    Dim MasterCheck As Worksheet

    Set MasterCheck = ActiveWorkbook.Sheets("SheetName") 'Change this with your sheet name

    sEmailTo = MasterCheck.Range("D2").Value
    sEmailSubject = MasterCheck.Range("E2").Value
    sEmailBodyp1 = MasterCheck.Range("F2").Value

    If Target.Value = "Promo Today" Then
        With CreateObject("Outlook.Application").CreateItem(0)
            .To = sEmailTo
            .Subject = sEmailSubject
            .Body = sEmailBodyp1
            .Send
        End With
    End If

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM