VBScript_Not能够直接从outlook的电子邮件正文打开超链接到excel SHEET(不是整个工作簿)
背景:
我应该创build一个仪表板(在Excel中)使用VBScript,并通过电子邮件(Outlook)发送给某人。 我已经有一个仪表板(Excel)的模板。 我的脚本打开该模板excel,更新Excel今天的结果和一些超链接到一些新的文件,创build一个Excel邮件信封,并将其发送给某人。
问题:
我的脚本在仪表板excel中添加了2个超链接。 第一个链接指向一个mht文件,第二个链接指向另一个excel文件。 我把邮件发给自己并打开了。 打开电子邮件后,当我点击第一个链接(到MHT文件),它工作正常,并打开IE显示MHT文件内容。 问题是与指向一个Excel文件的第二个超链接。 这不是打开的Excel文件(我已经确保链接是正确的)。
有什么我需要改变我的代码或是否有任何Outlook设置,这将允许我直接打开链接到Excel文件?
码:
Option Explicit Dim objXL, objXb, objXs, strXlPath, strMHTLink, strExcelLink 'Dashboard Excel template strXlPath = "C:\Users\Gurman\Work\Misc\Excel Hyperlink in Outlook\test.xlsx" 'Link to MHT file strMHTLink = "C:\Users\Gurman\Work\Misc\Excel Hyperlink in Outlook\MHTFile.mht" 'Link to another Excel File strExcelLink = "C:\Users\Gurman\Work\Misc\Excel Hyperlink in Outlook\EXLFile.xlsx" 'Opening an excel(strXlPath) and updating it's Sheet1. In Sheet1, I will be adding 2 hyperlinks. '1st link for the MHT file(strMHTLink) '2nd link for another Excel File(strExcelLink) set objXl = CreateObject("excel.application") objXl.visible = true objXl.displayAlerts = false set objXb = objXl.Workbooks.Open(strXlPath) set objXs = objXb.Sheets("Sheet1") objXs.Cells(2,1) = "=HYPERLINK("""&strMHTLink&""",""MHTLINK"")" 'When clicked, it should open IE to display mht file contents objXs.Cells(2,2) = "=HYPERLINK(""["&strExcelLink&"]Sheet1!A1"",""EXLLINK"")" 'When clicked, it should open Sheet1 of EXLFile.xlsx 'Saving the Workbook objXb.save 'Mailing this excels contents using Mail Envelope objXb.EnvelopeVisible = true With objXs.MailEnvelope.Item .to = "xxxxxxxx@xxxxxx.xxx" 'contains an email address .subject = "Today's Hyperlinks" .attachments.add strXlPath 'attaches the saved dashboard in email .send End With objXb.Close objXl.Quit set objXs = Nothing set objXb = Nothing set objXl = Nothing
截图:
这是我得到的电子邮件。 你可以看到,它有2个链接和一个excel文件作为附件(这个excel是我的仪表板(test.xlsx),它的内容和这个邮件正文内容相同)
在电子邮件正文中,当我点击mht链接时,按预期打开IE:
但是,当我点击Excel的链接,没有打开。 即使点击链接颜色也不会改变:
我如何确保Excel超链接是正确的?
这封电子邮件有一个excel附件,其内容与邮件正文相同。 我打开了那个excel,然后点击超链接。 这两个超链接的作用如下所示。 但是我想直接从outlook的电子邮件正文中打开这两个链接(不是这种方式)。
我尽力提供尽可能多的信息。 请让我知道是否需要其他信息。
更新1:
这是@garbb所要求的电子邮件正文源代码
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"> <head> <meta http-equiv=Content-Type content="text/html; charset=us-ascii"> <meta name=ProgId content=Excel.Sheet> <meta name=Generator content="Microsoft Excel 14"> <link rel=File-List href="cid:filelist.xml@01D36E74.B4504EE0"> <link rel=OLE-Object-Data href="cid:oledata.mso"> <style> <!--table {mso-displayed-decimal-separator:"\."; mso-displayed-thousand-separator:"\,";} .xl15 {padding-top:1px; padding-right:1px; padding-left:1px; mso-ignore:padding; color:black; font-size:11.0pt; font-weight:400; font-style:normal; text-decoration:none; font-family:Calibri, sans-serif; mso-font-charset:0; mso-number-format:General; text-align:general; vertical-align:bottom; mso-background-source:auto; mso-pattern:auto; white-space:nowrap;} .xl65 {padding-top:1px; padding-right:1px; padding-left:1px; mso-ignore:padding; color:blue; font-size:11.0pt; font-weight:400; font-style:normal; text-decoration:underline; text-underline-style:single; font-family:Calibri, sans-serif; mso-font-charset:0; mso-number-format:General; text-align:general; vertical-align:bottom; mso-background-source:auto; mso-pattern:auto; white-space:nowrap;} --> </style> <!--[if gte mso 9]><xml> <x:ExcelWorkbook> <x:ExcelWorksheets> <x:ExcelWorksheet> <x:Name>Sheet1</x:Name> <x:WorksheetOptions> <x:DefaultRowHeight>300</x:DefaultRowHeight> <x:Selected/> <x:Panes> <x:Pane> <x:Number>3</x:Number> <x:ActiveRow>8</x:ActiveRow> <x:ActiveCol>4</x:ActiveCol> </x:Pane> </x:Panes> <x:ProtectContents>False</x:ProtectContents> <x:ProtectObjects>False</x:ProtectObjects> <x:ProtectScenarios>False</x:ProtectScenarios> </x:WorksheetOptions> </x:ExcelWorksheet> </x:ExcelWorksheets> <x:WindowHeight>8010</x:WindowHeight> <x:WindowWidth>14805</x:WindowWidth> <x:WindowTopX>240</x:WindowTopX> <x:WindowTopY>105</x:WindowTopY> <x:HasEnvelope/> <x:ProtectStructure>False</x:ProtectStructure> <x:ProtectWindows>False</x:ProtectWindows> </x:ExcelWorkbook> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="3073" /> </xml><![endif]--> </head> <body link=blue vlink=purple> <table border=0 cellpadding=0 cellspacing=0 width=183 style='border-collapse: collapse;table-layout:fixed;width:138pt'> <col width=89 style='mso-width-source:userset;mso-width-alt:3254;width:67pt'> <col width=94 style='mso-width-source:userset;mso-width-alt:3437;width:71pt'> <tr height=20 style='height:15.0pt'> <td height=20 class=xl15 width=89 style='height:15.0pt;width:67pt'>Link_To_MHT</td> <td class=xl15 width=94 style='width:71pt'>Link_To_Excel</td> </tr> <tr height=20 style='height:15.0pt'> <td height=20 class=xl65 style='height:15.0pt'><a href="file:///C:\Users\Gurman\Work\Misc\Excel%20Hyperlink%20in%20Outlook\MHTFile.mht">MHTLINK</a></td> <td class=xl65><a href="%5bC:/Users/Gurman/Work/Misc/Excel%20Hyperlink%20in%20Outlook/EXLFile.xlsx%5dSheet1!A1">EXLLINK</a></td> </tr> <![if supportMisalignedColumns]> <tr height=0 style='display:none'> <td width=89 style='width:67pt'></td> <td width=94 style='width:71pt'></td> </tr> <![endif]> </table> </body> </html>
更新2
这是HyperLink公式在Dashboard Excel单元格中的显示方式:
MHTLINK(在仪表板内工作):
=HYPERLINK("C:\Users\Gurman\Work\Misc\Excel Hyperlink in Outlook\MHTFile.mht","MHTLINK")
EXLLINK(从仪表板中的excel工作):
=HYPERLINK("[C:\Users\Gurman\Work\Misc\Excel Hyperlink in Outlook\EXLFile.xlsx]Sheet1!A1","EXLLINK")
在Outlook中,如Update 1中的电子邮件源所示,链接是:
MHTLINK(从邮件正文):
<a href="file:///C:\Users\Gurman\Work\Misc\Excel%20Hyperlink%20in%20Outlook\MHTFile.mht">MHTLINK</a>
EXLLINK(不在电子邮件正文中工作):
<a href="%5bC:/Users/Gurman/Work/Misc/Excel%20Hyperlink%20in%20Outlook/EXLFile.xlsx%5dSheet1!A1">EXLLINK</a>
更新3(问题根源)
在我的VBScript代码中,我有一行:
objXs.Cells(2,2) = "=HYPERLINK(""["&strExcelLink&"]Sheet1!A1"",""EXLLINK"")"
这实际上创build一个Excel Book的Sheet1的超链接。 在该单元格中写入的公式也是正确的=HYPERLINK("[C:\Users\Gurman\Work\Misc\Excel Hyperlink in Outlook\EXLFile.xlsx]Sheet1!A1","EXLLINK")
。 在这个公式中添加Sheet1!A1
是非常重要的,因为我希望超链接指向工作簿的特定工作表(在这种情况下为工作表Sheet1)
问题来了,当这个EXCEL公式被转换成OUTLOOK MAIL中的链接时,它的价值就变成了:
<a href="%5bC:/Users/Gurman/Work/Misc/Excel%20Hyperlink%20in%20Outlook/EXLFile.xlsx%5dSheet1!A1">EXLLINK</a>
上面的链接似乎是不正确的,因为它有一些hex值,如%5b
, %5d
等,因此,它不直接工作。
如果我改变我的VBScript代码创build超链接到Excel工作簿,而不是创build超链接到其“Sheet1”,它工作正常,我也可以直接从电子邮件打开Excel工作簿链接。
VBscript中的更新行:
objXs.Cells(2,2) = "=HYPERLINK("""&strExcelLink&""",""EXLLINK"")"
在电子邮件源中,它被转换为:
<a href="file:///C:\Users\Gurman\Work\Misc\Excel%20Hyperlink%20in%20Outlook\EXLFile.xlsx">EXLLINK</a>
我可以使用这个链接直接从电子邮件打开Excel工作簿。 但是这种方法的缺陷是在这种情况下它可能会或可能不会打开Sheet1。 只要有人点击超链接,可能会打开Sheet2而不是Sheet1。 因此,我想在我的代码中处理这个事情。
所以,我的问题仍然没有解决:
是否有可能在Outlook的电子邮件正文中打开一个Excel工作簿的特定工作表的超链接?
而不是使用HYPERLINK
实际上是一个公式,只是添加一个真正的超链接到单元格:
objXs.Cells(2,2).Hyperlinks.Add objXs.cells(2,2), strExcelLink, "Sheet1!A1", "My Screentip", "EXLLINK"
超链接到特定的Excel工作表:
文件:/// C:\ yourPath \ yourFileName.xlsm#yourSheetName A1
这可以在Outlook电子邮件中使用。 单击链接将在工作表yourSheetName
上打开c:\yourPath\yourFileName.xlsm
yourSheetName
并select单元格A1
。
( 来源 )
超链接到UNC(networking)path:
(我不能testing这些,但这些方法中的一个或两个都可以工作。)
文件://///server/path/to/file.txt
(这是五个斜杠!)
要么
文件://server/path/to/file.txt
( 来源 )
HTML邮件中的超链接:
另一种可能性,如果电子邮件是HTML格式,将是这样的(可能包括像ToolTip等fancier格式):
<style> a.tooltips {position: relative; display: inline;} a.tooltips span { position: absolute; width:240px; color: #FFFFFF; background: #000000; height: 30px; line-height: 30px; text-align: center; visibility: hidden; border-radius: 6px; } a.tooltips span:after { content: ''; position: absolute; top: 100%; left: 50%; margin-left: -8px; width: 0; height: 0; border-top: 8px solid #000000; border-right: 8px solid transparent; border-left: 8px solid transparent; } a:hover.tooltips span { visibility: visible; opacity: 0.8; bottom: 30px; left: 50%; margin-left: -76px; z-index: 999; } </style> <br><br> <a class="tooltips" href="#">\\server\share\docs<span>This is a ToolTip!</span></a>