Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

VBA für Etikettendruck - Fehlermeldung 5194

Forumthread: VBA für Etikettendruck - Fehlermeldung 5194

VBA für Etikettendruck - Fehlermeldung 5194
07.04.2026 22:58:39
Shanna
Hallo zusammen,

vorweg: Ich habe fast keine Ahnung von VBA...

Im leider nicht mehr existierenden MS-Office-Forum.net hatte ich vor ein paar Jahren einen Beitrag gefunden, den ich für meine Zwecke bisher gut benutzen konnte.

Und jetzt funktioniert es nicht mehr und ich weiß nicht warum.

Änderungen bei mir:
neuer Rechner, Windows 11.

Aufgabenstellung:
DIN-A 4 Etikettenvorlagen in immer wieder anderer Zusammenstellung drucken.
Also mal wird die Etikettennummer 25 gleich 23 x benötigt, mal nur 5 x.

Also Exceltabelle mit zwei Spalten, einmal die Beschriftung des Etiketts, die andere Spalte mit der Anzahl der gewünschten Etiketten.

Wenn ich jetzt die Worddatei mit den automatischen Makros nutze, dann kommt für das Makro 2 folgende Fehlermeldung:

Laufzeitfehler '5941':
Das angeforderte Element ist nicht in der Sammlung vorhanden.

Im Code ist diese Angabe farbig hinterlegt:

anzZeilen = ActiveDocument.Tables(1).Columns.Count

Gerne kann ich die beiden Makrotexte einstellen.

Makro 1:

Option Explicit
Dim artikelDaten As Variant
Dim letzteZeile As Long, letzteSpalte As Long

Private Sub document_new()
datenEinlesen
datenUebertragen
End Sub

Sub datenEinlesen()
Dim excelmappe As Object, excelinstanz As Object, excelsheet As Object
Dim datei As String
Dim i As Long, j As Long

On Error GoTo fehler

'Excel-Mappe öffnen
Set excelinstanz = CreateObject("Excel.application")
excelinstanz.Visible = True 'kann später, wenn alles funktioniert, auf False gesetzt werden
datei = ThisDocument.Path & "\datenquelle.xlsx" '**Name der Excelmappe anpassen

Set excelmappe = excelinstanz.workbooks.Open(FileName:=datei)
Set excelsheet = excelmappe.sheets("tabelle1") '**Tabellenblattname anpassen

'letzte Zeile / letzte Spalte feststellen
With excelsheet
letzteZeile = .Cells(.Rows.Count, 1).End(-4162).Row
letzteSpalte = .Cells(1, .Columns.Count).End(-4159).Column
artikelDaten = .Range(.Cells(2, 1), .Cells(letzteZeile, letzteSpalte))
End With

'Ecelmappe schließen:
excelmappe.Close savechanges:=False
excelinstanz.Visible = True
excelinstanz.Quit
Set excelinstanz = Nothing
Set excelmappe = Nothing

Exit Sub
fehler:
MsgBox Err.Description & " - " & Err.Number
excelinstanz.Visible = True
excelinstanz.Quit
Set excelinstanz = Nothing
Set excelmappe = Nothing
End Sub

Makro 2:

Sub datenUebertragen()
Dim i As Long, j As Long, z As Long
Dim anzZeilen As Long, aktZeile As Long, anzEti As Long

anzZeilen = ActiveDocument.Tables(1).Columns.Count

For i = 1 To letzteZeile - 1

anzEti = artikelDaten(i, letzteSpalte)

For j = 1 To anzEti
z = z + 1
aktZeile = aktZeile + 1
If aktZeile > anzZeilen Then
ActiveDocument.Tables(1).Rows.Add
aktZeile = 1
End If
With ActiveDocument.Tables(1).Range.Cells(z).Range
.Paragraphs(1).Range = artikelDaten(i, 1) & vbLf
End With
Next j

Next i
End Sub


Ich bin so langsam verzweifelt... 🤷‍♀️

Wer kann mir bitte helfen? Ganz lieben Dank im Voraus...

VG, Shanna

Dies ist die Excel-Datei:
https://www.herber.de/bbs/user/180496.xlsx

Die Word-Datei mit den Makros kann ich leider nicht hochladen... Sie besteht aus einer Tabellenzeile (je nach Etikettenvorlage gestaltet) und erweitert sich Spalte um Spalte automatisch - je nach Datenquelle:
Userbild
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Eben getestet - und...
07.04.2026 23:28:13
Case
Moin Shanna, :-)

... den Fehler bekomme ich nur, wenn in der Worddatei keine Tabelle vorhanden ist. ;-)

Userbild

Ist dort eine Tabelle klappt der Code. ;-)

Mehr kann ich im Moment nicht sagen. ;-)

Servus
Case
Anzeige
Isch 'abe aber eine Tabelle... ;-)
08.04.2026 01:01:03
Shanna
Moin Case,

danke für deinen Test...

Aber in dem Word-Dokument ist eine Tabelle vorhanden.

Ich verstehe das nicht mehr.

Hier noch ein Screenshot:

Userbild

Noch eine Idee?

VG, Shanna
Anzeige
Noch eine Idee? = Ja...
08.04.2026 09:09:15
Oberschlumpf
Hi,

...und zwar:
Zeig uns bitte zusätzlich zu deiner Excel-Datei doch auch mal deine Word-Datei...natürlich gern mit Bsp-Daten.
Denn ohne deine Word-Datei finden wir ja den Fehler nicht.
Wenn Word-Dateien hier für den Upload nicht erlaubt sind, dann verpack deine Word-Datei erst in eine ZIP-Datei und uploade dann die ZIP-Datei.

Ciao
Thorsten
Anzeige
So geht´s...
08.04.2026 09:29:38
MCO
Moin!

Ich hab verstanden, dass dein Makro in WORD läuft und nicht in Excel. Damit hast du eigentlich in einem Excel-Forum nix verloren.

Deine Datei hab ich trotzdem lauffähig gekriegt und so abgeändert, dass es wieder Etiketten generiert.

Sub datenUebertragen()

Dim i As Long, j As Long, z As Long
Dim anzZeilen As Long, aktZeile As Long, anzEti As Long
Dim tbl As Object
Dim tbl1 As Object

Set tbl = ActiveDocument.Tables 'Sammlung aller Tabellen im Dokument

If tbl.Count = 0 Then 'Wenn Anzahl Tabellen = 0
tbl.Add Range:=Selection.Range, NumRows:=1, NumColumns:=4, _
DefaultTableBehavior:=wdWord9TableBehavior, _
AutoFitBehavior:=wdAutoFitFixed 'neue erstellen
End If

Set tbl1 = tbl(1) 'Neue Tabelle ist deine Tabelle
anzZeilen = tbl1.Columns.Count 'anzZeilen = spalten-Anzahl??

For i = 1 To letzteZeile - 1

anzEti = artikelDaten(i, letzteSpalte)

For j = 1 To anzEti
z = z + 1
aktZeile = aktZeile + 1
If aktZeile > anzZeilen Then
tbl1.Rows.Add
aktZeile = 1
End If

tbl1.Range.Cells(z).Range.Paragraphs(1).Range = artikelDaten(i, 1) & vbLf 'verkürzt
Next j

Next i
End Sub


Warum deine vorhandene Tabelle nicht erkannt wird, kann ich nicht sagen.

Alternativ zum zählen vorhandener Tabellen könntest du auch direkt alles löschen und eine neue Tabelle erstellen. Das säh dann sogar etwas einfacher aus:

Sub datenUebertragen()

Dim i As Long, j As Long, z As Long
Dim anzZeilen As Long, aktZeile As Long, anzEti As Long
Dim tbl1 As Object

ActiveDocument.Range.Delete' Inhalt komplett löschen

Set tbl1 = ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=1, NumColumns:=4, _
DefaultTableBehavior:=wdWord9TableBehavior, _
AutoFitBehavior:=wdAutoFitFixed) 'neue Tabelle erstellen und in Variable setzen
anzZeilen = tbl1.Columns.Count

For i = 1 To letzteZeile - 1

anzEti = artikelDaten(i, letzteSpalte)

For j = 1 To anzEti
z = z + 1
aktZeile = aktZeile + 1
If aktZeile > anzZeilen Then
tbl1.Rows.Add
aktZeile = 1
End If

tbl1.Range.Cells(z).Range.Paragraphs(1).Range = artikelDaten(i, 1) & vbLf
Next j
Next i
End Sub


Gruß, MCO
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige