我正在运行一份通过电子邮件分发的报告。电子邮件中包含指向报告的超链接以及从中复制的一系列单元格作为报告内容的快照。我正在尝试自动化并找到一些 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
最佳答案
1)要使文件链接动态,您可以在文件路径中包含单元格的引用,包含文件名。
"<file:\\dbd03\nccode\Router_Proc\" & _
ActiveSheet.Range(<cell address here>) & ">"
注意:在将路径放入电子邮件之前,您可能还需要检查以确保路径存在 (like this)
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"
在您的正文字符串中,因为这只是将确切的文本粘贴到您的电子邮件正文中
关于excel - 从单元格引用插入动态超链接并将其放在复制的范围之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19527221/