Seite 1 von 1

Erweitertes Macro (Parameter Verknüpung)

Verfasst: 07.12.2016 18:30
von Makke
Hallo zusammen,

ich habe folgende Frage, warum funktioniert ein Macro wenn ich das konkret aufrufe aber z.B. nicht in einer For-Schleife. Hier ein Beispiel:

Code: Alles auswählen

Macro Test(Nb)
  Test#Nb
EndMacro

Test1 = 1
Test2 = 2
Test3 = 4

Debug Test(2)

For i = 1 To 3
  Debug Test(i)
Next
Ausgabe:

Code: Alles auswählen

[17:19:12] Warte auf den Start des Executable...
[17:19:12] Executable-Typ: Windows - x64  (64bit, Unicode, Purifier)
[17:19:12] Executable gestartet.
[17:19:12] [Debug] 2
[17:19:12] [Debug] 0
[17:19:12] [Debug] 0
[17:19:12] [Debug] 0
[17:19:12] Die Programmausführung ist abgeschlossen.
Wenn ich EnableExplicit einbaue kommt die Fehlermeldung: "Variable Testi existiert nicht". Ich bin mir nicht sicher aber wird nicht eigentlich immer von rechts nach Links (bzw. von Innen nach Außen) aufgelöst ? Also erst i umwandeln, dann Macro ausführen und dann Debug ?

Bin gerade ratlos.

Re: Erweitertes Macro (Parameter Verknüpung)

Verfasst: 07.12.2016 18:41
von mhs
Ein Makro wird vor der Kompilierung aufgelöst und nicht zur Laufzeit.

D.h. deine Variable "i" existiert zum Zeitpunkt der Kompilierung gar nicht. Aufgelöst sieht der Code wie folgt aus:

Code: Alles auswählen

Macro Test(Nb)
  Test#Nb
EndMacro

Test1 = 1
Test2 = 2
Test3 = 4

Debug Test2

For i = 1 To 3
  Debug Testi
Next
Du müsstest entweder das Makro umschreiben, stattdessen eine Funktion verwenden oder z.B. gleich mit Arrays arbeiten.

Re: Erweitertes Macro (Parameter Verknüpung)

Verfasst: 07.12.2016 19:17
von Makke
Zack, danke. Manchmal brauch man nur einen Denkanstoss. Klar, alle verwendeten Macros werden vor dem Kompilieren in den Code den sie darstellen ersetzt und dann wird kompiliert.

Danke schön.