Шапка

IPTV, Kачественный сервер шаринга, Большой выбор пакетов, Предложение для диллеров, Доступные цены  http://shara.club

Девиз

Прежде, чем бороться за крупные проблемы, нужно многое выяснить в деталях.
(Йохан Хёйзинга)

четверг, 16 января 2014 г.

Делаем кнопку сканера в Word 2010, 2013, 2016.


    У многих есть сканер под рукой, есть Word 2010, 2013, 2016, но нет способа отсканировать изображение  и сразу получить его на странице. Почему же так получилось? Ведь раньше работа со сканером была в Word.. Майкрософт рекомендует нам использовать отдельную программульку из средств Office "Организатор клипов".

Мы так делать не будем.  :-)
Мы  
      напишем простой макрос для сканирования, 
                  сделаем кнопку для него и, мало того, 
                                   еще и подпишем наш макрос цифровой подписью!

Даже те, кто не знает, что это такое, быстро все усвоят. Вперед!

1  Пишем макрос.
  • Итак, открываем Word, заходим в "Файл->Параметры->Настройки ленты"
  • Включаем вкладку "Разработчик" в окне справа, поставив галку
  • Закрываем настройки ленты. В появившейся вкладке "Разработчик" жмем кнопку "Макросы" (слева вторая), откроется мастер добавления нового макроса
  • Внизу в окне "Макросы из:" выбираем макросы из Normal.dot (общего шаблона) для того чтобы и в других документах он был
  • Жмем "Создать", откроется редактор VisualBasic
  • Заменяем этим кодом все строчки 
                  
                  Для Word 2010 код такой: 

Sub InsertFromScanner()
On Error Resume Next
WordBasic.InsertImagerScan
End Sub



Для Word 2013,2016 код такой (для 64х см. комментарий в начале): 

' Scan for Word 2013
' Author: Gu "nter Born www.borncity.de blog.borncity.com"
' Implements a Scan function in Word 2013

' ----------------------
' For 64-bit app need declare with 
PtrSafe key:
' Private Declare PtrSafe Function GetTempPath Lib "kernel32"....

 Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

Private Function TempPath() As String
Const MaxPathLen = 256 ' Max path length
Dim FolderName As String ' Folder name
Dim ReturnVar As Long ' Return Value
FolderName = String(MaxPathLen, 0)
ReturnVar = GetTempPath(MaxPathLen, FolderName)
If ReturnVar <> 0 Then
TempPath = Left(FolderName, InStr(FolderName, Chr(0)) - 1)
Else
TempPath = vbNullString
End If
End Function

Sub Scan()
'
' Scan Macro, to be invoked in Word
'
On Error Resume Next
Dim objCommonDialog As WIA.CommonDialog
Dim objImage As WIA.ImageFile
Dim strDateiname
' instantiate Scan WIA objects
Set objCommonDialog = New WIA.CommonDialog
Set objImage = objCommonDialog.ShowAcquireImage
strDateiname = TempPath & "Scan.jpg" ' set temporary file
If Not objImage Is Nothing Then
Kill strDateiname
objImage.SaveFile strDateiname ' save into temp file
Selection.InlineShapes.AddPicture strDateiname ' insert in doc
Set objImage = Nothing
End If
Set objCommonDialog = Nothing
' MsgBox strDateiname  ' test output
End Sub


Что бы избежать ошибки при компиляции, нужно подключить библиотеку Microsoft WIA (в меню: Tools/Preferences), выделенная строка на рисунке ниже:
 



жмем  "Сохранить" и закрываем редактор.

2 Делаем кнопку.
Далее нам нужно добавить кнопку вызова макроса на панель, для быстрого доступа к ней. Для этого:
  • Заходим снова в настройки ленты, жмем кнопку "Создать вкладку", и жмем кнопку "Создать группу". Можете переименовать их по своему выбору, у меня -  "Разное".
  • В левой панели "Выбрать команды:"  ищем "макросы" и добавляем наш созданный макрос в новую пользовательскую группу.
Все. Жмем ок. Теперь при открытии вкладки "Разное" у вас есть вот такая кнопка:

Теперь кнопка может работать. Но может и ругнуться, если у вас отключены макросы в политике безопасности. Откройте "Разработчик->Безопасность макросов" и можете включить макросы как на рис. (стрелка 3.)


 Все, "Кнопка" работает!
Но так оставлять не рекомендуется!
А для тех кому немного важна безопасность, следующий пункт.

3. Сертифицируем для локального пользователя.
Но пойдем дальше и отключим "все макросы, кроме макросов с цифровой подписью"!
Приступим:
Опять открываем "Разработчик->Visual Basic", в меню ищем "Tools->Digital signature..", откроется окошко "Цифровая подпись", как видите там пусто.


Нажав выбор, видим:
Это потому, что на компьютере нет пользовательских сертификатов для VBA проектов MS Office.
Надо бы сделать…
Запускаем "Средство создания цифровых сертификатов для проектов VBA" из пакета программ MS Office. Запускаем и создаем сертификат, я его назвал "Local VBA cert".
(Примечание: если данное средство недоступно, воспользуйтесь программой
 "C:\Program Files\Microsoft Office\Office15\SELFCERT.EXE " или
"C:\Program Files\Microsoft Office\root\Office16\SELFCERT.EXE")

В меню "Tools->Digital signature..", в окошке "Цифровая подпись" жмем кнопку "Выбрать".

Вуаля, найдется наш сертификат:

Казалось бы все, но нет! Жмем "подробности" в окне "Цифровая подпись" и убеждаемся, что доверия к сертификату пока нет:


 Будем делать так, как подсказывает наша совесть - доверять. Жмем Win+R и запускаем оснастку управления сертификатами "certmgr.msc" .
Открываем "Личное->Сертификаты", находим наш "Local VBA cert" и копируем его в два места:
"Доверенные корневые центры сертификации" и в "Доверенные издатели".

 Теперь закрываем оснастку управления сертификатами.
Откройте "Разработчик->Безопасность макросов".
Сертификат будет виден в надежных издателях .

Можете "отключить все макросы, кроме макросов с цифровой подписью" как на рис. в пункте 2 ., если конечно уже это не сделали. :-)
Перезапускаем Word.

Все готово!

PS: если меняете что-то в коде макроса, не забывайте обновить созданную кнопку.

Комментариев нет:

Отправить комментарий