Scannen in Word 2013

Technische Stufe : Standard

Zusammenfassung
Office 2013 bzw. Office 365 besitzen viele Funktionen. Aber weder Word noch die anderen Module unterstützen eine Scan-Funktion. Lediglich mit OneNote kann man scannen und das Ganze per Zwischenablage Word-Dokumente übertragen. Der Wiki-Beitrag zeigt, wie man eine Scan-Funktion in Microsoft Word 2013 per VBA-Makro nachrüsten kann. Voraussetzung ist, dass der Scanner unter Windows durch einen WIA-Treiber unterstützt wird. 
Details
So soll die Lösung aussehen

Zum Scannen soll eine Schaltfläche Scannen im Menüband auf der Registerkarte Einfügen des Word-Fensters zur Verfügung stehen.

Bei Anwahl dieser Schaltfläche zeigt Windows als erstes ggf. das Auswahldialogfeld für die verfügbaren WIA-Geräte (z.B. iPad, Digicam und Scanner) an - entfällt, falls nur ein WIA-Gerät vorhanden ist. Wählt der Benutzer ein Gerät und dann die OK-Schaltfläche, erscheint das WIA-Dialogfeld zur Scanner-Steuerung. Der Benutzer kann die Scan-Optionen wählen und dann das Bild über die Scannen-Schaltfläche erfassen. Das Bild wird dann nach einer temporären Zwischenspeicherung an der aktuellen Stelle im Word-Dokument eingefügt.

Anmerkung: Wie eingangs bereits erwähnt, setzt das VBA-Makro auf den WIA-Schnittstellen des Betriebssystems auf. Es ist also erforderlich, dass die Scanner bzw. Geräte durch WIA-Treiber in Windows 7, Windows 8 oder Windows 8.1 unterstützt werden. Das genau Aussehen der Dialogfelder zur Geräteauswahl und zum Scannen hängt daher von der Betriebssystemversion und den Herstellertreibern ab. Ein Beispiel mit Screenshots findet sich in folgendem Artikel.

Scannen in Word 2013 – Teil 1


VBA-Code zum Zugriff auf die WIA-Schnittstelle


Um das VBA-Makro in Word einzupflegen, ist im Menband auf der Registerkarte Ansicht die Menüschaltfläche Makros anzuwählen. Im Dialogfeld Makros ist ein Makroname (z.B. Scan) einzutragen und dann die Schaltfläche Erstellen zu wählen, um das Fenster der "Visual Basic for Applications-Entwicklungsumgebung" anzuzeigen. 

Bevor der VBA-Code im Fenster des Code-Editors eingetragen wird, empfiehlt es sich, die benötigte WIA-Bibliothek in den Verweisen einzubinden. Hinzu geht man in der VBA-Entwicklungsumgebung im Menü Extras zum Befehl Verweise. Im angezeigten Dialogfeld Verweise ist das Kontrollkästchen der Typ-Bibliothek “Windows Image Acquisition Library” zu markieren und dann die OK-Schaltfläche zu bestätigen. 

Durch diesen Schritt wird sichergestellt, dass im VBA-Makro eine WIA-Objektinstanz erzeugt und auf die Methoden und Eigenschaften zugegriffen werden kann. Im nächsten Schritt ist folgender VBA-Code im Fenster des VBA-Editors einzufügen und anschließend über die betreffende Schaltfläche der Symbolleiste zu speichern. 

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

Private Declare PtrSafe 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 length of the path, just as big as possible
 
  Dim FolderName As String ' Name of the folder
  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
'     strDateiname = "C:\Users\Public\Pictures\" & "Scan.jpg"
     
     If Not objImage Is Nothing Then
       Kill strDateiname
       objImage.SaveFile strDateiname ' save into temp file
       Selection.InlineShapes.AddPicture strDateiname ' insert into document
       Set objImage = Nothing
     End If
     Set objCommonDialog = Nothing
 
  '  MsgBox strDateiname  ' test output
End Sub

Der VBA-Code instantiiert ein WIA.CommonDialog-Objekt und ruft dann die ShowAcquireImage-Methode dieses Objekts auf. Diese gibt ein Bild als Objekt zurück, welches dann in einer Datei im Temp-Ordner des Benutzers abgelegt und anschließend mit der AddPicture-Methode in Word eingefügt wird. 

Die Schaltfläche Scannen einfügen

Nach dem Speichern des VBA-Codes und dem Schließen der Entwicklungsumgebung gilt es, die Schaltfläche Scannen in einer eigenen Gruppe Scan auf der Registerkarte Einfügen einzurichten und mit dem obigen Makro zu verbinden.
  1. Klicken Sie mit der rechten Maustaste auf das Menüband und wählen den Kontextmenübefehl Menüleiste anpassen.
  2. Wählen Sie im Dialogfeld Word-Optionen in der linken Liste Befehle auswählen den Wert “Makros”.
  3. Anschließend wählen Sie in der rechten Spalte “Menüband anpassen” den Eintrag Einfügen und expandieren diesen.
  4. Dann fügen Sie über die Schaltfläche Neue Gruppe eine Gruppe ein und benennen diese mit “Scan”.
  5. Fügen Sie mittels der Schaltfläche Hinzufügen den Eintrag Normal.NewMacros.Scan zur rechten Liste im Zweig Scan hinzu.
  6. Benennen Sie den Eintrag mit Scannen und weisen Sie im geöffneten Dialogfeld ein Schaltflächensymbol hinzu.
Sobald Sie das Dialogfeld über die OK-Schaltfläche schließen, sollte das VBA-Makro durch Anwahl der Schaltfläche Scannen aufrufbar sein. Es sollten die Scan-Dialogfelder erscheinen und Sie können den Scan vornehmen und in Word im Dokument einfügen. Je nach Sicherheitseinstellungen muss aber die Ausführung von lokalen Makros in Word zugelassen werden. Weiter Hinweise und Ergänzungen finden sich in den folgenden zwei Artikeln (wobei speziell die Kommentarnachträge in Teil 2 zu beachten sind - individueller Support bei Problemen kann aber nicht geleistet werden).

Scannen in Word 2013 – Teil 2

Update: Zwischenzeitlich gibt es eine überarbeitete Variante des Makros, welches auch für Word 2016 funktioniert. Details finden sich in folgenden Artikeln:

Scanfunktion in Word 2013/2016 nachrüsten – Teil 1
Scanfunktion in Word 2013/2016 nachrüsten – Teil 2

 

Forumartikelinfo


Letzte Aktualisierung am 21 Januar, 2020 Aufrufe 18.376 Gilt für:

Lieber Günter,

habe gerade deinen Artikel gelesen. Dein Geschriebenes ohne Probleme umgesetzt, und was soll ich sagen? Es funzt auf Anhieb. Ganz lieben Dank für deine Mühe. Wieder mal ein echter "Born". Tut auf Anhieb, was es soll.

Mein "Drucker,Scanner,Fax" ist ein Canon Pixma MX 535. Betriebsystem ist Windows 7 64bit.

Gruß, Rolf-Dieter

Hallo Herr Born,

sehr gute und verständliche Anleitung! Vielen Dank, hat sofort funktioniert!

Gruß, Thomas1911

Guten Tag

Bei mir funktioniert es leider nicht.

Muss ich alles von diesem VBA Code kopieren und einfügen? Oder welchen Teil?

' Author: Günter Born www.borncity.de blog.borncity.com
' Implements a Scan function in Word 2013
Private Declare PtrSafe 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 length of the path, just as big as possible
 
  Dim FolderName As String ' Name of the folder
  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
'     strDateiname = "C:\Users\Public\Pictures\" & "Scan.jpg"
     
     If Not objImage Is Nothing Then
       Kill strDateiname
       objImage.SaveFile strDateiname ' save into temp file
       Selection.InlineShapes.AddPicture strDateiname ' insert into document
       Set objImage = Nothing
     End If
     Set objCommonDialog = Nothing
 
  '  MsgBox strDateiname  ' test output
End Sub

Wie sieht das Makro genau aus?

Ich habe auch das Einfügen des Symbols genau nach Beschreibung gemacht. Kann es sein, dass wenn das Makro falsch ist, das Scansymbol dann in der Menüleiste von Word nicht angezeigt wird?

Vielen Dank, Gruss Walo

Hallo Herr Born,

dies ist eine sehr gute und verständliche Anleitung!

Vielen Dank, hat sofort funktioniert!

Was von mir interessant wäre, Dokumente zu scannen und wie früher mit der OCR - Anwendung zu  bearbeiten.

Darüber habe ich bisher noch nichts gefunden.

Über Tips und Hinweise wäre ich sehr dankbar.

Wüne eine Frohe und besinnliche Weihnachtszeit und einen guten Rutsch ins Jahr 2016

Liebe Grüße

Michael Hamm

Hallo Herr Born,

dies ist eine sehr gute und verständliche Anleitung!

Vielen Dank, hat sofort funktioniert!

Hab aber noch eine andere Frage.

Ich hab einen Scanner mit Papiereinzug einen HP Laserjet Pro 400 MFP M425 dw  und mit dem funktioniert das normal scannen gut und 1 Seite geht auch über den Papiereinzug aber ab der Seite 2 fängt er an zu spinnen da er sofort eine Fehlermeldung bringt ( einen Papierstau obwohl da gar keiner ist )

hab ich vielleicht was falsch gemacht ?

hab alle schritte genau so gemacht wie von ihnen beschrieben.

vielleicht können sie mir helfen

Liebe Grüße

Jürgen  

Der Wiki-Artikel ist ein Beitrag "AS-IS", d.h. da werde ich nicht nachbessern.

Mehrseiteneinzug ist imho ein Problem des Geräts bzw. des Treibers.

Und OCR-Einbindung ist eine andere Baustelle, die mit Scan nix zu tun hat. Für OCR gibt es spezielle Software.

Blogs: http://www.borncity.com/blog /(Ger) - and - http://borncity.com/win/ (EN)

Vielen Dank,

ich habe es in Office 365 probiert und es klappt.

Brother MFC 8510DN

Tipp: Manchmal möchte man das Bild über die ganze Seite ausdehnen. Dazu bei den Bildtools die Formatierung "über den Text" auswählen und das Bild auf Seitengröße ziehen.

Gruß

Martin

Die Beschreibung ist vorbildlich, kann man dies auch bei EXCEL installieren?

Vielen Dank

Hallo Günther,

ich habe versucht, deine Anleitung genau umzusetzen. Als ich das Scan-Symbol anklicken wollte, kam folgende Meldung:

"Fehler beim Kompiliieren. Benutzerdefinierter Typ nicht definiert.!

Da habe ich sicherlich etwas falsch gemacht ;-

Könntest du mir aus der patsche helfen?
Ich habe einen Canon MX 925-Drucker/Scanner.

Mit herzlichen Grüßen

Chris