Makro-Zeile lesen

Hallo Freunde
Ich bin etwas hartnaeckig, da ich auf folgendes Problem bisher keine Antwort habe. Ist doch bestimmt einfach?!?
Es existiere ein MODUL1 mit folgendem Inhalt:

Option Explicit
Sub Quelle
dim wert
wert=activecell.value
End Sub

In einem MODUL2 will ich nun die vierte Zeile (wert=…) als text auslesen:

Option Explicit
Sub Ziel
dim zeile
'wie heisst der Code, damit folgende Ausgabe entsteht?
zeile= **'wert=activecell.value'**
End Sub

Danke fuer eure Hilfe
Erich

Hallo Erich,

Ich bin etwas hartnaeckig

Aha, ein Kollege, was ist eigentlich mit
http://www.wer-weiss-was.de/cgi-bin/forum/showarticl…
? Brauchbar, nicht brauchbar?

, da ich auf folgendes Problem bisher
keine Antwort habe. Ist doch bestimmt einfach?!?
In einem MODUL2 will ich nun die vierte Zeile (wert=…) als
text auslesen:

Modul1:

Option Explicit

Sub Quelle()
Dim wert
wert = ActiveCell.Value
End Sub

Modul2:

Option Explicit

Sub tt1()
Dim Z As Long, Zeile As String
With ThisWorkbook.VBProject.VBComponents("Modul1").CodeModule
 For Z = 1 To .CountOfLines
 If .Lines(Z, 1) Like "wert =\*" Then
 Zeile = .Lines(Z, 1)
 Exit For
 End If
 Next Z
End With
MsgBox Zeile
End Sub


Sub tt2()
Dim Zeile As String
Zeile = ThisWorkbook.VBProject.VBComponents("Modul1").CodeModule.Lines(5, 1)
MsgBox Zeile
End Sub

Gruß
Reinhard

Hallo Erich,

vielleicht hilft dir das:

Debug.Print Application.VBE.CodePanes(1).CodeModule.Lines(4, 1)

damit kannst du auf jeden Fall die 4. Zeile aus dem Modul1 - codePanes(1) - auslesen

Gruß
Marion

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

Alle Makros auflisten, Code hier
Hallo Reinhard

was ist eigentlich mit
http://www.wer-weiss-was.de/cgi-bin/forum/showarticl…
? Brauchbar, nicht brauchbar?

Sehr brauchbar, aber ich sah vor lauter Bäumen den Wald nicht mehr!
Dein Makro beantwortet meine Frage.
Die konkret gesuchte Syntax war: .Lines(ZeileNr, Startplatz).
Aus irgendwelchen Gründen zeigt meine VBA-Hilfe dazu nur ein leeres Feld an; ich muss das wohl nach dem Urlaub nachsinstallieren.

Mein Makro listet alle Makros in den offenen Workbooks auf. Das ist mir wichtig, da ich in manchen Modulen mehrere Makros habe, total etwa 100 Stück, die ich immer langwierig suchen musste.
Hier nun mein Code, getestet mit XL2003 (mit Dank für die entscheidenden Tips von Marion und Reinhard):

Option Explicit
Sub ListAllMacros()
Dim CMdl, wb As Workbook, StartLine As Long, SearchLine As Long
Dim meld1 As String, meld2 As String, meld3 As String
Dim MakroName As String
'Alle "Sub" und alle "Private Sub" erfassen,
' nicht jedoch Ausdruecke wie z.B. "Subroutine", deshalb Leerschlag am Ende von "MakroName"
MakroName = "Sub "
ThisWorkbook.Activate
[A1].Activate
For Each wb In Workbooks
 meld1 = wb.Name
 For Each CMdl In wb.VBProject.VBComponents
 StartLine = 1
 meld2 = CMdl.Name
 With CMdl.CodeModule
 While .Find(MakroName, StartLine, 1, -1, -1, False, False, True)
 If InStr(.Lines(StartLine, 1), MakroName) = 1 Then
 ActiveCell.Value = meld1
 ActiveCell.Offset(0, 1).Value = meld2
 'auf Offset 0,2 soll nun der Namwe des Macros stehen,
 'also z.B "Sub MeinMacro(Parameter)" oder "Private Sub Hilfsmak(prm)"
 'das kann dann spaeter in Excel "auseinandergenommen" werden, falls erwuenscht.
 meld3 = .Lines(StartLine, 1)
 ActiveCell.Offset(0, 2).Value = meld3
 'naechste Zelle
 ActiveCell.Offset(1, 0).Activate
 .Find "End Sub", SearchLine, 1, -1, -1, False, False, True
 End If
 StartLine = StartLine + 1
 Wend
 End With
 Next CMdl
Next wb
Columns("A:C").AutoFit
[A1].Select
End Sub

Das war’s dann schon! Viel Vergnügen wünscht
Erich

Hallo erich,

was ist eigentlich mit
http://www.wer-weiss-was.de/cgi-bin/forum/showarticl…
? Brauchbar, nicht brauchbar?

Sehr brauchbar, aber ich sah vor lauter Bäumen den Wald nicht
mehr!

Ich bräucht auch mal Urlaub, das schärft den Blick, wünsch dir nen schönen Urlaub. Ich frage nicht wohin du färhst/fliegst, sonst werde ich evtl. neidisch :smile:

Dein Makro beantwortet meine Frage.
Die konkret gesuchte Syntax war: .Lines(ZeileNr, Startplatz).
Aus irgendwelchen Gründen zeigt meine VBA-Hilfe dazu nur ein
leeres Feld an; ich muss das wohl nach dem Urlaub
nachsinstallieren.

Wenn es um Module o.ä. geht bringt mir die Vba-Hilfe auch wenig bis nix :frowning:
Abilfe ist auf jeden Fall im Editor mit F2 den Objektkatalog einzublenden, aber da stehe ich genauso bescheuert davor wie vor einem Fahrscheinautomat in einer Großstadt.
Im Ernst, der Katalog bringt schon viele Infos, ob für deinen Fall, weiß ich nicht, aber irgendwie schreckt er mich ab :frowning:
Und ich weiß, das ist ein Fehler, ich müßte ihn mir „reinziehen“,…:frowning:

Mein Makro listet alle Makros in den offenen Workbooks
auf. Das ist mir wichtig, da ich in manchen Modulen mehrere
Makros habe, total etwa 100 Stück, die ich immer langwierig
suchen musste.

Ich bin sicher, ich habe hier Code gepostet, der genau das macht, also alle Prozeduren aller offenen Mappen aufzulisten.

Und, Jörg ist gut, also seine .xla die dir so gefiel ist einigermaßen sauber geschrieben, aber es listet nur Subs und Functions auf, keine Proberties, die ich auch habe.

Warum er kein Option Explicit benutzt ist mir völlig schleierhaft.

Und Erich, zu deinem Code, habe jetzt nur flüchtig drübergesehen, aber bei kurzem Code ist ja activecell okay, oder wenn es um selektierte Bereiche geht, ansonsten ist bei längerem Code völlig indiskutabel mit activecell oder activesheet zu arbeiten.

Wenn ich den Code in Modul35 lese, habe ich von activecell rein gar nix, da muss ich Modul 1 bis 34 durchpflügen um herauszufindeen was wo, warum, denn grad active ist.

In diesem Sinne, referenziere aussagekräftiger.

Gruß
Reinhard

Hier nun mein Code, getestet mit XL2003 (mit Dank für die
entscheidenden Tips von Marion und Reinhard):

Option Explicit
Sub ListAllMacros()
Dim CMdl, wb As Workbook, StartLine As Long, SearchLine As
Long
Dim meld1 As String, meld2 As String, meld3 As String
Dim MakroName As String
'Alle „Sub“ und alle „Private Sub“ erfassen,
’ nicht jedoch Ausdruecke wie z.B. „Subroutine“, deshalb
Leerschlag am Ende von „MakroName“
MakroName = "Sub "
ThisWorkbook.Activate
[A1].Activate
For Each wb In Workbooks
meld1 = wb.Name
For Each CMdl In wb.VBProject.VBComponents
StartLine = 1
meld2 = CMdl.Name
With CMdl.CodeModule
While .Find(MakroName, StartLine, 1, -1, -1, False,
False, True)
If InStr(.Lines(StartLine, 1), MakroName) = 1 Then
ActiveCell.Value = meld1
ActiveCell.Offset(0, 1).Value = meld2
'auf Offset 0,2 soll nun der Namwe des Macros
stehen,
'also z.B „Sub MeinMacro(Parameter)“ oder „Private
Sub Hilfsmak(prm)“
'das kann dann spaeter in Excel
„auseinandergenommen“ werden, falls erwuenscht.
meld3 = .Lines(StartLine, 1)
ActiveCell.Offset(0, 2).Value = meld3
'naechste Zelle
ActiveCell.Offset(1, 0).Activate
.Find „End Sub“, SearchLine, 1, -1, -1, False,
False, True
End If
StartLine = StartLine + 1
Wend
End With
Next CMdl
Next wb
Columns(„A:C“).AutoFit
[A1].Select
End Sub

Das war’s dann schon! Viel Vergnügen wünscht
Erich

Hallo Reinhard

Ich bräucht auch mal Urlaub, das schärft den Blick, wünsch dir
nen schönen Urlaub. Ich frage nicht wohin du färhst/fliegst,
sonst werde ich evtl. neidisch :smile:

Ich bin seit langem Rentner und geniesse meine Freiheit grenzenlos. Mit meiner Frau fliege ich jeden Sommer für 6-8 Wochen in die weite Welt (aber natürlich immer den Laptop dabei!)
Jetzt darfst du definitv neidisch sein!!

Abilfe ist auf jeden Fall im Editor mit F2 den Objektkatalog
aber irgendwie schreckt er mich ab :frowning:
Und ich weiß, das ist ein Fehler, ich müßte ihn mir
„reinziehen“,…:frowning:

Geht mir genau leich

Ich bin sicher, ich habe hier Code gepostet, der genau das
macht, also alle Prozeduren aller offenen Mappen aufzulisten.

JA, aber ich bastle halt gerne selbst herum, habe ja Zeit, s.oben

längerem Code völlig indiskutabel mit activecell oder
activesheet zu arbeiten.

Da hast du ganz reht. In dieser Hinsicht ist mein Code etwas flüchtig, wenn auch nicht so schlimm, wie mit dem Recorder!
Ich werde meinen Code noch etwas „stream-linen“; ich will ja auch die „Private Subs“ und die „Private3 Functions“ drin haben. Das ist jedoch nur noch Kosmetik.
Den Code lege ich in meiner Vorlagen-Mappe ab, damit ich ihn von ueberall her aufrufen kann. Dann natuerlich mit ActiveWorkbook!
So, und jetzt gehe ich noch in den Pazifik! *platsch-spritz*
Erich

Völlig OT Wäre hier Sommer
Hallo Erich,

grenzenlos. Mit meiner Frau fliege ich jeden Sommer für 6-8
Wochen in die weite Welt (aber natürlich immer den Laptop
dabei!)
Jetzt darfst du definitv neidisch sein!!

Wäre hier Sonnenschein, wäre mir die Vorstellung daß du am Pazifikstrand rummarschierst gleichgültig. Aber seit tagen regnet es hier, mir wachsen ja schon Schuppen und Flossen *glaub*
Ja, da werde ich schon ein bisschen neidisch, andrerseits kenne ich deine Frau ja nicht, das könnte das neidisch sein beieinflussen *kicher*

Ich bin sicher, ich habe hier Code gepostet, der genau das
macht, also alle Prozeduren aller offenen Mappen aufzulisten.

JA, aber ich bastle halt gerne selbst herum, habe ja Zeit,
s.oben

Ich auch. Z.B. den Code von Jörg (der Link von Marion zu der .xla von ihm) habe ich mir angeschaut, werde auch das mmit den Schlsselwörtern markieren übernehmen, aber in meinen Code.
Damit tue ich mich leichter, auch in Hinblick wenn ich in einem Jahr den Code nochmal sehe, als wenn ich seinen Code abändern würde damit er auch Properties auflistet.

Aber sowas wäge ich immer ab, was für mmich relativ einfacher ist. Fremdcode anzupassen oder eigenen Code mit Routinenen aus dem Fremdcode aufzupeppen.

So, und jetzt gehe ich noch in den Pazifik! *platsch-spritz*

Eins würde mich brennend interessieren, du hast hier einen provider mit dem du vom Laptop aus drahtlos ins Internet gehen kannst!?
Wenn du nun da am Pazifik bist, suchst du da einen amerikanischenn Provider!?
Und was kostet das denn dann so ca. pro Minute?

Damit der Moderator uns nicht ins Plauderbrett beamt, beende ich diesen Thread mal und warte nur noch ab auf die evtl. Antwort was so was kostet ohne darauf zu antworten *höchstwahrscheinlich*

Ich wünsche euch einen schönen Urlaub.

Gruß
Reinhard

Erich

Hallo Reinhard

kenne ich deine Frau ja nicht

Da bin ich richtig froh, du Ladykiller!

provider mit dem du vom Laptop aus drahtlos ins Internet gehen
kannst!?
Wenn du nun da am Pazifik bist, suchst du da einen
amerikanischenn Provider!?
Und was kostet das denn dann so ca. pro Minute?

Das kostet gar nichts !
Unsere „Kinder“ haben hier ein drahtloses Netz im Haus, da schliesse ich mich einfach an (Passwort!). Das Netz ist immer in Betrieb und die Kosten werden mit einer „FLAT RATE“ (=Pauschalpreis) erhoben. Ich bin so sorglos, dass ich nicht einmal weiss, wieviel das etwa kosten könnte!!
Es geht dann über einen USA-Provider, den ich auch nicht kenne!
Du siehst, ich bin ein rassenreiner Parasit!
Wenn ich mehr erfahren kann, werde ich dir ein Mail senden.
Regards
Erich

Hallo Marion

Debug.Print Application.VBE.CodePanes(1).CodeModule.Lines(4,1)

Prima und vielen Dank, aber …
Wo kann ich mehr ueber die SYNTAX erfahren? Bisher lerne ich alles so in kleinen Schrittchen durch kopieren von Beispielen, aber eigentlich tappe ich immer im VBA-Nebel herum. VBA-Hilfe und Objektinspektor geben da nicht viel her. z.B. sehe ich in deinem Code zum ersten Mal den Ausdruck „CodePanes(1)“. Wie komme ich systematisch an die Sache ran?
Danke fuer guten Hinweis
Erich

Hallo Erich

ich hatte zunächst im Objektkatalog nach code gesucht, da gibt es einiges, hatte dann sofort das entsprechende in VB umgesetzt , dachte, dass es so etwas auch in vba geben sollte. Dann habe ich ein wenig experimentiert (Versuch und Irrtum) Ist allerdings tatsächlich sehr dürftig, was man in der Hilfe findet. Besonders wenn man nicht weiß, wonach man sucht.
Ein wenig kann man in der Hilfe von VBIDE lesen unter codepanes und sich dann weiter klicken oder vielleicht hilft dir dies mehr

ftp://ftp.prosoft.ru/pub/Software/ICONICS/GEN32/CD/V…

Gruß
Marion

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