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>