Macro-Aufruf

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Macro-Aufruf
von: Rosenfeld
Geschrieben am: 10.07.2015 15:27:17

Hallo zusammen,
ich habe mehrere Codes mit jeweils unterschiedlichen Namen
Schema1, Schema2, Schema3 usw.
Derzeit greife ich auf diese Codes explicit zu.
Call Schema1, Call Schema2, Call Schema3 usw.
Kann ich auf die Codes auch über einen Zufallsgenerator zugreifen?
Und wenn ja, wie muss ich das anstellen?
Gruß
Siegfried

Bild

Betrifft: AW: Macro-Aufruf
von: ransi
Geschrieben am: 10.07.2015 15:59:33
Hallo Siegfried,
Eine Möglichkeit ist so:

Option Explicit

Sub machs()
    Randomize Timer
    Select Case Int(3 * Rnd + 1)
        Case 1: Call Schema1
        Case 2: Call Schema2
        Case 3: Call Schema3
    End Select
End Sub


ransi

Bild

Betrifft: AW: Macro-Aufruf
von: Rosenfeld
Geschrieben am: 10.07.2015 16:31:20
Hallo ransi und Beni
Danke euch beiden.
Die Version von ransi ist mir sympatischer.
Gruß
Siegfried

Bild

Betrifft: AW: Macro-Aufruf
von: Beni
Geschrieben am: 10.07.2015 16:45:40
mir auch

Bild

Betrifft: AW: noch ne Variante...
von: daniel
Geschrieben am: 10.07.2015 16:46:01
...Wenn die Makros tatsächlich so benannt sind (gleicher Name + Zählnummer von 1-x):

Application.Run "Schema" & Worksheetfunction.randbetween(1, 3)
Gruß Daniel

Bild

Betrifft: AW: noch ne Variante...
von: Rosenfeld
Geschrieben am: 10.07.2015 18:26:44
Hallo Daniel,
auch Dir ein Dankeschön.
die Macros habe ich tatsächlich so benannt.
Die Version von ransi habe ich eingesetzt, sie funktioniert.
Deine Version ist allerdings deutlich kürzer.
Gruß
Siegfried

Bild

Betrifft: AW: Macro-Aufruf
von: Beni
Geschrieben am: 10.07.2015 16:02:21
Hallo
Dim Wert muss ausserhalb der Prozedur stehen
Gruss Beni
Dim Wert

Sub Makro23()
Randomize    ' Zufallszahlengenerator initialisieren.
Wert = Int((3 * Rnd) + 1)    ' Zufallszahlen im Bereich von 1 bis 3 generieren.
Call Schema
End Sub

Sub Schema()
If Wert = 1 Then MsgBox "Schema1"
If Wert = 2 Then MsgBox "Schema2"
If Wert = 3 Then MsgBox "Schema3"
' usw
End Sub


Bild

Betrifft: Du hättest 'Wert' auch an 'Schema' übergeben ...
von: Luc:-?
Geschrieben am: 10.07.2015 19:19:48
…können (als Parameter!), Beni;
falls die Makros in einem Klassenmodul stünden, gäb's auch noch eine Möglichkeit mit CallByName, Siegfried,
die dann ähnlich kurz wäre wie Daniels, weil hierbei der MakroName ebenfalls als Text verwendet wdn kann:

Sub Rufen()
    Dim n As Integer
    Randomize: n = Rnd() * 100 Mod 3 + 1
    CallByName Tabelle1, "Makro" & CStr(n), VbMethod
End Sub
Die 3 Makros müssten dann im DokumentKlassenmodul eines Blattes (hier Tabelle1) stehen (der hier verwendete CodeName des betreffenden Blattes ist dabei zwingend erforderlich!).
Gruß, Luc :-?

Besser informiert mit …

Bild

Betrifft: Application.Run
von: ransi
Geschrieben am: 10.07.2015 19:46:40
Hallo,
Nur damits auch halbwegs vollstädig ist:
Application.Run kanns auch...

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Machs()
    Randomize Timer
    Application.Run "Modul1.Schema" & Int((3 * Rnd) + 1)
End Sub


Sub Schema1()
    MsgBox "Schema1"
End Sub


Sub Schema2()
    MsgBox "Schema2"
End Sub


Sub Schema3()
    MsgBox "Schema3"
End Sub


ransi

Bild

Betrifft: Ist Variante zu Daniels 'Run'! Gruß owT
von: Luc:-?
Geschrieben am: 11.07.2015 01:07:59
:-?

Bild

Betrifft: oooops...
von: ransi
Geschrieben am: 11.07.2015 20:29:51
...hatte ich überlesen.

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Zählen über Liste mit verschiedenen Bedingungen"