首页 文章

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

提问于
浏览
8

Background:

我应该使用vbscript创建一个仪表板(在excel中)并通过电子邮件(outlook)发送给某人 . 我已经有了Dashboard(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

Screenshots:

这是我收到的电子邮件 . 你可以看到,它有2个链接和一个excel文件作为附件(这个附加的excel是我的仪表板(test.xlsx) . 它的内容与这个电子邮件正文的内容相同)

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

But when I click on the Excel's link, nothing opens up. Even the link color doesn't change on clicking:

How I made sure that excel hyperlink is correct?

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

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

UPDATE 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”> <风格> <! - 表 {MSO的显示十进制分离器:;“\” . MSO-显示千分隔符 “\”;} .xl15 {填充顶:1px的; 填充右:1px的; 填充左:1px的; MSO的忽略:填充; 颜色:黑色; 字体大小:11.0pt; 字体重量:400; 字体风格:正常; 文字修饰:无; font-family:Calibri,sans-serif; MSO的字体字符集:0; MSO的数字格式:总则 . 文本对齐:一般; 垂直对齐:底部; MSO的背景来源:汽车; MSO模式:自动; 空白:NOWRAP;} .xl65 {填充顶:1px的; 填充右:1px的; 填充左:1px的; MSO的忽略:填充; 颜色:蓝色; 字体大小:11.0pt; 字体重量:400; 字体风格:正常; 文字装饰:下划线; 文字下划线样式:单; font-family:Calibri,sans-serif; MSO的字体字符集:0; MSO的数字格式:总则 . 文本对齐:一般; 垂直对齐:底部; MSO的背景来源:汽车; MSO模式:自动; 空白:NOWRAP;} - > </样式> <! - [if gte mso 9]> <xml> <X:ExcelWorkbook> <X:ExcelWorksheets> <X:ExcelWorksheet> <X:名称> Sheet 1中</ X:名称> <X:WorksheetOptions> <X:DefaultRowHeight> 300 </ X:DefaultRowHeight> <X:选定/> <X:窗格> <X:窗格> <X:数> 3 </ X:编号> <X:ActiveRow> 8 </ X:ActiveRow> <X:ActiveCol> 4 </ X:ActiveCol> </ X:窗格> </ X:窗格> <X:ProtectContents>假</ X:ProtectContents> <X:ProtectObjects>假</ X:ProtectObjects> <X:ProtectScenarios>假</ 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>假</ X:ProtectStructure> <X:ProtectWindows>假</ 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: 崩溃;表格的布局:固定的;宽度: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 = “文件:/// C:\用户\ GURMAN \工作\其它\ EXCEL%20Hyperlink%20英寸%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风格= '宽度:71pt'> </ TD> </ TR> <![ENDIF]> </ TABLE>

</ BODY>

</ HTML>

UPDATE 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超链接在Outlook \ EXLFile.xlsx中] Sheet1!A1”,“EXLLINK”)
在Outlook中,如Update 1中的电子邮件源所示,链接为:MHTLINK(在电子邮件正文中工作):<a href =“file:/// C:\ Users \ Gurman \ Work \ Misc \ Excel%20Hyperlink% 20英寸%20Outlook \ MHTFile.mht“> MHTLINK </A>
EXLLINK(不在电子邮件正文中工作):<a href="%5bC:/Users/Gurman/Work/Misc/Excel%20Hyperlink%20in%20Outlook/EXLFile.xlsx%5dSheet1!A1"> EXLLINK </a>

UPDATE 3(ISSUE ROOT CAUSE)

在我的vbscript代码中,我有一行:

objXs.Cells(2,2) = "=HYPERLINK(""["&strExcelLink&"]Sheet1!A1"",""EXLLINK"")"

这实际上创建了一个Excel书的 Sheet1 的超链接 . 在这个单元格中写入的公式也是正确的,这是 =HYPERLINK("[C:\Users\Gurman\Work\Misc\Excel Hyperlink in Outlook\EXLFile.xlsx]Sheet1!A1","EXLLINK") . 对我来说,在此公式中添加 Sheet1!A1 非常重要,因为我希望超链接指向工作簿中的特定工作表(在本例中为Sheet1)

当这个EXCEL公式转换为OUTLOOK MAIL中的链接时,问题就出现了,它的 Value 变为:

<a href="%5bC:/Users/Gurman/Work/Misc/Excel%20Hyperlink%20in%20Outlook/EXLFile.xlsx%5dSheet1!A1">EXLLINK</a>

上面的链接似乎不正确,因为它有一些HEX值,如 %5b ,_ _118603_等 . 因此,它不能直接工作 .

如果我更改我的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 . 因此,我想在我的代码本身处理这个问题 .

所以,我的问题仍然没有解决:

Is it possible to have a hyperlink in Outlook's email body which opens up a particular sheet of an excel workbook?

2 回答

  • 3

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

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

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

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

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

    (资源)


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

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

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

    (这是五个斜线!)

    要么

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

    (资源)


    HTML邮件中的

    超链接:

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

    <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>
    

    (资源)


    编辑:

    好的,到目前为止你在收集信息方面做得很好,所以我曾希望在几天后你会做更多的研究并弄明白...... :)

    老实说,我不确定完成你需要做的步骤的确切方法,但我知道我会采取的步骤 to find out - 根据我的经验,很难预测这个过程将花费多少时间无论简单还是复杂,问题似乎都是如此 .

    因此,基于Stack Overflow的“帮助你解决具体问题;不为你工作”这个校长,我全都想出来,帮助其他遇到同样问题的人 . :-)

    编码(特别是Office)的一个美妙之处在于,几乎总是有多种(完全不同的)方法来实现相同的最终结果 . 有些方法比其他方式更适合于特定任务,有些方式可以完全互换 . 决定使用哪种方法会受到很多事情的影响(一些显而易见的,一些无法预料的事情),例如项目规模,安全要求,开发人员和最终用户的知识水平,截止日期,使用频率和/或将需要基本的变化,等等 . 因此,最好的人决定你是开发人员 .

    其他人(包括我)在这样的网站上提供的任何提示或代码都将基于我们可能甚至没有意识到我们正在做的假设,因为没有人比你更了解"whole situation" . (Askers&Answerers经常不会意识到 XY Problem 造成的断开 . )

    My point: A common step in developing a section of code to perform a task is to trash what you have and start over. (当然我不是唯一一个这样做的人,对吧?!)


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

    ......有很多原因造成带宽和存储空间的浪费(有点像为你家里的每台电视制作单独的家庭单独3的VHS副本)但你也可以想到其他原因(一个很大的原因)是 it's not working . )

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

    编码的一个主要目的是完全删除重复/冗余任务或"things",而不仅仅是自动处理它们 .

    哦,伙计,告诉我没有人将每个人保存在一个日期为文件名的文件夹中,以供历史记录使用 . 而且,我希望每个用户都不会单独执行此操作 . 还有人打印每天的报告吗?当然不是......(我正在回复以前的政府工作!)

    基于我认为您的最终目标,您应该 forget about emailing altogether ,将文件发布到共享位置并共享链接 . 这可能是内部网络上的共享位置,或者如果每个人都可以访问网络,那么公共文件共享位置(OneDrive是许多免费选项之一) .

    这样:

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

    • 你肯定知道每个人都在看同一个版本 .

    • 您可以根据需要经常或稍微更新,甚至可以不经常更新,或者在必要时立即删除文件 . ("Oops there was a major mistake on the one we sent out this morning! Everybody stop looking at it now!")

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

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

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

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

    • 如何与他人共享图表

    • 共享文件的安全性

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

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

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

    • 企业电子邮件礼仪

    • 如何避免收件人超载

    • 创建和分发人们想要阅读的报告

    ...等等...

    .

    或者,我可能在完全错误的轨道上了解为什么/何时/如何/在哪里/谁是谁,但这就是我对你对你的问题所理解的一切 .

相关问题