Alf*_*gos 2 email excel vba hyperlink
我试图让我的用户从他们的 Excel 电子表格轻松发送电子邮件,他们喜欢将其用作数据输入和操作的前端。我的意图是写一个函数:
generateEmail(name, manager, cc)
Run Code Online (Sandbox Code Playgroud)
并使其可以根据用户的喜好调用该函数。
在这种情况下,Excel 调用 Outlook,创建新邮件,并转储包含要发送的格式化电子邮件的文本,其中将包含一些从他们当前正在处理的表中每行动态更改的值。这是 VBA 函数:
Function generateEmail(name, manager, cc)
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = "To Service Desk:" & vbNewLine & vbNewLine & _
"Please open a ticket for CS/oe/ns/telecom/dal to request a new extension. Please find the details attached:" & vbNewLine & vbNewLine & _
"Name: " & name & vbNewLine & _
"Manager: " & manager & vbNewLine & _
"CC: " & cc
On Error Resume Next
With OutMail
.To = "helpdesk@test.com"
.cc = ""
.BCC = ""
.Subject = "New Extension Request"
.Body = strbody
.Display
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End Function
Run Code Online (Sandbox Code Playgroud)
然后,在我将其添加到的表的最右侧列中,我创建了一列链接:
=HYPERLINK(generateEmail(H2, I2, M2), "Generate Email")
Run Code Online (Sandbox Code Playgroud)
其中 H2、I2 和 M2 是我需要注入到将生成的电子邮件中的值。用户还将拥有 H3、I3、M3、H4、I4、M4...等的数据。
这实际上按预期工作,但是当我在电子表格上显示超链接时,一旦 Excel 检测到鼠标悬停在链接上,它就会触发事件。我希望使链接可点击,并且只有在用户点击后才触发该功能。
有没有办法做到这一点?
我的搜索结果是空的,基本上是建议人们从 VBA 本身手动创建每个单元格的链接。由于我的用户存储的数据集会随着时间的推移而增长,因此每次用户添加记录时,我都需要一种方法来创建新的“发送电子邮件”链接。
要仅通过单击运行该功能,您可以尝试输入子地址:
=HYPERLINK("#generateEmail(H2, I2, M2)", "Generate Email")
Run Code Online (Sandbox Code Playgroud)
然后在代码中添加额外的一行以返回当前地址:
Function generateEmail(name, manager, cc)
Set generateEmail = Selection
'Paste Outlook Code Here
End Function
Run Code Online (Sandbox Code Playgroud)
请注意,此方法不会在主 vba 线程上执行,因此为了进行测试,您可以在代码中插入语句而不是单步执行,例如:
Range("A10:C10") = Array(name, manager, cc)
Run Code Online (Sandbox Code Playgroud)