Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1168to1172
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
Makro-A per Makro-B in einer Schleife ausführen
Udo
Hallo
Ich habe eine Excel-Tabelle "Angebot.xls".
Und ich habe eine Makro mit dem Namen "Produkt".
Nun möchte ich ein zweites Makro erstellen.
Dieses neue Makro (Name "Liste") soll das Marko "Produkt" in einer Schleife für jede Zeile meiner Tabelle einmal ausführen.
Und zwar so lange, bis in Spalte C kein Wert mehr ist
Beginnen soll es dabei mit Zeile 2, weil in Zeile 1 die Spaltenköpfe stehen.
Das neue Makro soll also:
* Zeile 2 meiner Tabelle "aufrufen".
* Gucken, ob in Zelle C2 ein Wert steht.
* Wenn ja, soll es einmal das Makro "Produkte" ausführen.
* Dann gehts zu Zeile 3 ... usw.
* Wenn ich Spalte C kein Wert mehr enthalten ist, ist das Ende der Tabelle erreicht und die Schleife soll stoppen.
Bisher bin ich so weit gekommen:
Sub Liste()
Application.Run "Angebot.xls!Produkte"
End Sub

Nun weis ich nur leider nicht so recht, wie ich die Schleife und die if-Abfrage da unterbringen muss.
Gruß
Udo
AW: Makro-A per Makro-B in einer Schleife ausführen
23.07.2010 07:45:40
xr8k2
Hallo Udo,
eine Möglichkeit (ungetestet):
Sub Liste()
dim zeile as long
zeile = 2
do
if not activesheet.cells(zeile, 3) = "" then call Produkte else exit do
zeile = zeile + 1
loop
End Sub

Gruß,
xr8k2
AW: Makro-A per Makro-B in einer Schleife ausführen
23.07.2010 09:16:21
Udo
Hallo
Oh ja super. Das scheint schon mla zu kuntionieren. Vielen Dank.
Nun ist es allerdings so, das in dem Makro "Produkt" auch ein UserForm aufgerufen "neuerArtikel" wird
Da kann man dann ein Datum eingeben.
Man kann es aber auch ohne Eingabe mit einem OK-Button quasi "abnicken".
Wenn nun das Schleifen-Makro "Liste" seinen Job macht, wird ja für jede einzelne Zeile meiner Tabelle logischerweise auch immer diese UserForm angezeigt.
Gibt es eine Möglichkeit, das zu verhindern?
Könnte man in das Schleifen-Makro irgendwie einbauen, dass es immer automatisch auf "OK" des UserForms klickt?
Gruß
Udo
Anzeige
AW: Makro-A per Makro-B in einer Schleife ausführen
23.07.2010 09:24:43
Yusuf
Moin,
wieso nimmst du das einblenden der Userform nicht aus dem Code des Makros "Produkt" raus?
Gruß
Yusuf
AW: Makro-A per Makro-B in einer Schleife ausführen
23.07.2010 09:32:42
Udo
Hallo Yusuf
wieso nimmst du das einblenden der Userform nicht aus dem Code des Makros "Produkt" raus?
Ich rufe das Makro "Produkt" über 2 verschiedene Wege auf:
1.) Über einen Button in meiner Symbolleiste. Und da brauche ich dieses UserForm dann.
2.) Über das Schleifen-Makro "Liste". Und da stört dieses UserForm dann.
Das Makro "Produkt" führt ja bei mir hier eine bestimmte Sache aus für die Tabellenzeile, die gerade aktiv ist.
Und dieses Schleifen-Makro "Liste" führt dieses Makro "Produkt" ja sozusagen einfach für alle Zeilen meiner Tabelle aus.
Damit ich das nicht von Hand machen muss, wenn ich das mal für alle Zeilen meiner Tabelle brauche.
Und bei dieser "Massen-Ausführung" stört es natürlich, wenn für jede einzelne Ausführung von "Produkt" dieses UserForm erscheint.
Kannst Du mir folgen?
:-)
Gruß
Udo
Anzeige
AW: Makro-A per Makro-B in einer Schleife ausführen
23.07.2010 10:22:00
Yusuf
Hm,
ich weiss leider nicht wie man einem Makro das durch ein Makro aufgerufen wird noch zusaetzlich einen "Befehl" zusendet um "OK" zu "klicken" aber ich wuerde das fuer mich auf folgendeweise loesen.
Ich wuerde das Makro "Produkt" ein zweites mal schreiben und es dann "Produkt2" nennen und diese dann durch das Makro "Liste" aufrufen lassen anstatt "Produkt".
Bei dem Makro "Produkt2" wuerde ich den aufruf der Userform dann rausnehmen.
Gruß
Yusuf
Klappt leider doch nicht
23.07.2010 10:56:31
Udo
Hallo nochmal
Sub Liste()
dim zeile as long
zeile = 2
do
if not activesheet.cells(zeile, 3) = "" then call Produkte else exit do
zeile = zeile + 1
loop
End Sub
Das scheint doch nicht zu klappen.
Bei Ausführung wird das Makro "Produkte" anscheinend doch nur für die aktive Zele der Excel-Tabelle ausgeführt.
Hat sich da veielciht doch noch ein Fehler eingeschlichen?
Gruß
Udo
Gruß
Udo
Anzeige
AW: Klappt leider doch nicht (Korrektur)
23.07.2010 10:58:50
Udo
Text:
Hallo nochmal
Sub Liste()
dim zeile as long
zeile = 2
do
if not activesheet.cells(zeile, 3) = "" then call Produkte else exit do
zeile = zeile + 1
loop
End Sub

Das scheint doch nicht zu klappen.
Bei Ausführung des Makros "Liste" wird das Makro "Produkte" anscheinend doch nur für die aktive Zeile der Excel-Tabelle ausgeführt.
Hat sich da vielleicht doch noch ein Fehler eingeschlichen?
Gruß
Udo
AW: Klappt leider doch nicht (Korrektur)
23.07.2010 13:25:19
xr8k2
Hallo Udo,
kann ich mir nicht vorstellen ...
Variable Zeile hat zu Beginn den Wert 2.
Wird in Zelle "C2" (resp. cells(2,3)) ein Wert gefunden wird "Produkte" ausgeführt und dann weiter in der Schleife die variable zeile um 1 erhöht ... dann beginnt die Schleife von vorn. Wird dann in einer Zeile der Spalte C kein Wert mehr gefunden wird "Produkte" nicht ausgeführt sondern die Schleife verlassen und damit die Sub beendet.
Gruß,
xr8k2
Anzeige
AW: Klappt leider doch nicht (Korrektur)
23.07.2010 14:44:10
Udo
Hallo
Ich habe zum Testen nun mal folgendes gemacht:
Das Makro, welches mehrfach ausgeführt werden soll heist "Test_01" und hat diesen Code:
Sub Test_01()
Dim iRow As Long
Dim iFile As Integer
Dim petFile As String
iFile = FreeFile
iRow = ActiveCell.Row
petFile = LCase(Cells(iRow, 2)) & " - Test.txt"
Open "D:\Temp\Test\" & petFile For Output As iFile
iRow = ActiveCell.Row
Print #iFile, Cells(iRow, 3)
Close iFile
End Sub
Und das Schleifen-Makro von Dir heist "Alle_Produkte" und hat diesen Code:
Sub Alle_Produkte()
Dim zeile As Long
zeile = 2
Do
If Not ActiveSheet.Cells(zeile, 3) = "" Then Call Test_01 Else Exit Do
zeile = zeile + 1
Loop
End Sub
Meine Excel-Tabelle hat 1000 Zeilen, welche in Spalte C einen Wert enthalten.
Wenn ich nun Dein Schleifen-Makro ausführe, müssten doch im Verzeichnis D:\Temp\Test\ 999 Dateien landen mit den Dateinamen "[Wert der Spalte B] - Test.txt".
Das passiert aber leider nicht. Es wird nur eine txt-Datei erzeugt passend zur Zeile, die aktiv ist, wenn ich das Makro starte.
Wenn ich Dein Schleifen-Makro ausführe, müsste ich dann nicht sozusagen auch zusehen können, wie das durch meine Excel-Tabelle "wandert" und die Zeilen abarbeitet?
Oder ist das eher Unsinn?
Kann es vielleicht sein, dass das Schleifen-Makro die Zeilen nicht nacheinander "aktiviert" oder so?
Ich frage, weil die aktive Zelle wärend der ganzen Laufzeit die gleiche bleibt, die es auch schon beim Makro-Srat war.
Gruß
Udo
Anzeige
AW: Klappt leider doch nicht (Korrektur)
23.07.2010 14:46:34
Udo
Hallo
Bitte nicht falsch verstehen.
Ich wollte Dich natürlich nicht kritisieren.
Das waren nur so ein paar Ideen meines laienhalfetn VBA-Verständnisses.
Warscheinlich liegt der Fehler ja eher bei mir.
Vielleicht kannst Du den ja sofort sehen in meinem vorherigen Posting.
Guß
Udo
AW: Klappt leider doch nicht (Korrektur)
26.07.2010 07:43:02
xr8k2
Hallo Udo,
sorry, dass ich mich erst jetzt melde ... aber das Problem ist, wie du schon richtig bemerkt hast, dass die Zeilen eben nicht nacheinander aktiviert werden. Du benutzt für deinen Dateinamen aber immer die aktive Zeile. Übergib deinem Makro einfach die jeweils betreffende Zeile mit:
Sub Test_01(irow as long)
Dim iFile As Integer
Dim petFile As String
iFile = FreeFile
petFile = LCase(Cells(iRow, 2)) & " - Test.txt"
Open "D:\Temp\Test\" & petFile For Output As iFile
iRow = ActiveCell.Row
Print #iFile, Cells(iRow, 3)
Close iFile
End Sub
Sub Alle_Produkte()
Dim zeile As Long
zeile = 2
Do
If Not ActiveSheet.Cells(zeile, 3) = "" Then Call Test_01(irow:=zeile) Else Exit Do
zeile = zeile + 1
Loop
End Sub
Gruß,
xr8k2
Anzeige

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige