Pot*_*toツ 8 excel outlook vba excel-vba outlook-vba
背景:
我应该使用vbscript创建一个仪表板(在excel中)并通过电子邮件(outlook)发送给某人.我已经有了仪表板的模板(excel).我的脚本打开了该模板excel,使用今天的结果更新Excel以及一些新文件的超链接,创建一个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
Run Code Online (Sandbox Code Playgroud)
截图:
这是我收到的电子邮件.你可以看到,它有2个链接和一个excel文件作为附件(这个附加的excel是我的仪表板(test.xlsx).它的内容与这个电子邮件正文的内容相同)
在电子邮件正文中,当我点击mht链接时,它会按预期打开IE:
但是当我点击Excel的链接时,没有任何东西打开.点击时,即使链接颜色也不会改变:
我如何确保excel超链接是正确的?
此电子邮件附有Excel,其内容与电子邮件正文相同.我打开了那个excel,然后点击了超链接.两个超链接的工作方式如下所示.但我想直接打开outlook的电子邮件正文中的链接(不是这样).
我试图提供尽可能多的信息.如果需要任何其他信息,请告诉我.
更新1:
这是@garbb要求的电子邮件正文源代码
Run Code Online (Sandbox Code Playgroud)<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中工作):
Run Code Online (Sandbox Code Playgroud)=HYPERLINK("C:\Users\Gurman\Work\Misc\Excel Hyperlink in Outlook\MHTFile.mht","MHTLINK")EXLLINK(在仪表板excel中工作):
Run Code Online (Sandbox Code Playgroud)=HYPERLINK("[C:\Users\Gurman\Work\Misc\Excel Hyperlink in Outlook\EXLFile.xlsx]Sheet1!A1","EXLLINK")在Outlook中,如Update 1中的电子邮件源所示,链接为:
MHTLINK(在电子邮件正文中工作):
Run Code Online (Sandbox Code Playgroud)<a href="file:///C:\Users\Gurman\Work\Misc\Excel%20Hyperlink%20in%20Outlook\MHTFile.mht">MHTLINK</a>EXLLINK(不在电子邮件正文中工作):
Run Code Online (Sandbox Code Playgroud)<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"")"
Run Code Online (Sandbox Code Playgroud)
这实际上创建了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>
Run Code Online (Sandbox Code Playgroud)
上面的链接似乎是不正确的,因为它有像一些十六进制值%5b,%5d等等.因此,它不是直接工作.
如果我更改我的VBScript代码只创建一个指向Excel工作簿的超链接而不是创建一个指向它的"Sheet1"的超链接,它工作正常,我也可以直接从电子邮件打开Excel工作簿链接.
VBscript中更新的行:
objXs.Cells(2,2) = "=HYPERLINK("""&strExcelLink&""",""EXLLINK"")"
Run Code Online (Sandbox Code Playgroud)
在电子邮件源中,它已转换为:
<a href="file:///C:\Users\Gurman\Work\Misc\Excel%20Hyperlink%20in%20Outlook\EXLFile.xlsx">EXLLINK</a>
Run Code Online (Sandbox Code Playgroud)
我可以直接从电子邮件中使用此链接打开excel工作簿.但这种方法的缺陷是在这种情况下它可能会或可能不会打开Sheet1.只要有人点击超链接,可能会打开Sheet2而不是Sheet1.因此,我想在我的代码本身处理这个问题.
所以,我的问题仍然没有解决:
是否可以在Outlook的电子邮件正文中使用超链接打开excel工作簿的特定表单?
文件:/// C:\ yourPath\yourFileName.xlsm#yourSheetName A1
这可以在Outlook电子邮件中使用.单击该链接将c:\yourPath\yourFileName.xlsm在工作表上打开yourSheetName并选择单元格A1.
(来源)
(我无法测试这些,但这些方法中的一个或两个都应该有效.)
文件://///server/path/to/file.txt
(那是五条斜线!)
要么
文件://server/path/to/file.txt
(来源)
另一种可能性,如果电子邮件是HTML格式,将是这样的(可能包括像工具提示等更高级的格式化):
<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>Run Code Online (Sandbox Code Playgroud)
(来源)
好的,到目前为止你在收集信息方面做得很好,所以我曾希望在几天后你会做更多的研究并弄明白...... :)
老实说,我不知道这样做,你需要做的步骤的确切正确的方法,但我知道的步骤我将采取以找出 -而根据我的经验,这是很难预测多少时间过程将采取,无论简单或复杂的问题似乎.
因此,基于Stack Overflow的" 帮助您解决具体问题;不为您做工作 "的主要内容,我将分享我接下来要采取的步骤,向我们提供您所学内容的最新信息,询问您遇到的具体问题,以及一旦弄明白,一定要发布工作解决方案,以帮助遇到同样问题的其他人.:-)
编码(特别是使用Office)的一个美妙之处在于,几乎总有多种(完全不同的)方法来实现相同的最终结果.有些方法比其他方式更适合于特定任务,有些方式可以完全互换.
决定使用哪种方法会受到很多事情的影响(一些显而易见的,一些无法预料的事情),例如项目规模,安全要求,开发人员和最终用户的知识水平,截止日期,使用频率和/或需要进行根本性改变,等等.因此,最好的人选,是你,开发人员.
其他人(包括我)在这样的网站上提供的任何提示或代码都将基于我们可能甚至没有意识到我们正在做的假设,因为没有人比你更了解"整体情况".(Askers&Answerers经常不会意识到XY问题导致的断开.)
我的观点: 开发一段代码来执行任务的一个常见步骤是废弃你拥有的东西并重新开始. (当然,我不是唯一一个这样做的人,对吗?!)
......这有很多原因,这是一个不好的做法.对于初学者来说,这是浪费带宽和存储空间(有点像为你家中的每台电视制作单独的家庭单独3的 VHS副本),但你也可以想到其他原因(一个很大的原因是它不起作用.)
如果我理解正确,你打开一个文件,将两个链接放入该文件的单元格中,关闭它,将相同的链接放在电子邮件正文中,并将其发送给一群人?
编码的主要目的是去除重复/冗余的任务或"东西" 完全,不只是自动的处理他们的.
哦,伙计,告诉我没有人将每个人保存在一个日期为文件名的文件夹中,以供历史记录使用.而且,我希望每个用户都不会单独执行此操作.还有一些人打印每天的报告呢?当然不是...... (我正在回到以前的政府工作!)
基于我认为您的最终目标,您应该忘记完全通过电子邮件发送,将文件发布到共享位置并共享链接.这可能是内部网络上的共享位置,或者如果每个人都无法访问网络,则可以使用公共文件共享位置(OneDrive是众多免费选项之一).
您只需与任何需要访问的人共享一个链接(仅一次!).
你肯定知道每个人都在看同一个版本.
您可以根据需要经常或稍微更新,甚至可以不经常更新,或者在必要时立即删除文件. ("哎呀我们今天早上发出的那个上面出现了一个重大错误!现在每个人都停止看它!")
您可以在需要时添加/删除权限.也许某些用户可以从修改文件的能力中受益,而其他用户则不应该被允许.(倾向于第二选择,除非第一选择是有益的.)
如果有人打印文件,请让它们停止!整个社会有理由接近无纸化.除了保存树木之外,一些相同的原因也适用于为什么不拥有相同文件的多个副本,只是因为不正确的纸质副本更难以删除.
还有很多其他好处......但这只是一个选择.你给了你的分配方法想法一个很好的镜头,并试图让它工作(就像你的其他人一样),但有时是对不同问题的正确答案.
通过花一些时间谷歌搜索变化获得更多的想法:
如何与他人分享图表
共享文件的安全性
类似的公司xyz如何分发报告?
在公共网络上共享机密Excel数据
为什么通过电子邮件发送每日报告很糟糕
企业电子邮件礼仪
如何避免收件人超载
创建和分发人们想要阅读的报告
...等等...
.
或者,我可能在完全错误的轨道上找到了为什么/何时/如何/在哪里/谁是谁,但这就是我对你所知道的问题的全部了解.
无需使用HYPERLINK实际上的公式,只需向单元格添加一个真正的超链接即可:
objXs.Cells(2,2).Hyperlinks.Add objXs.cells(2,2), strExcelLink, "Sheet1!A1", "My Screentip", "EXLLINK"
Run Code Online (Sandbox Code Playgroud)