2

我正在运行一份通过电子邮件分发的报告。电子邮件中包含指向报告的超链接以及从中复制的一系列单元格作为报告内容的快照。我正在尝试自动化并找到一些 VBA,但我不是程序员,无法根据需要对其进行修改。

下面的 VBA 让我得到了大部分的帮助,但有两个缺点:

1) 我需要超链接指向我在电子邮件中引用的特定文件,该文件每天都会更改(即创建一个独特的工作簿)。下面使用静态超链接。我试图找出一种从单元格引用中获取超链接的方法。

2)将超链接和单元格范围从excel复制到电子邮件中时,我需要超链接下方的单元格。下面将范围放在超链接上方。

我想保留下面 VBA 中采用的引用工作表以获取电子邮件的方法。在其他分发的报告上部署似乎很容易。

子 CreateMail()

    Dim rngSubject As Range
    Dim rngTo As Range
    Dim rngCc As Range
    Dim rngBody As Range
    Dim objOutlook As Object
    Dim objMail As Object

    Set objOutlook = CreateObject("Outlook.Application")
    Set objMail = objOutlook.CreateItem(0)
        With ActiveSheet
        Set rngTo = .Range("B1")
        Set rngCc = .Range("B3")
        Set rngSubject = .Range("B2")
        Set rngBody = .Range("H6:K22")

    End With
    rngBody.Copy
     With objMail
        .Body = "Please click on the link below..." & vbCrLf & "rngBody.Paste" & vbCrLf & _
"file:\\dbd03\nccode\Router_Proc\04Routing.txt"
    End With
    With objMail
        .To = rngTo
        .Cc = rngCc
        .Subject = rngSubject

        .Display
    End With
    SendKeys "^({v})", True

    Set objOutlook = Nothing
    Set objMail = Nothing
4

1 回答 1

1

1)要使文件链接动态,您可以在文件路径中包含单元格的引用,包含文件名。

"<file:\\dbd03\nccode\Router_Proc\" & _
        ActiveSheet.Range(<cell address here>) & ">"

注意:在将路径放入电子邮件之前,您可能还需要检查以确保路径存在(像这样)

2)要粘贴超链接下方的单元格,您可以使用另一种SendKeys组合来模拟按Ctrl+ End,这会将光标放在电子邮件的末尾。在使用SendKeys模拟Ctrl+之前执行此操作V应将单元格范围粘贴到正文之后。您更新的代码应如下所示:

With objMail
    .To = rngTo
    .Cc = rngCc
    .Subject = rngSubject
    .Display
End With
SendKeys "^({END})", True '<--- Add this line HERE
SendKeys "^({v})", True

另一个注意事项:另外,我认为您不需要"rngBody.Paste"在您的正文字符串中,因为这只是将确切的文本粘贴到您的电子邮件正文中

于 2013-10-22T21:29:15.467 回答