Makro soll sich selbst umschreiben

Hallo.
Ich hätte eine Frage.
Ist es möglich, das wenn ein Makro in VBA ausgeführt wird, sich das Makro selbst umschreibt?
Beispiel für EXCEL:
Ich starte dads Makro, es soll mir in Tabelle1 auf A10 einen text einfügen, und jetzt soll sich das Makro selbst umschreiben, so das beim nächsten Makro start sich der Wert in Zeile A11 schreibt.

Ich weiß, das es anderst einfacher geht, aber es würde mich wirklich interesieren, ob dies möglich ist.

Danke schon mal im vorraus.

grundsätzlich hat man immer den falschen Ansatz gewählt, wenn eine Applikation seinen Quellcode selbst umprogrammieren muss, damit die Applikation dynamisch bleibt.

Du könntest doch im Code abfangen (mit einer Schleife), in welchen Zellen der Spalte „A“ schon etwas steht, und dann in die nächste Zelle hineinschreiben.

Falls die Sache nicht ganz so einfach ist, wie ich vermute, kannst Du auch Applikationsdaten beispielsweise in Textfiles, XML-Dateien oder in die Registry schreiben. Die Applikation klann bei der nächsten Ausführung die Werte da hinauslesen und je nach gelesenen Daten verschiedene Vorgänge ausführen.

Gruss,
DaHo

Selbstmodifizierenden Code hat man früher gebraucht um
die Codelänge gering zu halten und Prozeduren mehrfach
zu verwenden. Heute benutzt man das nur noch bei Viren.
Weis erstmal nach, daß Du das nicht für Makroviren
brauchst, dann kriegst Du auch Antworten.

Alex

Heute benutzt man das nur noch bei Viren.

Weis erstmal nach, daß Du das nicht für Makroviren
brauchst, dann kriegst Du auch Antworten.
Alex

Hallo Alex.
Also zuerts einmal danke für deine Antwort.
(Wie ich den Artikel geschrieben habe, dachte ich mir, das sich ettliche denken werden, das ich das für einen Virus brauche.
Ich weiß nicht, wie ich dir das bewiesen soll, das ich dies nicht für einen Virus benötige (Ich bin schon zufrieden, wenn meine einfachen Excel Programme mit ein wenig VBA funktionieren)
Und zum zweiten. Ich verstehe die Leute nicht, die sich so viel Arbeit machen, um einen Virus zu Programieren, nur um andere (die sie gar nicht kennen) zu schaden.
Und ich finde es auch für richtig, das, wenn man sie erwischt, sie recht hart bestraft werden.

Wie gesagt, für mich ist es interessant, um nicht jedesmal eine Zeile einfügen zu lassen. Es ist ja viel praktischer, wenn sich einfach im Makro die Zeilennummer ändert (Ich kann mir vorstellen, das dies irgentwie mit +1 zu tun hat.

Ich würde mich freuen, wenn ich eine Antwort bekähme.
Danke
BYE

Du könntest doch im Code abfangen (mit einer Schleife), in
welchen Zellen der Spalte „A“ schon etwas steht, und dann in
die nächste Zelle hineinschreiben.

Hallo

Ja, da hast du bestimmt recht.
Aber zum erten weiß ich nicht wie so eine Schleife aussehen könnte, und zum zweiten, versuche ich es meistens mit dem komplezirtesten Weg. (So meine ich, das ich am meisetn lerne)

Aber ich währe dankbar, wenn du mir verraten würdest, wie so eine Schleife aussehen könnte.
ZB. Wenn in A10 die Zelle voll ist soll das Programm weitersuchen, bis die nächste A Zeile frei ist.

Danke.

Hallo

Ja, da hast du bestimmt recht.
Aber zum erten weiß ich nicht wie so eine Schleife aussehen
könnte, und zum zweiten, versuche ich es meistens mit dem
komplezirtesten Weg. (So meine ich, das ich am meisetn lerne)

Also, wenn es schon mit der Schleife nicht klappt, dann erst recht nicht mit dem dynamischen anpassen des codes :smile:

Zweitens: meiner Meinung nach, lernst Du am meisten aus gute lösungen… dafür müssen sie nicht unbedingt schwer sein.

Aber ich währe dankbar, wenn du mir verraten würdest, wie so
eine Schleife aussehen könnte.
ZB. Wenn in A10 die Zelle voll ist soll das Programm
weitersuchen, bis die nächste A Zeile frei ist.

hier:

Sub Macro1()

Dim i As Long
Dim found As Boolean

Do
i = i + 1
If Range(„A“ & i).Text = „“ Then
found = True
End If
Loop Until found

Range(„A“ & i).Select
ActiveCell.FormulaR1C1 = „hallo“

End Sub

gruss, giuseppe

Statt dem Kram unten kannst Du auch:

Range(„A1“).Select
Selection.End(xlDown).Select
Range(„a“ & CStr(Selection.Cells.Row + 1)).Select
ActiveCell.FormulaR1C1 = „hallo“

schreiben… tuts genauso ohne Variablen + Schleife…

Alex

Dim i As Long
Dim found As Boolean

Do
i = i + 1
If Range(„A“ & i).Text = „“ Then
found = True
End If
Loop Until found

Range(„A“ & i).Select
ActiveCell.FormulaR1C1 = „hallo“

funktioniert nicht :smile: o.t.
.

Ja, da hast du bestimmt recht.
Aber zum erten weiß ich nicht wie so eine Schleife aussehen
könnte,

Ohne VB-Programmiergrundlagen wirds eh schwierig. Du müsstest sicherlich Konstrukte wie „Do … Loop Until“, „For Each… Next“, „Select Case … End Select“ kennen, um vernünftige Applikationen programmieren zu können.

und zum zweiten, versuche ich es meistens mit dem
komplezirtesten Weg. (So meine ich, das ich am meisetn lerne)

da kann ich dir auch nicht helfen…

Aber ich währe dankbar, wenn du mir verraten würdest, wie so
eine Schlei fe aussehen könnte.
ZB. Wenn in A10 die Zelle voll ist soll das Programm
weitersuchen, bis die nächste A Zeile frei ist.

hat giuseppe in der zwischenzeit schon gemacht.

Dynamisch Code erzeugen
Die Antwort: Scripting

Da schreibt sich zwar nichts um, aber du kannst automatisch Code generieren. Du kannst VB-Code generieren als String, den gibst du dann an setcode und voila kannst du den ausführen…

Public Sub Run()
 scScripting.AllowUI = True
 scScripting.Run "Main"
End Sub

Public Sub SetCode(Code As String)
 scScripting.AddCode "Sub Main()" & vbCrLf & \_
 Code & vbCrLf & \_
 "End Sub"
End Sub

Ralph

Sorry vergessen:
Du brauchst dafür natürlich die Komponente/Steuerelement: „Microsoft Script Control 1.0“

Ralph

Hallo,

in Word und Excel hast du auch die Möglichkeit mit Programmcode den VBA-Editor zu steuern. Das jetzt bis ins kleinste zu zeigen würde den Rahmen sprengen, aber kuck die mal mit der Hilfe die Objekte in der folgenden Anweisung genauer an:

activeworkbook.VBProject.VBComponents(„Modul1“).CodeModule.InsertLines 1,"'Test"

(Das fügt in das Modul1 (sollte existieren!) des aktiven Workbooks in die erste Zeile den Kommentar Test ein)

Gruß
Daniel