VBScript_Not能够直接从outlook的电子邮件正文中打开超链接到excel SHEET(不是整个工作簿)

时间:2017-12-06 04:39:12

标签: excel vba excel-vba outlook outlook-vba

背景

我应该使用vbscript创建一个仪表板(在excel中)并通过电子邮件(outlook)将其发送给某人。我已经有了仪表板的模板(excel)。我的脚本打开了该模板excel,使用今天的结果更新了Excel,并为一些新文件添加了一些超链接,创建了一个excel邮件信封并将其发送给某人。

ISSUE:

我的脚本在仪表板excel中添加了2个超链接。第一个链接指向mht文件,第二个链接指向另一个excel文件。我把邮件发给自己打开了。打开电子邮件后,当我点击第一个链接(到mht文件)时,它工作正常并打开IE显示mht文件内容。问题是指向excel文件的第二个超链接。它不是打开excel文件(我已确保链接正确)。

我的代码中是否需要更改某些内容或是否有任何Outlook设置可以直接打开指向excel文件的链接?

CODE:

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)。它的内容与这个电子邮件正文的内容相同)

enter image description here

在电子邮件正文中,当我点击mht链接时,它会按预期打开IE:

enter image description here

但是当我点击Excel的链接时,没有任何内容打开。点击时,即使链接颜色也不会改变:

enter image description here

我如何确保excel超链接是正确的?

此电子邮件附有Excel,其内容与电子邮件正文相同。我打开了那个excel,然后点击了超链接。两个超链接的工作方式如下所示。但我想直接打开outlook的电子邮件正文中的链接(不是这样)。

enter image description here

我尽力提供尽可能多的信息。如果需要任何其他信息,请告诉我。

更新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(在仪表板excel中工作):

=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"")"

这实际上创建了一个指向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代码以创建指向Excel工作簿的超链接而不是创建指向其“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工作簿的特定表单?

2 个答案:

答案 0 :(得分:6)

指向特定Excel工作表的超链接:

File:///c:\yourPath\yourFileName.xlsm#yourSheetName!A1

这可以在Outlook电子邮件中使用。点击该链接会在工作表c:\yourPath\yourFileName.xlsm上打开yourSheetName,然后选择单元格A1

<子>(Source

到UNC(网络)路径的超链接:

(我无法测试这些,但这些方法中的一种或两种都应该有效。)

  

文件://///server/path/to/file.txt

斜杠!)

  

文件://server/path/to/file.txt

<子>(Source

HTML Mail中的超链接:

如果电子邮件是HTML格式,另一种可能性就是这样(可能包括像 ToolTip 等更高级的格式化):

&#13;
&#13;
  <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>
&#13;
&#13;
&#13;

<子>(Source

编辑:

好的,到目前为止,您已经很好地收集了信息,所以我曾希望在几天之内您可以做更多的研究和数据它......:)

老实说,我不确定执行您需要执行的步骤的确切方法,但我知道 I 采取查找<的步骤 / strong> - 根据我的经验,很难预测这个过程需要多长时间,无论问题的简单性或复杂性如何。

因此,基于Stack Overflow&#34; 可以帮助您解决具体问题;不为你做的工作&#34;校长,我将分享我接下来要采取的步骤,向我们提供您所学内容的最新信息,询问您遇到的具体问题,并在完成所有工作后明确发布工作解决方案,以帮助他人谁遇到同样的具体问题。 :-)

  

编码(特别是使用Office)的一个美妙之处在于它   几乎总是有多种(完全不同的)完成方式   相同的最终结果。有些方法会更适合   特定任务比其他任务,其他任务可以完全   互换。

     

决定使用哪种方法可能会受到很多因素的影响   (一些显而易见的,一些无法预料的),如项目规模,安全性   要求,开发人员的知识水平和最终用户   截止日期,使用频率和/或需要根本   变化,等等。因此,最好的人决定你是谁   显影剂。

其他人(包括我)在这样的网站上提供的任何提示或代码都将基于我们可能甚至没有意识到我们正在做的假设,因为没有人知道整个情况&#34;比你好。 ( Askers &amp; Answerers 经常无法实现 XY Problem 造成的断开连接。)

我的观点: 开发执行任务的代码段的一个常见步骤是废弃您拥有的内容并重新开始。 (当然我不是唯一一个那样做的人,对吧?!)

通过电子邮件将静态每日报告作为附件发送给多个收件人&#39; sooo 1997&#39;!

......这有很多原因,这是一个不好的做法。对于初学者来说,它浪费了带宽存储空间(有点像为你家中的每台电视制作 Home Alone 3 的单独VHS副本)但你可以可能也会想到其他原因(一个很重要的原因是 它不起作用 。)

如果我理解正确,你打开一个文件,将两个链接放入该文件的单元格中,关闭它,将相同的链接放在电子邮件正文中,然后将其发送给一群人? / p>

编码的一个主要目的是删除重复/冗余任务或&#34;事物&#34; 完全,而不仅仅是自动化你的处理

哦,男人 ,告诉我没有人将每个人保存在一个日期为文件名的文件夹中,以供历史记录使用。而且,我希望每个用户都不会单独这样做。还有一些人每天打印报告?当然不是...... (我回到以前的政府工作!)

根据我认为的最终目标,您应该完全忘记发送电子邮件,将文件发布到共享位置并共享链接。这可以是内部网络上的共享位置,或者如果每个人都无法访问网络,则可以使用公共文件共享位置(OneDrive是许多免费选项之一)。

这样:

  • 您只需与任何需要访问权限的人共享 链接 (仅限一次!)。

  • 您肯定知道每个人都在查看相同的版本。

  • 您可以根据需要经常或稍微更新,甚至可以不经常更新,或者在必要时立即删除文件。 (&#34;糟糕的是我们今天早上发出的一个错误!现在每个人都停止看它了!&#34;)

  • 您可以在需要时添加/删除权限。也许一些用户可以从修改文件的能力中受益,而其他用户则不应该被允许。 (倾向于第二种选择,除非第一种选择是有益的。)

  • 如果有人打印文件,请让它们停止!整个社会有理由接近无纸化。除了保存树木之外,还有一些相同的原因适用于为什么拥有同一文件的多个副本,只会因为不正确的纸质副本更难而删除。

还有很多其他好处......但这只是一个选择。你给了你的分配方法想法一个好的镜头&amp;试图让它工作(就像你的其他人一样),但有时候对不同问题的正确答案。

通过花一些时间谷歌搜索变体来获得更多的想法:

  • 如何与他人分享图表

  • 共享文件的安全性

  • 类似的公司xyz如何分发报告?

  • 在公共网络上共享机密Excel数据

  • 为什么通过电子邮件发送每日报告不好

  • 商业电子邮件礼仪

  • 如何避免收件人超载

  • 创建&amp;分发人们将想要阅读的报告

...等...

或者,我可能在完全错误的轨道上找到了为什么/何时/如何/在哪里/那些人,但是我所拥有的只是我所拥有的一切。&#39 ;了解你的问题。

答案 1 :(得分:3)

不要使用实际上是公式的HYPERLINK,而只需向单元格添加一个真正的超链接:

objXs.Cells(2,2).Hyperlinks.Add objXs.cells(2,2), strExcelLink, "Sheet1!A1", "My Screentip", "EXLLINK"