540 Aufrufe
Gefragt in Tabellenkalkulation von finger59 Experte (1.3k Punkte)
Hallo liebe Excelfangemeinde,
leider bleibe ich in einer Schleife hängen und erhoffe mir Euren Rat wie es richtig
geht.
Aufgabenstellung: Im Tabellenblatt Druck_Menü stehen in der Spalte AB1 - Abxxx
unterschiedlich viele Namen. Diese Namen sollen nun nacheinander (einzeln) in
das Tabellenblatt Muster immer in die Zelle E6 übertragen werden. Sobald ein
Name übertragen wurde, soll die voreingestellte Seite ausgedruckt werden. Ist der
Ausdruck erfolgt, soll der nächste Name aus Druck_Menü aus Spalte AB übertragen
werden und dann wieder der Ausdruck erfolgen. Das soll solange gehen bis in
Druck_Menü kein weiterer Name mehr da ist sprich die erste leere Zelle in AB
kommt.

Mein Makro sieht derzeitig so aus:
Sub Schaltfläche6_Klicken()

Dim i As Integer

Do Until ActiveSheet.Range("ab" & i) = ""
ActiveCell.Copy

Sheets("Muster").Range("e6").Select
Selection.ClearContents

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False

Sheets("Druck_Menü").Select

i = i + 1
Loop

MsgBox "Der Ausdruck ist fertig!"

End Sub

Die derzeitige Fehlermeldung bezieht sich auf
Do Until ActiveSheet.Range("ab" & i) = ""
Anwendungsfehler - oder objektdefinierter Fehler
Ursprünglich lautete die Zeile
Do Until ThisWorkbook.Worksheets(1).Range("ab" & i) = ""
aber auch die führte zum Fehler und deshalb hatte ich versucht
es wie hier stehend zu lösen - leider ohne Erfolg.

Ich bedanke mich schon mal bei allen Interessierten fürs reinschauen
und wünsche allen noch je nach Tageszeit einen schönen ....
LG... Helmut

6 Antworten

0 Punkte
Beantwortet von
Die derzeitige Fehlermeldung bezieht sich auf
Do Until ActiveSheet.Range("ab" & i) = ""
Anwendungsfehler - oder objektdefiniert

Hallo Helmut,

das hast du schon ganz richtig erkannt. Zu Beginn deines Makros ist
i=0 da du hier noch keinen Wert zugewiesen hast. Du versuchst sich
also auf Zeile 0 im Arbeitsblatt zu beziehen, welche es nicht gibt. Daher
der Fehler. Schreib also einfach vor den Beginn der Schleife die Zeile
i=1 oder mit welcher Zeile du auch immer beginnen willst und Alles
wird gut.

Außerdem solltest du ActiveCell.Copy durch
ActiveSheet.Range("ab" & i).Copy austauschen, damit dein Makro
klappt.

Gruß Mr. K.
0 Punkte
Beantwortet von
Hi Helmut ^^

Wie gewünscht :-)

Gruss Nighty
Sub Druck()
Dim Zelle As Range
For Each Zelle In Worksheets("Druck_Menü").Range("AB1:AB" & Worksheets("Druck_Menü").Cells(Rows.Count, 28).End(xlUp).Row)
Worksheets("Druck_Menü").Cells(Zelle.Row, Zelle.Column).Copy
Worksheets("Muster").Range("E6").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Worksheets("Muster").PrintOut Copies:=1, Collate:=True
Next Zelle
End Sub
0 Punkte
Beantwortet von
Vielleicht klappt es ja in neueren Excel-Versionen. Aber bei mir kommt
bei der Zeile Sheets("Muster").Range("e6").Select ein Fehler.
Im Zweifel musst du das auftrennen auf
Sheets("Muster").Select
Range("e6").Select

Gruß Mr. K.
0 Punkte
Beantwortet von finger59 Experte (1.3k Punkte)
Hallo zusammen,
zunächst einmal vielen Dank an meine beiden Helfer bei meinem Problem.
@ Mr. K. - Deine zwei Aussagen waren zunächst einmal für den Durchlauf des Makros richtig
und hätten mir die Lösung auch gebracht, wenn ich nicht auf den nächsten Fehler gelaufen wäre.
Aber die Aussage mit i = 1 - klar im nachhinein dann logisch weil sonst ja Zelle 0 wäre - hat zumindest
mir mal wieder ein Stück mehr Verständnis überhaupt gebracht.

Letztendlich aufgrund des zuletzt aufgetretenen Fehlers habe ich mein gestricktes in die Ecke gestellt und mich des
Codes von Fedjo bedient, der dann auch so läuft, wie es sein sollte.

Und wenn man das dann sieht... gerade mal sechs Zeilen Code und dann läufts... und meinereiner bricht sich einen
ab und läuft von Fehler zu Fehler...

Von daher vielen lieben Dank an Euch beide und allen noch einen schönen Tag.... LG.. Helmut
0 Punkte
Beantwortet von
Hi Helmut ^^

Was zähl ist dein Einsatz,nicht so sehr das Ergebnis!

Noch 3 Tips

Nach einer Makroaufzeichnung sind als erstes die Selectionen zu beseitigen
Meist nur unnötiger Ballast der die Laufzeit doch sehr mindert

Bei einem Makro kannst du im VbEd mit F8 einen einzelschrittmodus nutzen
Da hast du die Möglichkeit mit der mouse auf beliebige Variablen zu gehen und der momentene Wert wird dir angezeigt!

Option Explicit am Anfang eines Codes
Zwingt dich Variablen zu bestimmen,so kann man keine Bestimmung vergesseh/übersehen

Beherzige die drei Dinge und es wird wirklich vieles leichter dadurch!

Gruss Nighty
0 Punkte
Beantwortet von finger59 Experte (1.3k Punkte)
Hi Nighty,

ich habe versucht aus einem einfachen Fallbeispiel aus meinem VBA-Buch das so umzusetzen.

Vorher war ich bei Google und auch hier bei Supportnet und hatte nach was ähnlichem gesucht, bin
aber aus dem was ich mir dabei in Richtung Schleife angesehen hatte nicht schlau geworden bzw.
habe nicht das so gesehen, dass ich mir eine Umsetzung davon hätte vorstellen können.

Manchmal gelingt es mir alleine aber meistens bleibe ich dann doch irgendwo hängen und dann ward
ihr bislang meine Retter.

Am meisten profitiere ich dann davon, wenn ich das, was ihr mir als Lösung anbietet auch für mich
nachvollziehen kann. Ich gebe zu - ist leider nicht immer der Fall - da ich einfach gestrickt bin
und lieber so (auch wenn es dabei unnötig langsamer und länger wird) Gedanke für Gedanke in einer
Zeile abgearbeitet will, wo ihr, zwei oder drei Schritte in einer Zeile abarbeitet.

Den Einzelschrittmodus mit F8 habe ich auch schon des Öfteren benutzt, damit ich sehe, was korrekt abläuft
und wo ich einen Fehler eingebaut hatte. Das mit der Variablenwertanzeige mit der Maus war mir bislang so
aber auch nicht bekannt - Vielen Dank daher für den Tipp.

Das weglassen von Select bedeutet das für mich mehrere Schritte auf einmal tun, was ich so nicht hinkriege,
da mir Zeile für Zeile lieber ist. Ich will mich auch nicht dagegen wehren, aber ich denke man muss das, was
man da machen muss auch verstehen und nicht nur einfach hintippen und yeah.. .es funktioniert (warum auch immer).

In diesem Bereich der VBA werde ich noch einiges zu lernen (eher zu verstehen) haben und danke jeden für einen
Tipp oder Rat, was man besser machen kann.

Vielen Dank auch daher an Dich Nighty für Deine Vorschläge wie ich es in der Zukunft für mich besser realisiert bekommen
kann und ich denke auch stellvertretend für alle Hilfesuchenden - vielen lieben Dank an alle Helfer und Eurer Unterstützung.

LG... Helmut
...