首页 > 解决方案 > 在不同版本的 Excel / Outlook / Word 中运行相同的宏

问题描述

我生成报告以发送到不同的分支机构。我运行一个创建受保护报告 (*.xlsm) 的宏。这些报告为分支机构经理提供了评论空间,并带有一个“发送评论”按钮,可在下方运行此宏。

如果宏不起作用,我建议添加以下参考。

分行经理的笔记本电脑上有不同版本的 MS Office(Excel、Outlook 等)。当他们尝试运行时,它会显示错误,例如:“Loadind DLL 中的错误”;错误 2等。

分公司经理方面应该做什么来运行这个宏?

Sub CommentsEmail()

Dim template As Workbook
Dim dashboard As Worksheet
Dim comments As Worksheet
Dim OutApp As Object
Dim OutMail As Object
Dim olApp As Outlook.Application
Dim mymail As Outlook.mailItem
Dim objSel As Word.Selection
Dim commentsrange As Range
Dim branch As String
Dim Sendto As String

UpdateScreen = False

Shell ("Outlook")

Set olApp = New Outlook.Application
Set mymail = olApp.CreateItem(olMailItem)
Set template = ActiveWorkbook
Set dashboard = template.Worksheets("Dashboard")
Set comments = template.Worksheets("Comments")
branch = dashboard.Cells(1, 25)
Sendto = comments.Cells(2, 10)
Set commentsrange = comments.Range(Cells(7, 1), Cells(52, 4))

template.Activate


Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

'OutMail.Display
Dim wordDoc As Word.Document
Set wordDoc = OutMail.GetInspector.WordEditor

Set objSel = wordDoc.Windows(1).Selection

        'construct the body of the email here
        With objSel

            'first text
            .InsertAfter "Dear All," & vbCrLf
            .Move wdParagraph, 1

            'second text
            .InsertAfter vbCrLf & "See below the Comments for Flash Indicator - " & branch & vbCrLf & vbCrLf
            .Move wdParagraph, 1

            'copy a range and paste a picture
            commentsrange.Copy ''again, you need to modify your target range
            .PasteAndFormat wdChartPicture
            .Move wdParagraph, 1

            .InsertAfter vbCrLf & "Let us know of any questions." & vbCrLf & vbCrLf
            .Move wdParagraph, 1

            .InsertAfter vbCrLf & "Kind Regards," & vbCrLf
        End With

        OutMail.To = OutMail.To & ";" & Sendto

        With OutMail

         .Subject = "Comments on Flash Indicator Results - " & branch
         .Attachments.Add (ActiveWorkbook.FullName)
         .Display
        End With

On Error GoTo 0

        Set OutMail = Nothing
        Set OutApp = Nothing


        With Application
            .ScreenUpdating = True
            .EnableEvents = True
        End With
        Exit Sub

End Sub

这仍然是早期绑定吗?如果是的话,我完全迷路了。

Sub CommentsEmail2()

Dim template As Workbook
Dim dashboard As Worksheet
Dim comments As Worksheet
Dim OlaApp As Object
Dim OleMail As Object

Dim TempFilePath As String
Dim xHTMLBody As String

Dim commentsrange As Range
Dim branch As String
Dim Sendto As String

UpdateScreen = False

Set template = ActiveWorkbook
Set dashboard = template.Worksheets("Dashboard")
Set comments = template.Worksheets("Comments")
Set commentsrange = comments.Range(Cells(7, 1), Cells(52, 4))

branch = dashboard.Cells(1, 25)
Sendto = comments.Cells(2, 10)

template.Activate

 On Error Resume Next
    Set olApp = GetObject(, "Outlook.Application")
    If Err <> 0 Then Set olApp = CreateObject("Outlook.Application")
    On Error GoTo 0
    Set OleMail = olApp.CreateItem(0)

Call createJpg(ActiveSheet.comments, commentsrange, "DashboardFile")
        TempFilePath = Environ$("temp") & "\"
        xHTMLBody = "<span LANG=EN>" _
                & "<p class=style2><span LANG=EN><font FACE=Calibri SIZE=3>" _
                & "Hello, this is the data range that you want:<br> " _
                & "<br>" _
                & "<img src='cid:DashboardFile.jpg'>" _
                & "<br>Best Regards!</font></span>"
        With OleMail
            .Subject = "test"
            .HTMLBody = xHTMLBody
          .Attachments.Add TempFilePath & "DashboardFile.jpg", olByValue
          .Attachments.Add (ActiveWorkbook.FullName)
            .To = " "
            .Cc = " "
            .Display
        End With




        Set OleMail = Nothing
        Set OlaApp = Nothing


        With Application
            .ScreenUpdating = True
            .EnableEvents = True
        End With
        Exit Sub

End Sub

Sub createJpg(SheetName As String, commentsrange As String, nameFile As String)
    Dim xRgPic As Range
    ThisWorkbook.Activate
    Worksheets(comments).Activate
    Set xRgPic = ThisWorkbook.Worksheets(comments).Range(Cells(7, 1), Cells(52, 4))
    xRgPic.CopyPicture
    With ThisWorkbook.Worksheets(comments).ChartObjects.Add(xRgPic.Left, xRgPic.Top, xRgPic.Width, xRgPic.Height)
        .Activate
        .Chart.Paste
        .Chart.Export Environ$("temp") & "\" & nameFile & ".jpg", "JPG"
    End With
    Worksheets(comments).ChartObjects(Worksheets(comments).ChartObjects.Count).Delete
Set xRgPic = Nothing
End Sub

标签: excelvbaoutlook-addinlate-binding

解决方案


推荐阅读