Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1900to1904
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Generieren von Etiketten mit Barcode

Generieren von Etiketten mit Barcode
06.10.2022 11:57:00
Etiketten
Hallo miteinander,
Ich habe folgendes Problem:
Wir erzeugen schon seit Jahren in einer Exceldatei mit Hilfe eines Makros Etikettvorlagen mit Barcode, die dann über einen Etikettendrucker ausgedruckt werden. Die Etiketten werden so erzeugt, dass der Barcode als Bild in eine Zeile, und weitere Infos in die Zeile darunter eingepasst werden. Die Infos sucht er sich aus einer Tabelle zusammen. Die Abmessungen sind so gewählt, dass alles dann schön auf die Etiketten passt. Wir haben als Barcode App das TBarCode Panel von TEC-IT installiert. In einem Durchgang werden bis zu 600 Etiketten erzeugt und dann anschließend gedruckt. Es werden also zuerst alle Etiketten in einer Druckvorlage erstellt und dann in einem Rutsch ausgedruckt.
Prinzipiell funktioniert das bereits seit mehreren Jahren sehr gut. Auf dem Computer mit Excel 2007 dauerte ein Etikett ca. 1-2 s zur Erstellung. Das Drucken aller Etiketten selbst geht dann sehr rasch. Seit der Umstellung auf Excel 2016 jedoch hat sich die Dauer zur Erstellung eines Etiketts signifikant verlängert. Der Code ist aber derselbe. Die Dauer nimmt scheinbar im Laufe eines Tages eher zu. Mit jedem neuen Druckvorgang werden die alten Etikettenvorlagen aber gelöscht, daher kann sich da nichts ansammeln. Programmiert wurde der Code unter Excel 2016.
Der PC ist nicht der neueste, aber auch kein Uralt-Gerät:
Intel Core i5-7500 CPU
8 GB RAM 3.41 GHz
Windows 10 Pro 64 bit
Ich kann gerne den Code posten, der für die Erstellung der Etiketten zuständig ist, aber hat jemand eine Idee, was alleine die Umstellung von 2007 auf 2016 bewirkt haben könnte? Immerhin ist 2016 ja auch schon eine ältere Version, der Computer ist sicher jünger.
Dies ist der Codeabschnitt, der den Barcode in die Zelle einfügt:

Sub barcodeEinfügen(ByVal TargetCell, ByVal wert, ByVal ws, ByVal top)
'Worksheets("EtikettenNEU").Select
Dim CellHeight As Variant ' Höhe der Zelle
Dim CellWidth As Variant ' Breite der Zelle
Dim CellTop As Variant ' Obere Rand-Koordinate der Zelle
Dim CellLeft As Variant ' Linke Rand-Koordinate der Zelle
Dim BCObject As OLEObject ' Das TBarCode Container Objekt
'Als „Ziel-Zelle“ wählen wir C3 - dort soll der Strichcode eingefügt werden.
'Ist die Zelle zu klein, passen wir die Höhe an eine Mindesthöhe an:
If (ws.Range(TargetCell).RowHeight 
Vielen Dank für sachdienliche Hinweise!
Albert

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Generieren von Etiketten mit Barcode
06.10.2022 15:14:32
Etiketten
Hallo Albert und liebe Forumsgemeinde,
was mir hier ins Auge springt, ist die Variable ws. Die wird ausdrücklich als Wert (ByVal) als Argument an das Sub übergeben. Im Code wird sie dann als ein Objekt behandelt. Vermutlich funktioniert das nur, weil VBA so gutmütig ist und einfach den String als Objekt interpretiert. Ist aber auf keinen Fall sinnvoll. Vielleicht kann ein Forumsexperte hierzu noch was schreiben, der sich damit gut auskennt. Ob sich das auf die Laufzeit auswirkt, kann ich nicht einschätzen.
Ich würde jedenfalls vorschlagen, aus dem ByVal ein ByRef zu machen und den Variablentyp auch gleich festzulegen. Ich tippe jetzt einfach mal aufgrund der Abkürzung ws und dem Umstand, dass das Objekt eine Range-Eigenschaft besitzt, dass es sich um ein Worksheet-Objekt handelt. Also wäre die erste Zeile so zu ändern:

Sub barcodeEinfügen(ByVal TargetCell, ByVal wert, ByRef ws As Worksheet, ByVal top)
Die Variablen CellTop, CellLeft, CellHeight und CellWidth sind alle als Variant deklariert, speichern aber nur Ganzzahlen. Also nicht als Variant, sondern als Integer deklarieren. Wird aber auf die Laufzeit keinen Einfluss haben, hier geht es nur um gutes Handwerk.

Dim CellHeight As Integer ' Höhe der Zelle
Dim CellWidth As Integer ' Breite der Zelle
Dim CellTop As Integer ' Obere Rand-Koordinate der Zelle
Dim CellLeft As Integer ' Linke Rand-Koordinate der Zelle
Gruß
Sheldon
Anzeige
AW: Generieren von Etiketten mit Barcode
06.10.2022 16:20:48
Etiketten
Danke, Sheldon!
Du hast Recht mit der ws-Variable, das steht für ein worksheet, und zwar für die Tabelle, aus der die Etikettdaten ausgelesen werden. Der Code für das Einfügen des Barcodes stammt in der Grundversion von der Firma, die das Barcode-Tool zur Verfügung stellt, glaube ich (programmiert hat das eine freie Programmiererin, die immer wieder für uns arbeitet, die Deklaration als Variant klingt aber nicht nach ihr, vlt hat sie es übernommen).
Hier ist noch der Code, aus dem die Prozedur "barcodeEinfuegen" aufgerufen wird:

Sub EtikettenbefüllenNEU(ByVal beleg, ByVal min As Integer, ByVal max As Integer, ByRef zeileetikett2 As Long, ByVal Text As String, ByVal ansatz, ByVal kz_ve)
Dim laenge2, laenge3 As Integer
Dim an As String
Dim textunvormatiert As String
an = Format(ansatz, "dd.mm")
If Not IsNull(min) And Not IsNull(max) Then
Do While min 
Hier ist ein Beispiel, wie die Etiketten vor dem Drucken aussehen:
Userbild
Ich wollte diese wenigen Etiketten als Excel abspeichern, die Datei hatte aber über 5 MB. Das kommt mir sehr viel vor, allerdings ist die Qualität wegen der benötigten Druckauflösung (Etiketten werden gescannt) so hoch erforderlich.
Das "Demo" ist nur auf meinem PC so, auf dem "richtigen" PC haben wir eine kostenpflichtige Version des Barcode tools.
LG, Albert
Anzeige
AW: Generieren von Etiketten mit Barcode
06.10.2022 16:34:28
Etiketten
entweder liegt das Problem in der aufrufenden Funktion,
oder das ws - Objekt wird nicht gelöscht bzw. dessen Speicherplatz bleibt belegt.
oder oder oder
AW: Generieren von Etiketten mit Barcode
06.10.2022 19:56:51
Etiketten
Moin,
es gibt inzwischen -auch Excel 2007 sich wie "gerade eben" anfüllt- die Möglichkeit, Barcode über Microsoft Word zu erzeugen.
Siehe: https://support.microsoft.com/en-us/office/field-codes-displaybarcode-6d81eade-762d-4b44-ae81-f9d3d9e07be3
Ein Beispiel, wenn auch mit QR-Code, hatte ich hier behandelt: https://www.herber.de/forum/cgi-bin/callthread.pl?index=1892223#1892494
Aber in dem Fall von Albert, müsste vermeinden, den Word.Application immer wieder neu zu instanzieren, um Zeit zu gewinnen.
Ob am Ende schneller kann ich nicht beurteilen.
Ich vermute genau an der Stelle der "ws.OLEObjects.Add" ist der Zeitfresser verteckt: man müsste ein Barcode erzeugen, das Bild davon kopieren und ablegen und dasselbe Objekt wiederverwenden mit anderen Text anstatt ein OLEObject neu zu instanzieren.
VG
Yal
Anzeige
AW: Generieren von Etiketten mit Barcode
10.10.2022 10:34:53
Etiketten
Danke für alle bisherigen Antworten. Yal, diesem HInweis mit dem OLEObject werde ich mal nachgehen. Vlt kann ich das so umschreiben, wie du vorschlägst. Erklärt zwar nicht, warum es gerade durch den Umstieg auf Excel 2016 länger dauert, vlt ist es aber wirklich eine Ressourcenfrage.
LG, Albert

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige