QR-Code für Excel, einfach und gratis
22.10.2016 16:46:53
Heliophob
mein Wunsch war es einen QR-Code (mit einem Link zu Google-Maps) in einer Excel-Tabelle zu generieren. Beim Druck soll der QR-Code automatisch generiert werden und mir das Leben etwas leichter machen. Derartige Plugins habe ich einige gefunden. Diese waren jedoch alle kostenpflichtig (Einzellizenz um die 200 EUR). Es geht auch ohne! Viel einfacherer als erwartet...! Für die Nachwelt möchte ich hier die Lösung festhalten...
Als Grundlage dient das Programm Zint [1]. Zum einen ist dies OpenSource (GNU-Licence) und zum anderen kommt es in doppelter Ausführung daher: Die grafische Variante (die wir nicht brauchen) und die Variante für die Befehlszeile (toll!). Ein Hoch an den Entwickler! Über die Befehlszeile lassen sich alle relevanten Daten per Excel-VBA an Zint übertragen und Zint erstellt daraus eine Grafik die man später (automatisch) in Excel importieren kann.
Zuerst sollte Zint an eine "gut zu erreichende" Stelle gelegt werden. In meinem Fall c:/zint/. Dies war bei mir besser, da es sonst möglicherweise Probleme mit langen Verzeichnisnamen und Leerzeichen geben kann.
Dann habe ich in meiner Excel-Tabelle Image-Steuerelement eingebaut. Dieses kann von Haus aus leider kein png! Zint kann aber auch gif - man muss einfach nur als Dateiname eine gif-Endung nennen und schon wird eine gif erstellt.
Im VBA-Editor erstelle ich dann folgenden Source:
Public Sub QRCode()
Dim x 'Befehlszeile
Dim datei As String 'Bilddatei
Dim URL As String 'URL die aus einer Zelle geholt wird
' Zelle mit der URL die ich als Link im QR-Code haben will.
' z.B: http://maps. _
google.de/maps?q=Fackenburger+Allee+11+23554+Lübeck
URL = Range("A1").Value
datei = "c:\Zint\temp.gif" 'Temporäre Bilddatei
' Details siehe Anleitung von Zint. 58 ist der Code zum erstellen eines QR-Codes.
' Es gehen auch praktisch fast alle anderen...
' Das Exit am Ende bewirkt, dass das CMD-Fenster sich wieder von selbst schließt.
x = Shell("cmd /k c:\Zint\zint -o " + datei + " -b 58 --vers=1 -d" + URL + "&& exit")
' wartet 0,8 Sekunden (Verarbeitungszeit von Zint mit Reserve-Zeit)
Application.Wait Now + TimeSerial(0, 0, 0.8)
' Image1 ist der Name vom Image-Steuerelement
Sheets("Druck").Image1.Picture = LoadPicture(datei)
' löscht die Temporäre Datei wieder
Kill datei
End Sub
Viel Spaß beim testen!
Janko Hack
[1] https://sourceforge.net/projects/zint/