VBScript не удается открыть гиперссылки на лист excel (не всю книгу) из тела электронной почты outlook напрямую

Справочная информация:

я должен создать панель мониторинга (в excel) с помощью vbscript и отправить ее по электронной почте(outlook) кому-то. У меня уже есть шаблон для панели мониторинга(excel). Мой скрипт открывает этот шаблон excel, обновляет Excel с сегодняшними результатами и некоторыми гиперссылками на некоторые новые файлы, создает конверт excel mail и отправляет его кому-то.

вопрос:

мой скрипт добавляет 2 ссылки в панель мониторинга excel. 1-я ссылка указывает на файл mht и 2-я ссылка указывает на другой файл excel. Я отправил письмо себе и открыл его. После открытия электронной почты, когда я нажимаю на 1-ю ссылку (на файл mht), она отлично работает и открывает IE для отображения содержимого файла mht. Проблема заключается в 2-й гиперссылке, которая указывает на файл excel. Он не открывает файл excel(я убедился, что ссылка верна).

есть ли что-то, что мне нужно изменить в моем коде или есть какой-либо outlook настройка, которая позволит мне открыть ссылку на файл excel напрямую?

код:

Option Explicit
Dim objXL, objXb, objXs, strXlPath, strMHTLink, strExcelLink

'Dashboard Excel template
strXlPath = "C:UsersGurmanWorkMiscExcel Hyperlink in Outlooktest.xlsx"

'Link to MHT file
strMHTLink = "C:UsersGurmanWorkMiscExcel Hyperlink in OutlookMHTFile.mht"

'Link to another Excel File
strExcelLink = "C:UsersGurmanWorkMiscExcel Hyperlink in OutlookEXLFile.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 - моя панель мониторинга (тест.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:UsersGurmanWorkMiscExcel%20Hyperlink%20in%20OutlookMHTFile.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

вот как обе формулы гиперссылки отображаются в панели мониторинга Ячейках Excel:

MHTLINK (работает из панели инструментов excel):

=HYPERLINK("C:UsersGurmanWorkMiscExcel Hyperlink in OutlookMHTFile.mht","MHTLINK")

EXLLINK (работает из панели инструментов excel):

=HYPERLINK("[C:UsersGurmanWorkMiscExcel Hyperlink in OutlookEXLFile.xlsx]Sheet1!A1","EXLLINK")

в Outlook, как показано в источнике электронной почты в обновлении 1, ссылки:

MHTLINK (работает из тела электронной почты):

<a href="file:///C:UsersGurmanWorkMiscExcel%20Hyperlink%20in%20OutlookMHTFile.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"")"

это фактически создает гиперссылку на Sheet1 книги Excel. Формула, которая записывается в этой ячейке, также является правильной, которая =HYPERLINK("[C:UsersGurmanWorkMiscExcel Hyperlink in OutlookEXLFile.xlsx]Sheet1!A1","EXLLINK"). Это важно для меня добавить Sheet1!A1 в этой формуле, поскольку я хочу, чтобы гиперссылка указывала на конкретный лист (Лист1 в этом случае) книги

проблема возникает, когда эта формула EXCEL преобразуется в ссылку в OUTLOOK MAIL, ее значение становится:

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

приведенная выше ссылка кажется неправильной, поскольку она имеет некоторые шестнадцатеричные значения, такие как %5b, %5d etc. Следовательно, он не работает напрямую.

если я изменю код VBScript для создания гиперссылки на книга Excel только вместо того, чтобы создавать гиперссылку на ее "Sheet1", она отлично работает, и я также могу открыть ссылку на книгу excel непосредственно из электронной почты.

обновленная строка в VBscript:

objXs.Cells(2,2) = "=HYPERLINK("""&strExcelLink&""",""EXLLINK"")"

в источнике электронной почты он был преобразован в:

<a href="file:///C:UsersGurmanWorkMiscExcel%20Hyperlink%20in%20OutlookEXLFile.xlsx">EXLLINK</a>

я могу открыть книгу excel, используя эту ссылку непосредственно из электронной почты. Однако недостатком этого подхода является то, что он может или не может открыть Лист1 в этом случае. Как только кто-то нажмет на кнопку гиперссылка, может быть, Sheet2 открывается вместо Sheet1. Следовательно, я хотел обработать эту вещь в своем коде.

Итак, мой вопрос / вопрос все еще остается нерешенным:

возможно ли иметь гиперссылку в теле электронной почты Outlook, которая открывает конкретный лист книги excel?

2 ответов


вместо HYPERLINK который на самом деле является формулой, просто добавьте реальную гиперссылку на ячейку:

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

гиперссылка на конкретный лист Excel:

:///С:\yourPath\yourFileName.xlsm#yourSheetName!А1

это можно использовать в электронной почте Outlook. При нажатии на ссылку откроется c:\yourPath\yourFileName.xlsm на листе yourSheetName и выберите ячейку A1.

(источник)


гиперссылка на UNC (сетевой) путь:

(Я не могу проверить эти, но один или оба этих метода должны работа.)

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

(это пять слеши!)

или

файл://сервер/путь / к / файлу.txt

(источник)


гиперссылка в HTML почте:

другая возможность, если электронная почта находится в формате HTML, будет что-то вроде этого (что может включать более причудливое форматирование как подсказки, etc):

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

(источник)


Edit:

ОК, вы проделали хорошую работу по сбору информации до сих пор, так я надеялся, что через пару дней вы проведете еще несколько исследований и выясните это... :)

честно говоря, я не уверен в точном правильном методе для выполнения шагов, которые вам нужно сделать, но я знаю шаги это я примет узнать -- и основываясь на моем опыте, трудно предсказать, сколько времени займет процесс, независимо от того, простой или сложной проблемой кажется.

таким образом, на основе переполнения стека "помочь вам с конкретными вопросами; не делать работу за вас" директор, я поделюсь шагами, которые я бы сделал дальше, Дайте нам обновления о том, что вы узнаете, задайте конкретные вопросы о том, с чем вы сталкиваетесь, и определенно опубликуйте рабочее решение после того, как все это выяснить, чтобы помочь другим, которые сталкиваются с той же конкретной проблемой. :-)

красивая вещь с кодированием (особенно с офисом) заключается в том, что есть почти всегда несколько (совершенно разных) способов достижения тот же конечный результат. Некоторые из способов лучше подходят для конкретные задачи, чем другие, другие могут быть полностью сменный.

на решение о том, какой метод использовать, может повлиять много вещей (некоторые очевидные, некоторые непредвиденные), такие как масштаб проекта, Безопасность требования, уровень знаний как разработчика , так и конечного пользователя, сроки, как часто он будет использоваться и/или потребуются фундаментальные изменения, и так далее. Поэтому лучше всего решать вам, разработчик.

любые советы или код, предоставленные другими (включая меня) на таком сайте, будут основаны на предположениях, которые мы, возможно, даже не осознаем, что делаем, так как никто не знает "всю ситуацию" лучше вас. (Askers & ответами часто не будет осознавать разъединение, вызванное проблема по XY.)

моя точка зрения: общий шаг в разработке раздела кода для выполнения задачи-выбросить то, что у вас есть, и начать все сначала. (конечно, я не единственный, кто делает это, правильно?!)


отправка статического ежедневного отчета нескольким получателям в виде вложения 'sooo 1997'!

...и есть много причин, по которым это плохая практика. Для начала, это пустая трата полосы пропускания и место для хранения (немного похоже на создание отдельных копий VHS Один Дома 3 для каждого телевизора в вашем доме), но вы, вероятно, можете подумать и о других причинах (большой, что это не работает.)

если я правильно понимаю, вы открываете файл, помещаете две ссылки в ячейки в этом файле, закрываете его, помещаете те же ссылки в тело письма и отправляете его кучке людей?

основной целью кодирования является удаление повторяющихся / избыточных задач или" вещей"полностью, а не просто для автоматизации обработка из них.

черт, скажите мне, что никто не сохраняет каждый из них в папке с датой в качестве имени файла для исторических записей. И omg, я надеюсь, что каждый пользователь не делает это отдельно. И некоторые люди печатают отчеты каждый день? Конечно, нет... (у меня есть воспоминание о бывшей правительственной работе!)

основываясь на том, что я думаю ваша конечная цель, вы должны забудьте о электронной почте вообще, разместить файл(Ы) В общем месте и поделиться ссылкой. Это может быть общее расположение во внутренней сети, или если у всех нет доступа к сети, то общедоступное расположение общего доступа к файлам (OneDrive-один из многих бесплатных вариантов).

таким образом:

  • вам нужно только поделиться ссылке (только один раз!) с тем, кому нужен доступ.

  • вы уверены, что все смотрят на то же версия.

  • вы можете обновлять так часто или мало, как это необходимо, даже беспорядочно, или снять файл мгновенно, если это необходимо. ("Ой, на том, что мы послали сегодня утром, была большая ошибка! Все прекратите смотреть на него!")

  • вы можете добавлять/удалять разрешения, когда это необходимо. Возможно, некоторые пользователи могут воспользоваться возможностью изменения файла, в то время как другие не должны быть разрешены. (Склоняюсь к 2-м вариант только 1-го-это выгодно.)

  • если кто-то печатает файл, остановите их! Есть причины, что общество в целом близка к безбумажной. Помимо сохранения деревьев, некоторые из тех же причин, почему не иметь несколько копий одного и того же файла, только хуже, так как неправильные бумажные копии еще сложнее удалить.

есть много других преимуществ... но это только одна выбор. Вы дали своей идее метода распространения хороший снимок и попытались заставить ее работать (как и другие для вас), но иногда правильный ответ на другой вопрос.

получите еще несколько идей, потратив некоторое время на поиск вариантов:

  • как поделиться диаграммой с другими

  • безопасность общих файлов

  • как подобная компания xyz распределяет отчеты?

  • обмен конфиденциальными данными Excel в общедоступных сетях

  • почему это плохо, чтобы по электронной почте ежедневные отчеты

  • деловой этикет электронной почты

  • Как избежать перегрузки получателей

  • создавать и распространять отчеты людей хочу в читать

...так далее...

.

или, я могу быть на совершенно неправильном пути с почему / когда/как/где / кто, но это все, что у меня есть с тем, что я понял о вашей проблеме.