Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1472to1476
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

Makro zum Start von variablen Unterprogrammen

Makro zum Start von variablen Unterprogrammen
01.02.2016 06:23:47
variablen
Hallo,
ich arbeite an einem Kalkulationstool, mit dem man mit Hilfe von Checkboxes Zeilen auswaehlen kann, und dann per Button bestimmte Zellen dieser Zeilen auf das naechste Sheet kopiert werden. Der Code dafuer:
Sub CopyRows()
Dim LRow As Long, ChkBx As CheckBox, WS2 As Worksheet, counter As Long
Set WS2 = Worksheets("Cost quote")
LRow = WS2.Range("A" & Rows.Count).End(xlUp).Row
For Each ChkBx In ActiveSheet.CheckBoxes
If ChkBx.Value = 1 Then
LRow = LRow + 1
WS2.Cells(LRow, "C").Resize(, 5) = Range("A" & _
ChkBx.TopLeftCell.Row).Resize(, 5).Value
End If
Next
End Sub
So weit klappt auch alles, nun moechte ich zusaetzlich Unterprogramme/Subs starten (mit Namen Picture1, Picture2, Picture3, Picture4... Picture9), die falls Zeilen ausgewahlt sind, gestartet werden. Sprich: Falls nur eine Checkbox ausgewaehlt ist, soll Picture1 gestartet werden, falls 2 Checkboxes, dann Picture 1 und Picture2, bei 3 Haken Picture1, Picture2 und Picture3, und so weiter bis Picture 9.
Ich habe zuerst versucht mit dem Call Befehl, einem "counter", und ihn in die Schleife einzubauen, um die Subs zu starten, doch ich habe das mit dem variablen Makronamen nicht hingekriegt, da ich leider ein ziemlicher Amateuer auf dem VBA Gebiet bin.
Hier meine wenigen Ideen, die leider nicht funktionieren:
Dim counter as long
befehlsliste = Array("Picture1", "Picture2", "Picture3")
counter = counter + 1
If counter = befehlsliste(i) Then
Application.Run befehlsliste(i)
Vielen Dank schonmal fuer eine Antwort, bin leider total am verzweifeln.
LG Stefan

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro zum Start von variablen Unterprogrammen
01.02.2016 10:38:47
variablen
Hi Stefan
Application.Run anstelle von Call ist der richtige Ansatz.
Es gilt zu berücksichtigen, dass Array mit Null beginnen. Im Beispiel 0-2.
Was mir überflüssig scheint, ist Deine If...Them Abfrage. Der Counter bestimmt welche Prozedur aufgerufen wird.
Nachfolgend ein Beispiel:
Sub t()
Dim befehlsliste As Variant
Dim counter As Long
befehlsliste = Array("Picture1", "Picture2", "Picture3")
For counter = 0 To 2
Application.Run befehlsliste(counter)
Next counter
End Sub

Sub Picture1()
MsgBox "1"
End Sub

Sub Picture2()
MsgBox "2"
End Sub

Sub Picture3()
MsgBox "3"
End Sub

Nun aber noch einen generellen Hinweis. Es stellt sich die Frage, in wie fern sich die Prozeduren Picture1, Picture2 etc. unterscheiden. Vermutlich wäre es sinnvoller, nur ein Makro Picture zu machen und allfällige Variablen zu übergeben.
Beispiel hier:
Sub t()
Dim befehlsliste As Variant
Dim counter As Long
befehlsliste = Array("Picture1", "Picture2", "Picture3")
For counter = 0 To 2
Call Picture(CStr(befehlsliste(counter)))
Next counter
End Sub

Sub Picture(strVariable As String)
MsgBox strVariable
End Sub

cu
Chris
Noch ein Zusatz-Tipp: Ich würde eine Prozedur nicht Picture nennen. Ist Geschmackssache aber, aber aus meiner Sicht verwirrend (weil eben kein Bild, sondern eine Prozedur).
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige