Excel - VBA: Befehl beliebig oft ausführen

Hallo,

ich suche eine Möglichkeit, in Excel einen VBA-Befehl innerhalb eines Makros genau sooft auszuführen, wie es eine Zelle vorgibt.

Genauer: Wenn in der Zelle eine 5 steht, soll der Befehl SendKeys „{DOWN}“ fünf mal ausgeführt werden.

Kennt jemand eine Möglichkeit? Ich wäre sehr dankbar.

Viele Grüße,

Lucas Sichardt
[email protected]

Genauer: Wenn in der Zelle eine 5 steht, soll der Befehl
SendKeys „{DOWN}“ fünf mal ausgeführt werden.

Hi Lucas,

Sub tt()
Dim N
For N = 1 To Range("A1").Value
 Application.SendKeys "{DOWN}"
Next N
End Sub

Aber SendKeys ist sehr launenhaft, was genau willst du machen, vielleicht gibt es dann sicherere Möglichkeiten als Sendkeys.
Gruß
Reinhard

Hi Lukas
eine rough Lösung:
Angenommen die 5 steht in A2

Option Explicit
Sub DownItGoes
Dim intHaeufigkeit as Integer
Dim i as Integer
intHaeufigkeit = cells(2,1).value
For i = 1 to intHaeufigkeit
 SendKeys "{DOWN}"
Next i 

End Sub 

Wenn Du einfach nur 5 Zellen nach unten willst

Option Explicit
Sub DownItGoes2NoLoop
Dim intHaeufigkeit as Integer
intHaeufigkeit = cells(2,1).value
ActiveCell.Offset(intHaeufigkeit , 0)
End Sub 

Hoffe das hilft.
Wenn nicht gib laut und dir helfen weitere.
Gruß
Winter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Wenn Du einfach nur 5 Zellen nach unten willst
Option Explicit
Sub DownItGoes2NoLoop
Dim intHaeufigkeit as Integer
intHaeufigkeit = cells(2,1).value
ActiveCell.Offset(intHaeufigkeit , 0)
End Sub

Hallo Winter,
haste bei
ActiveCell.Offset(intHaeufigkeit , 0)
nicht was vergessen, vielleicht ein .Select o.ä.?
Nur mal so frag :smile:
Gruß
Reinhard

OT: mist war ich zu langsam ;-(

Aber SendKeys ist sehr launenhaft, was genau willst du machen,
vielleicht gibt es dann sicherere Möglichkeiten als Sendkeys.
Gruß
Reinhard

Aber immerhin eine ähnliche Lösung. Bin ich doch nicht ganz so doof.
Aber der Fuchs hat eine kürzere :wink:
Gruß Winter

Hallo Winter,
haste bei
ActiveCell.Offset(intHaeufigkeit , 0)
nicht was vergessen, vielleicht ein .Select o.ä.?
Nur mal so frag :smile:
Gruß
Reinhard

Ne vergessen nicht. Das habe ich mit absicht, weggelassen.

Es kommt doch darauf an was er will!
Vielleicht ein .value oder ein .entirerow.delete woher soll ich das wissen.

Winter
(der lügt ohne Rot zu werden)

P.S.
auf Select sollte man eh verzichten, ist ganz schlechter Stil. :wink:

Moinmoin,

das hatte ich mir fast gedacht. Auf dem Weg von der Arbeit nach Hause war mir aufgefallen, dass ich mich wohl etwas falsch ausgedrückt hatte.

Der Befehl SendKeys stand nur stellvertretend da. Er war ein Beispiel.
Eigentlich ist die Sache nämlich komplizierter. Ich will einen ganzen Abschnitt eines Makros wiederholen - so oft, wie es eben in dieser Zelle angegeben ist.

In diesen Abschnitt schreibe ich je nach Anwendung auch verschiedenen Befehle. Es geht einfach nur um einen Rahmen, in den ich die zu wiederholenden Befehle reinschreiben muss. Damit wäre mir geholfen.

Viele Grüße,

Lucas Sichardt
[email protected]

In diesen Abschnitt schreibe ich je nach Anwendung auch
verschiedenen Befehle. Es geht einfach nur um einen Rahmen, in
den ich die zu wiederholenden Befehle reinschreiben muss.
Damit wäre mir geholfen.

Hi Lucas,

den Rahmen hast du doch:

For N = 1 To Range("A1").Value
 ' Deine Befehle
Next N

Allerdings macht das für mich ohne Kenntnis was du da für Befehle hast, erstmal wenig Sinn.
Denn in deinem Code kann man den Wert von Range(„A1“).Value einbauen und braucht die Schleife nicht *annehm*
Zeige mal deinen Code.
Gruß
Reinhard

hiLukas,
mach aus dem Abschnitt eine eigene Sub
und verwende dann meine oder Reinhards Lösung. Schreibe dann anstelle von send keys einfach
MeineNeuesSub
Meine hat den Vorteil, du kannst die „5“ ein anderemal verwenden.
Reinhards ist kürzer und spart sich eine Variable.
Ist Geschmacksache, weiterhelfen sollte Dir beides.
Gruß
Winter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

den eigentlichen Abschnitt, der wiederholt werden soll, habe ich erst morgen auf Arbeit wieder. Daher kann ich ihn jetzt schlecht hier einstellen.

Aber es ist so: Ich möchte in der besagten Zelle je nach Bedarf eine andere Zahl eingeben können und dementsprechend oft soll das Makor dann den bestimmten Abschnitt ausführen. Wenn ich das richtig interpretiere, ist dann dieser Code gut geeignet:

Option Explicit

Sub DownItGoes ()
Dim intHaeufigkeit as Integer
Dim i as Integer
intHaeufigkeit = Range(„F37“).value
For i = 1 to intHaeufigkeit
|||Befehle, die ich wiederholt haben will|||
Next i

End Sub

Sehe ich das richtig, dass er bei „Next i“ quasi wieder zu „For i = 1 to…“ springt und die Befehle darunter neu ausführt und dabei das i immer eins höher zählt, bis i=intHaufigkeit?
Ich möchte ja auch verstehen, was ich da mache und nicht einfach nur den Code übernehmen und in mein Makro reinbasteln…

Wenn meine Vermutung oben richtig ist, müsste der Code genau das sein, was ich gesucht habe.

Danke für die äußerst schnelle Hilfe!!!

Gruß,

Lucas Sichardt
[email protected]

hi Lukas,

Sehe ich das richtig, dass er bei „Next i“ quasi wieder zu
„For i = 1 to…“ springt und die Befehle darunter neu
ausführt und dabei das i immer eins höher zählt, bis
i=intHaufigkeit?

ja genau das!

Ich möchte ja auch verstehen, was ich da mache und nicht
einfach nur den Code übernehmen und in mein Makro
reinbasteln…

Gute Einstellung!
Stell mal dein fertiges Programm rein,
jemand wird bestimmt ein paar sachen finden die man besser machen kann .

Wenn meine Vermutung oben richtig ist, müsste der Code genau
das sein, was ich gesucht habe.

Danke für die äußerst schnelle Hilfe!!!

Gerne
Grüße
Winter

Moin,

vielen Dank an alle Beteiligten. Mir wurde sehr geholfen und morgen probiere ich alles aus - gehe aber davon aus, dass es problemlos klappt.

Das fertige Programm hier reinzustellen wird schwierig, da es sich um eine größere, sehr komplexe Sache handelt. Das Ganze ist nämlich das klinikinterne Krebsregister des Klinikums, an dem ich zur Zeit tätig bin. Da auch schon einige Patientendaten drin sind, könnte ich sowieso nur die VBA-Codes einstellen. Und das sind wiederum erstens so viele, dass es den Rahmen hier wohl sprengen würde und zweitens machen die Codes ohne die Datenbank und das Layout des ganzen Projekts auch wenig Sinn.

Vielleicht werde ich aber bei Gelegenheit mal exemplarisch das ein oder andere hier reinstellen…

Vielen Dank nochmal…

Lucas Sichardt
[email protected]

Vielen Dank!
Moin,

ich habe meinen Code nun entsprechend angepasst und das alles entscheidende erste Makro funktioniert.

Mein Problem ist damit erstklassig gelöst und ich bedanke mich für die schnelle und erfolgreiche Hilfe.

Ich wünsche ein schönes Wochenende!

Gruß,

Lucas Sichardt
[email protected]