Scanning in Word 2013/2016 – Part I

[German]Microsoft has removed scanning from Word 2013/2016. This blog post describes, how to add a scan button to Word 2016 (works also in Word 2013) using a VBA-Macro.


Advertising


First of all, I need to confess, it hat been a while, since I wrote my last VBA book (Microsoft Word 97, Developer’s Kit – The technical reference, Microsoft Press Germany). So I haven’t polished the macro solution too much.

VBA, WIA, Twain, what I need to know?

Within this blog post I’m using a few technical terms. VBA stands for Visual Basic for Application, a Basic oriented programming language, available in Microsoft Office to write macros. VBA is object oriented, so it’s possible to instantiate objects from class libraries, and use methods and properties from these objects to access a scanner from applications like Word.

Microsoft Windows Image Acquisition Library v2.0 – provided in Windows 7, 8, 8.1 and 10 – enable us to access a scanner from VBA. Microsoft Windows Image Acquisition Library v2.0 provides a class library useable from VBA. But this requires that the WIA interface is supported in Windows – which means: The scanner vendor needs to provide compatible WIA drivers for the used Windows version.

The TWAIN interface supported from several scanner vendors isn’t suitable for our purposes. There is a mdlTwain library available at http://lmik.sweb.cz/mdlTwain.zip and within my German blog post is a comment with a code snippet to access a TWAIN scan interface.

A brief introduction to WIA scan

The VBA macro introduced here enables Word 2013 or Word 2016 to initiate a scan via a push button using the WIA interface. If several WIA sources are present, Windows asks to select a WIA device (iPad, Digicam, and Scanner for instance).

Selecting a device and confiming OK button invokes the WIA dialog box to access a scanner.

Within this dialog box we can select scan options and do a preview scan. Using the scan button invokes a scan, stores the scan into a temporary image file (jpeg) and inserts the scan into word at the current text cursor position.

Not supported are multi page scans, because I don’t have such a device – and it seems, that WIA doesn’t support this feature. Multi page scans are dicussed here – maybe it’s helpful for further reading.

BTW: The dialog boxes shown above are still in German, because I use a German Windows 10 – and it seems there are conflicts between Windows language packs and Office 2016 language packs. I wasn’t able to switch my Windows 10 account the English, although this has been the default language before I installed Office 2016 with multiple languages.

Invoke the VBA development environment

Now it’s time to invoke the VBA development environment in Word 2016 (it works also in Word 2013).

1. Go to View tab, and select Macros – View Macros.

2. Select Normal.dotm (global template) in Macros in, add a macro name “Scan” into Macro name text box, enter an optional description and hit the Create button.

The Visual Basic development environment with an empty macro “Scan” might be visible (see below).

Important: Set a reference to WIA library

Before we enter the macro code, it’s important, to create a reference to the WIA class library used in VBA.

1. Opens Tools menu an select command References.

2. Check Microsoft Windows Image Acquisition Library v2.0 in dialog box References and confirm OK button.

Then the library wiaaut.dll will be referenced within the VBA project, so we can access the classes provided by this DLL.

Add the macro code

After rerencing the WIA library, we are ready to insert the necessary VBA code into the Scan() module. I’ve prepared the following VBA code for this purposes.

' Scan for Word 2013/2016
' Author: Günter Born www.borncity.de www.borncity.com/blog
' Implements a Scan function in Word 2013/2016

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
      
     ' set temporary file
     strDateiname = Environ("temp“) & "\Scan.jpg“
     
     If Not objImage Is Nothing Then
       Kill strDateiname 'delete old file
       ' save into temp file
       objImage.SaveFile strDateiname 
       ' insert into document
       Selection.InlineShapes.AddPicture strDateiname 
       Set objImage = Nothing
     End If
     Set objCommonDialog = Nothing
 
   ' MsgBox strDateiname  ' test output
End Sub

The code invokes the WIA dialog box, calculates the path to a temporary user profile folder, invokes the scan function, stores the scan as an JPEG image and insert the scan image into the Word document.

You can cute an paste the macro code shown above into the code windows. Or you can download the file ScanV2.zip, unzip the ZIP archive and import the .BAS file into the VBA editor windows using menu command File/Import.

After pushing the Save as button you may close the VBA development environment window.

Articles:
Scanning in Word 2013/2016 – Part I
Scanning in Word 2013/2016 – Part II

How to add a scan function to Word 2013
Scanning in Word 2013


Advertising



This entry was posted in Office and tagged , , . Bookmark the permalink.

15 Responses to Scanning in Word 2013/2016 – Part I

  1. Treeant34 says:

    Could you break this out a lot more; for someone that has zero VBA or Macro creating skills?

    I just want to be able to use my scanner in Word 2013

    Unfortunately the bozos at Micro$oft don’t take the end users into consideration ever.

  2. Ron Visser says:

    I used your VBA code but my problem is it scans in legal paper format .
    My question ” Is it possible to set the scanner in A5 paper format before scan ,
    And add then the jpg to my document .

    • guenni says:

      Sorry, till now I haven’t found a way to change the paper format via the WIA API. But it could be my fault – I created the solution as a “quick & dirty” template (reusing my ‘rusty’ VBA knowlegde from 2000).

      • Ron Visser says:

        Thanks for the information.
        I will google to find a sollution.
        Till now i find anything that is usefull.

  3. D Hardisty says:

    Seems very, unnecessarily, complicated – I have a macro scanner in word 2013 which, unfortunately does not work in Word 2016

  4. Carlos Ferreira says:

    I got this message error:
    Compile error:
    Syntax error

    strDateiname = Environ(“temp“) & “\Scan.jpg”

    thank you

  5. Vincent says:

    Super !
    Cela fonctionne parfaitement.
    Un grand merci.

  6. Danny says:

    You were right about the quotes – Word replaced the apostrophes with opening single quotes. I had to use “Insert Symbol” from the menu to make it stop autocorrecting this, but I got it corrected before I tried to copy and paste into the macro, so it wasn’t a debugging hassle. Also, for those who don’t know any programming at all, you have to replace the automatically generated text in the macro — “Sub Scan()” and “End Sub” should only appear once when you’re done. I fixed it at once, and it worked on the first try. Thank you very much for sharing!

  7. Christopher says:

    Anybody knows the code to add duplex scanning?

  8. Salmon Petrus says:

    Scan result bigger than original image size.
    In my case, ID Card
    What is the code to scan in original size ?

    Right now, I use macro as below:

    Sub InsertScanPicSetWrapBehind()
    Dim shp As Shape
    On Error Resume Next
    WordBasic.InsertImagerScan
    Set shp = ActiveDocument.InlineShapes(ActiveDocument.InlineShapes.Count).ConvertToShape
    With shp
    .WrapFormat.Type = wdWrapBehind
    End With
    Set shp = Nothing
    End Sub

    Thank you

    • Alan Stinchcombe says:

      Unfortunately, WordBasic.InsertImagerScan was removed from Word 2013 & 2016.

  9. Alan Stinchcombe says:

    Why would Microsoft imagine that users:
    (1) would no longer want to be able to scan into a document?
    (2) would not want to be able to interact with the full range of scanner settings?

    Ho hum!

Leave a Reply

Your email address will not be published. Required fields are marked *