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

In diesem Blog-Beitrag beschreibe ich, wie man mit einem VBA-Makro und ein wenig Know How sich eine Scanfunktion in Word 2016 nachrüsten kann. Die Lösung funktioniert auch in Word 2013.


Werbung

Zuerst ein kleiner historischer Abriss. Microsoft verzichtet ja seit Word 2007 darauf, eine Scanfunktion bereitzustellen. Hier im Blog habe ich daher immer wieder Bastellösungen (siehe Linkliste am Artikelende) vorgestellt, um doch aus Word scannen zu können. In Office 2013 ließ sich wenigstens noch aus OneNote scannen. Wenn mir kein Fehler unterlaufen ist, hat Microsoft diese Funktion in OneNote 2016 auch geschlachtet.

Aber es gab von mir eine Makro-Lösung für Word 2013 (siehe Links am Artikelende), die vielen Nutzern gute Dienste leistete. Aber das Scan-Makro entstand “quick & dirty” – denn mein letzten Buch zu VBA (Microsoft Word 97, Developer’s Kit – Die technische Referenz), an dem ich beteiligt war, stammt aus 1998. Und mein Microsoft Press-Buch “Microsoft Office 97 Visual Basic-Programmierung” rangiert sogar aus 1997. So drei Mann-Monate für so ein Buch ackern, um dann (bei ca. 1 Euro pro Exemplar) zwischen 4.000 und 6.000 Euro Tantiemen einzunehmen – und dann noch von Schlaumeiern unter den Lesern angemacht zu werden “das und das fehlt” – das muss ich mir nicht mehr geben. Meine letzten Werke zu Visual Basic 2005 und C# 2005 habe ich 2006-2008 zusammen mit meinem Sohn verfasst, damit dieser eine Referenz als Entwickler bekommt (hat auch geklappt und ich kann ihm da längst nicht mehr das Wasser reichen). Von daher sind die Makros so was wie Fingerübungen für mich – aber meine Ambitionen gehen nicht dahin, eine Universallösung mit diesem und jenem Balkon für die geneigte Anwenderschaft zu entwickeln – also zwecklos nach so was zu fragen. Anderseits versuche ich den Artikel etwas breiter anzulegen, um das (noch) vorhandene Know How unter die Leserschaft zu bringen.

VBA, WIA, Twain, was sollte ich wissen

Im Blog-Beitrag verwende ich einige Kürzel und Technologien, die ich kurz sortieren möchte. Das Kürzel VBA steht für Visual Basic for Application, eine auf der Basic-Syntax aufsetzende Programmiersprache, mit der man in Office-Programmen wie Word sogenannte Makros (keine Programme) erstellen kann. Das VBA objektorientiert ist, kann man auf Funktionen (Objekte) anderer Anwendungen (wie z.B. Excel aus Word benutzen) und auf Bibliotheken (man spricht von Klassen) zugreifen.

Zur Ansteuerung eines Scanners benutze ich in diesem Blog-Beitrag eine Bibliothek, die von Windows 7, 8, 8.1 und 10 bereitgestellt wird – die Microsoft Windows Image Acquisition Library v2.0. Diese stellt eine sogenannte Klassenbibliothek bereit, die sich in VBA als Objekt instanziieren lässt. Damit kann man bequem auf die bereitgestellten Methoden (Funktionen) und Eigenschaften (quasi Variablen) der Scan-Schnittstelle zugreifen.

Der Ansatz setzt aber voraus, dass die WIA-Schnittstelle in Windows durch geeignete Geräte – sprich Scanner oder ähnliches – unterstützt wird. Windows 7 und folgende Betriebssysteme stellen zwar die WIA-Schnittstelle bereit – aber der Scanner-Hersteller muss für die Windows-Version geeignete WIA-Treiber bereitstellen, damit die Einbindung klappt. Die von vielen Scanner-Herstellern bereitgestellte TWAIN-Schnittstelle wird von meiner Lösung nicht unterstützt. Auf die Problematik bin ich in folgenden Blog-Beiträgen eingegangen.

Scanner unter Windows 7
Scanner funktioniert unter Windows 8/8.1 nicht

Falls jemand unbedingt mit einer TWAIN-Anbindung arbeiten will bzw. muss, verweise ich mal auf diesen Kommentar zum meinem Word 2013-Scan-Beitrag. Dort gibt einen Code-Schnipsel sowie einen Link auf eine Twain-Bibliothek. Sollte auch in Word 2016 funktionieren.

Generell lässt sich feststellen, dass die Twain-/WIA-Geschichte ein Auslaufmodell ist und nur noch im Privatanwender-Umfeld Verwendung findet. Modern Multifunktionsgeräte und –Scanner lassen sich per WiFi in ein lokales Netzwerk einbinden. Die Gerät haben Intelligenz und können eine Scan als Datei auf eine konfigurierbare Netzwerkfreigabe speichern. Im Home-Office meiner Frau steht so ein Gerät – habe ich aber nicht ins Netzwerk eingebunden.

Was die Scanfunktion leistet

Die hier vorgestellte VBA-Lösung ermöglicht aus Word 2013 oder Word 2016 per Schaltfläche den Scanner über die WIA-Schnittstelle anzusprechen. Dabei zeigt Windows (sofern mehrere WIA-Geräte angeschlossen sind) als erstes das Auswahldialogfeld für die verfügbaren WIA-Geräte (hier iPad, Digicam und Scanner).

Wählt der Benutzer ein Gerät und dann die OK-Schaltfläche, soll das WIA-Dialogfeld zur Scanner-Steuerung erscheinen.

Im Dialogfeld lassen sich die Scan-Optionen wählen und ein Scan-Vorschau triggern. Über die Scannen-Schaltfläche wird das Bild erfasst und in einer temporären Datei gespeichert. Im Anschluss ist der Scan an der aktuellen Stelle im Word-Dokument einzufügen.

Nicht unterstützt wird der Mehrseiten-Scan, den manche Geräte erzeugen. Die hat einen einfachen Grund: Ich habe erstens kein solches Gerät greifbar – und zweitens kann die WIA-Schnittstelle meines Wissens auch keine Multiseiten-Scans handhaben. Wer in dieser Richtung Feldforschung betreiben möchte oder muss, sollte in dieser Diskussion einige Ansätze finden.

Aufruf der VBA-Entwicklungsumgebung

Nach diesen Präliminarien möchte ich aber einsteigen. Als erstes gilt es, in Word 2016 (klappt auch in Word 2013) die VBA-Entwicklungsumgebung zur Eingabe des VBA-Makrocodes aufzurufen. Ich habe hier noch einen Screenshot aus Word 2013, der auch für Word 2016 passt.


Werbung

1. Gehen Sie zur Registerkarte Ansicht und wählen Sie die Menüschaltfläche Makros. Dann ist der Befehl Makros anzeigen anzuwählen.

2. Bei Bedarf lässt sich im Listenfeld Makros in das Dokument (z.B. Normal.dotm (globale Vorlage) einstellen, damit das neue Makro in allen Word-Dokumenten zur Verfügung steht).

3. Dann kann man einen Makronamen wie Scan im Feld Makroname eintippen und auf Erstellen klicken.

Dann sollte sich das obige Fenster der VBA-Entwicklungsumgebung öffnen, in dem bereits der Prozedurrumpf der Funktion Scan() zu sehen ist. In der linken Spalte sieht man, dass das Makro dem Projekt Normal (Normal.dotm) unter Module zugeordnet ist. Aber das erfolgt alles automatisch durch die VBA-Entwicklungsumgebung und braucht uns momentan nicht zu kümmern.

Einbinden der WIA-Bibliothek

Bevor es mit dem Makrocode los geht, ist noch ein wichtiger Zwischenschritt erforderlich. Es ist sicherzustellen, dass VBA die benötigte Klassenbibliothek zur Ansteuerung der WIA-Schnittstelle kennt.

1. Gehen Sie zum Menübefehl Extras und wählen Sie im Menü den Befehl Verweise an.

2. Im Dialogfeld Verweise suchen Sie den Eintrag Microsoft Windows Image Acquisition Library v2.0 und markieren das Kontrollkästchen.

Wenn Sie das Dialogfeld über die OK-Schaltfläche schließen, wird die Bibliothek wiaaut.dll im Projekt mit referenziert. Dann können aus VBA auf die Klassen dieser Bibliothek zugegriffen und Objektinstanzen erzeugt werden.

Den Makro-Code ergänzen

Nach diesen Vorbereitungen sind wir an dem Punkt angekommen, wo der VBA-Code im Modul Scan() eingefügt werden kann. Für die Scanfunktion habe ich folgenden VBA-Code vorgesehen.

' 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

Die Anweisungen erzeugen Instanzen des WIA-Dialogs, ermitteln den Pfad zum temporären Ordner im Benutzerprofil, stoßen die Scanfunktion an und fügen das zwischengespeicherte JPEG-Bild in Word ein.

Gegenüber dem Makrocode aus dem Word 2013-Beispiel habe ich eine Vereinfachung eingeführt. Der Pfad zum Temp-Ordner des Benutzerprofils wird durch die


Werbung

Environ(„temp“)

Methode ermittelt. Diese steht in VBA zur Verfügung und vermeidet die im Word 2013-Beispiel verwendete Windows API-Funktion. Der Aufruf der API-Funktion bringt Probleme beim Wechsel zwischen 32- und 64-Bit-Betriebssystemversionen. Der Parameter “temp” weist die Methode an, den Pfad zum temporären Ordner des Benutzerprofils zurückzuliefern. Im Code wird dann dieser Pfad um den Namen der zu erzeugenden Grafikdatei „\Scan.jpg“ ergänzt.

Mit diesen Schritten ist der VBA-Makrocode fertig und man kann die Speichern-Schaltfläche der VBA-Entwicklungsumgebung anwählen (siehe obiges Bild). Anschließend lässt sich deren Fenster schließen.

Bei Bedarf können Sie den Makrocode auch aus der Datei ScanV2.zip beziehen. Einfach das ZIP-Archiv herunterladen, die darin enthaltene .BAS-Datei entpacken und in der VBA-Entwicklungsumgebung über Datei/Importieren in das vorher angewählte Modul importieren lassen.

Nach diesen Vorbereitungen sollte das Makro bereits lauffähig sein.

Testen des Makrocodes

Zum Testen des Makrocodes sind ebenfalls nur wenige Schritte erforderlich, die ich hier kurz skizziere.

1. Positionieren Sie die Einfügemarke im Word-Dokument an der Stelle, an der das Bild vom Scanner einzufügen ist.

2. Gehen Sie zur Registerkarte Ansicht, wählen Sie die Menüschaltfläche Makros und klicken Sie auf den Befehl Makros anzeigen.

3. Stellen Sie sicher, dass der Scanner oder die gewünschte WIA-Quelle eingeschaltet und mit dem PC verbunden ist.

3. Klicken Sie auf das dort aufgeführte Makro Scan und wählen Sie die Schaltfläche Ausführen.

Dann sollte der im nachfolgenden Abschnitt beschriebene Scan-Ablauf ausgeführt werden.

1. Sind im System mehrere WIA-Quellen verfügbar, erscheint das obige Dialogfeld, in dem Sie die Quelle (hier den Brother DCP-115C) wählen und dann die OK-Schaltfläche bestätigen.

2. Danach wählen Sie im obigen WIA-Scan-Dialogfeld die Scan-Optionen und bestätigen die Schaltfläche Scannen.

Bei Bedarf können Sie die Schaltfläche Vorschau wählen, so dass ein Probescan im Vorschaufenster erscheint. Dann lässt sich der Scan-Ausschnitt über die vier Ziehmarken justieren. Über die Optionsfelder und den Hyperlink der linken Spalte stellen Sie die gewünschten Scan-Optionen ein. Das erfolgt alles über die WIA-Funktionen des Betriebssystems, die vom Makro genutzt werden.

Während des Scanvorgangs wird der Verlauf in der obigen Fortschrittsanzeige dargestellt. Sobald die Vorlage erfasst wurde, speichert das Makro diese als JPEG-Grafik in einer temporären Datei und fügt das Ergebnis im Word-Dokument ein.

Sie können das (verknüpfte) Bild markieren und in der Größe anpassen oder auch wieder löschen. Wenn alles bis hier hin geklappt hat, ist die Scanfunktion für Word 2013/2016 nachgerüstet. Bricht das Makro bei der Ausführung mit einem Fehler ab, haben Sie den Code falsch eingegeben oder den Verweis auf die WIA-Bibliothek nicht eingebunden. Überprüfen Sie dann die obigen Schritte auf Fehler und Abweichungen. Beliebte Fehler sind Sonderzeichen, typografische Anführungszeichen oder fehlerhafte Hochkommas (Apostrophs).

In Teil 2 schaffen wir noch ein wenig Komfort, indem eine eigene Gruppe Scannen mit einer Scan-Schaltfläche auf der Registerkarte Einfügen angelegt wird. Zudem lässt sich bei Bedarf eine Scannen-Schaltfläche in der Symbolleiste für den Schnellzugriff einrichten, damit der Zugriff auf den Scanner richtig komfortabel wird.

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

Ähnliche Artikel:
Scannen unter Word 2007/2010
Scannen in Word 2013 – Teil 1
Scannen in Word 2013 – Teil 2
Scanner funktioniert unter Windows 8/8.1 nicht


Werbung



Dieser Beitrag wurde unter Office, Tipps abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

18 Kommentare zu Scanfunktion in Word 2013/2016 nachrüsten – Teil 1

  1. AH sagt:

    Gibt es ne Chance auch Scanner mit ScanSnap-Schnittstelle anzusprechen?

    • Keine Ahnung, die ScanSnap-Schnittstelle ist mir nicht bekannt. Kann das Teil nicht die Scans auf Netzwerkfreigaben legen?

      Wenn da jemand eine Klassenbibliothek in Form einer DLL bereitstellt, wird man deren Objekte in VBA instantiieren und dann die Methoden und Eigenschaften dieser Objekte verwenden können. Nur, wie gesagt, in der Richtung bin ich (auch mangels Hardware) unbeleckt. Hier hat jemand was dazu geschrieben – ist aber eine ziemliche Frickelei und abseits dessen, was ich mit meinem Makro adressiere.

  2. AH sagt:

    Danke, schaue ich mir mal an. 😉

  3. Pingback: Sscanning in Word 2013/2016 – Part I | Born's Tech and Windows World

  4. Werbung

  5. Pingback: Scanning in Word 2013/2016 – Part II | Born's Tech and Windows World

  6. Steffen Schmidt sagt:

    vielen Dank für Ihre ausführliche Erläuterung.
    Werde wohl nie verstehen warum Microsoft die Scanfunktion aus MS office gelöscht hat.
    Aber zum Glück gibt es noch Leute wie Sie die anderen Helfen.

  7. R.S. sagt:

    Vorsicht beim Einfügen des VBA Codes durch copy & paste, da gibts einen Fehler beim Compiliren !

    ‚ set temporary file
    strDateiname = Environ(„temp“) & „\Scan.jpg“

    SO muss es aussehen, damit klappt es bei mir unter Win 10 64Bit nebst Office 2016. Im Original waren hinter temp“ und hinter \Scan.jpg“ andere Anführungszeichen (rückwärtsgerichtet, vermutlich durch Formatierungsfehler oder durch copy & paste enstanden…)

  8. Werbung

  9. Michael Suhr sagt:

    Mir ist es auch ein Rätsel warum Microsoft bei all den Verbesserungen die sonst in deren Produkte einfließen eine so nützliche Funktion rausnimmt.

    Vielen Dank für das super Workaround wo mit Sicherheit einiges an Arbeit drinsteckt.

  10. Uwe Schumacher sagt:

    Vielen Dank für den tollen Workaround. Hat mir sehr geholfen, wieder eine direkte Scan Funktion in Word 2016 zu haben!

  11. Paul Baumann sagt:

    Schön beschrieben mag auch in der 32 Bit Version klappen mit dem Nachrüsten bzw. VBA Modul

    Ich habe eine 64 Bit Version von Windows 10 und Office 2013, da klappt es leider nicht, da ist der VBA Umgebung gleich zu Beginn eine Fehlermeldung das was fehlt bzw. nicht zu finden ist!!

    Ansonsten eine wirklich gute Anleitung!!

  12. Bernd Wilhelm sagt:

    Vielen Dank für die Beschreibung. Windows 10 Home, 64 bit, Office 2016, Drucker brother mfc neu: Der Direkt-Scan aus Word 2016 funktioniert auf Anhieb.

  13. MSchopf sagt:

    Super! Hat geklappt und ich kann endlich wieder unter Word 2016 scannen. DANKE.

  14. Aniri sagt:

    Hallo Erfinder,
    super, super, super herzlichen Dank!! Tolle Beschreibung! Super Erklärung in Schrift und Bild – einfach toll! Hat hervorragend auf Anhieb geklappt.
    Bin auch froh das Scannen wieder zu haben im Word.

  15. Punching Bag sagt:

    Das Script funktioniert super und fügt tadellos Scans ein in Word 2016 (32 bit) unter Windows 10. Aber ja leider nur jeweils einen Scan.
    Hat jemand eine Erweiterung für Mehrseiten-Scans von einem ADF-Scanner ausprobiert? Das hat unter Word 2000 ganz wunderbar geklappt und fehlt hier…

  16. JULOR sagt:

    Perfekt. Klappt auf Anhieb und ist mit der Beschreibung einfach zu implementieren. Keine Ahnung, weshalb MS dieses so simpel anmutende Feature (wenn man VBA kann) gestrichen hat. Danke für die Arbeit!

    Mehrseitige Scans brauche ich in Word nicht, das geht auch extern über die Scannersoftware prima. Aber das Einfügen von Grafiken war ein Graus. Jetzt ist es so einfach wie gewohnt.

  17. Jörg Petersson sagt:

    Ganz großes Kompliment! Eine intelligente und überraschend einfache Lösung und eine perfekte Anleitung. Ich habe mir ein Bookmark für Ihren Blog gemacht.
    Vielen Dank
    Jörg Petersson

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.