发送Outlook电子邮件,其中附加了在收件人的特定选项卡处打开的Excel

xoshrz7s  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(100)

希望你一切都好。我有一个VBA代码来生成一封电子邮件,并在Outlook上附加Excel工作簿。工作正常。该按钮是在1标签,我想确保当收件人打开工作簿,它的另一个特定的标签。即生成电子邮件的按钮在选项卡1上,用户将打开选项卡2。因为有多个标签,我不能只发送标签2单独。有人能告诉我,是否有一个简单的解决方案吗?谢谢你的好意
我的代码:

Sub Rectangle1_Click()
Dim xOutApp As Object
    Dim xOutMail As Object
    Dim xMailBody As String
    Dim signature As String
    On Error Resume Next
    Set xOutApp = CreateObject("Outlook.Application")
    Set xOutMail = xOutApp.CreateItem(0)
    
    With xOutMail
        .display
    End With

    signature = xOutMail.body

    
    xMailBody = "" & vbNewLine & vbNewLine & _
              "" & vbNewLine & _
              ""
                  On Error Resume Next
    With xOutMail
        .To = Range("T2")
        .CC = Range("U2")
        .BCC = ""
        .Importance = 2
        .Subject = Range("V2")
        .body = xMailBody & signature
        .Attachments.Add ActiveWorkbook.FullName
        .display   'or use .Send
    End With
    On Error GoTo 0
    Set xOutMail = Nothing
    Set xOutApp = Nothing
End Sub

字符串

q1qsirdb

q1qsirdb1#

这段代码将创建单词本的临时副本,并激活所需的标签,例如(sheet2),生成带有附件的电子邮件,然后在电子邮件编写完成后,从临时副本存储原始工作簿

Sub Rectangle1_Click()
    Dim xOutApp As Object
    Dim xOutMail As Object
    Dim xMailBody As String
    Dim signature As String
    On Error Resume Next
    Set xOutApp = CreateObject("Outlook.Application")
    Set xOutMail = xOutApp.CreateItem(0)
    On Error GoTo 0
    
    ' Copy the Excel workbook to a temporary file to preserve the original workbook's state
    ActiveWorkbook.SaveCopyAs "C:\Temp\TempWorkbook.xlsx"
    
    Dim targetTabName As String
    targetTabName = "Sheet2" ' Replace "Sheet2" with the name of your desired tab
    
    Worksheets(targetTabName).Activate
    
    With xOutMail
        .Display
    End With
    
    ' Restore the original workbook from the temporary file
    Application.DisplayAlerts = False ' Suppress alert for overwriting the original file
    ActiveWorkbook.Close SaveChanges:=False
    Kill ActiveWorkbook.FullName ' Delete the original workbook
    Name "C:\Temp\TempWorkbook.xlsx" As ActiveWorkbook.FullName 
    Application.DisplayAlerts = True 
    
    signature = xOutMail.Body
    xMailBody = "" & vbNewLine & vbNewLine & _
               "" & vbNewLine & _
               ""

    On Error Resume Next
    With xOutMail
        .To = Range("T2")
        .CC = Range("U2")
        .BCC = ""
        .Importance = 2
        .Subject = Range("V2")
        .Body = xMailBody & signature
        .Attachments.Add ActiveWorkbook.FullName
        .Display   'or use .Send
    End With
    On Error GoTo 0
    Set xOutMail = Nothing
    Set xOutApp = Nothing
End Sub

字符串

oprakyz7

oprakyz72#

可以通过使用Workbook_Open事件激活希望用户在打开工作簿时首先看到的工作表来实现此目的。每次打开工作簿时都会触发此事件。
您需要将此代码放在VBA编辑器的ThisWorkbook模块中。以下是您可以如何做到这一点:
1.按Alt + F11打开VBA编辑器。
1.在左侧的Project Explorer中,找到您的工作簿并双击ThisWorkbook
1.粘贴以下代码:

Private Sub Workbook_Open()
    Sheets("Sheet2").Activate
End Sub

字符串
"Sheet2"替换为希望在工作簿打开时处于活动状态的工作表的名称。
请注意,这是工作簿的全局设置。每次打开工作簿时,无论它是如何打开的,此代码都将运行并激活指定的工作表。
您的电子邮件发送代码可以保持不变。当收件人打开工作簿时,由于Workbook_Open事件,它将自动导航到指定的选项卡。
建议的VBA代码应放在VBA编辑器中的ThisWorkbook对象内。此对象包含与工作簿本身相关的事件,例如打开、关闭工作簿或激活或停用工作簿的时间。
在本例中,我们使用Workbook_Open事件。顾名思义,只要打开工作簿,就会触发此事件。此事件中的代码将自动运行。当工作簿打开时,Sheets("Sheet2").Activate行将使“Sheet2”成为活动工作表。
以下是在工作簿中添加Workbook_Open事件的步骤:
1.在Excel中按Alt + F11打开VBA编辑器。
1.在编辑器左侧的项目资源管理器中,找到您的工作簿。如果项目资源管理器不可见,您可以通过按Ctrl + R来显示它。
1.双击工作簿名称下的ThisWorkbook。这将打开与工作簿相关的新代码窗口。
1.在新的代码窗口中,从左侧下拉菜单中选择“Workbook”,并从窗口顶部的右侧下拉菜单中选择“Open”。
1.这将自动创建一个Workbook_Open事件。在此事件中,写入Sheets("Sheet2").Activate。将“Sheet2”替换为希望在工作簿打开时处于活动状态的工作表的名称。
1.关闭VBA编辑器。
下面是修改后的VBA代码:

Sub Rectangle1_Click()
    Dim xOutApp As Object
    Dim xOutMail As Object
    Dim xMailBody As String
    Dim signature As String

    Set xOutApp = CreateObject("Outlook.Application")
    Set xOutMail = xOutApp.CreateItem(0)
    
    With xOutMail
        .display
    End With

    signature = xOutMail.body

    xMailBody = "" & vbNewLine & vbNewLine & _
              "" & vbNewLine & _
              ""
    
    On Error Resume Next
    With xOutMail
        .To = Range("T2")
        .CC = Range("U2")
        .BCC = ""
        .Importance = 2
        .Subject = Range("V2")
        .body = xMailBody & signature
        .Attachments.Add ActiveWorkbook.FullName
        .display
    End With
    On Error GoTo 0
    Set xOutMail = Nothing
    Set xOutApp = Nothing
End Sub

Private Sub Workbook_Open()
    Sheets("Sheet2").Activate
End Sub


使用此修改后的代码,当您运行Rectangle1_Click子例程时,它将以附件的形式发送带有工作簿的电子邮件。当收件人打开工作簿时,由于Workbook_Open事件,它将自动导航到指定的工作表。

相关问题