E_Book von Monika Weber

Hallo Marion und Reinhard
Ich habe weiter unten das E-Book von Monika Weber genannt. Leider fuehrt der angegebene Link nur zur Seite, wo man das Buch kaufen kann.
Der richtige Link (Angabe von PC-Welt) zum Gratisbezug der PDF ist:

http://isys-htlwy.net/excel_codebook.pdf

Jedoch hat auch dieser Link einen Haken: Ich brachte es nicht fertig, das PDF herunterzuladen, sondern konnte es nur online ansehen. (allerdings auf meinem alten „Urlaubs-Laptop“)

Und noch das:
Ich bemuehe mich z.Z. ein Makro zu schreiben, das alle Makros der geoeffneten Worksheets aufistet. Dabei habe ich noch ein kleines (?) Problem: Ich moechte bei erfolgreicher Suche die Titelzeie des Makros in eine Excelzeile schreiben. Wie heisst diese Zeile, ich habe mit „Name“ „Value“ „Text“ bisher keinen Erfolg.
Das fertige Makro werde ich gerne hier vorstellen (wenn es dann einmal so weit ist!)
Erich

Ich bemuehe mich z.Z. ein Makro zu schreiben, das alle Makros
der geoeffneten Worksheets aufistet. Dabei habe ich noch ein
kleines (?) Problem: Ich moechte bei erfolgreicher Suche die
Titelzeie des Makros in eine Excelzeile schreiben. Wie heisst
diese Zeile, ich habe mit „Name“ „Value“ „Text“ bisher keinen
Erfolg.
Das fertige Makro werde ich gerne hier vorstellen (wenn es
dann einmal so weit ist!)

Hallo Erich,
anstatt mit Tweak Ui Mist zu bauen *sehr sorry, kicher*, solltest du mal hier nach deinen Beiträgen scrollen, ich habe dir Code geschrieben der Prozeduren (auch Makros sind Prozeduren) auflistet, egal in welchem worksheet oder workbook eines Verzichnisses.
Kein Wunder daß da keine Rückmeldung kommt, wenn du das gar nicht liest :frowning:
Gruß
Reinhard

Rückmeldung zum Herunterladen

Der richtige Link (Angabe von PC-Welt) zum Gratisbezug der PDF
ist:

http://isys-htlwy.net/excel_codebook.pdf
Jedoch hat auch dieser Link einen Haken: Ich brachte es nicht
fertig, das PDF herunterzuladen, sondern konnte es nur online
ansehen. (allerdings auf meinem alten „Urlaubs-Laptop“)

Hallo Erich,
nur zur Info, die PDF hat so 10 MB, hier im Inet-Cafe war das Herunterladen kein Problem.
Gruß
Reinhard

Hallo Reinhard

Kein Wunder daß da keine Rückmeldung kommt, wenn du das gar
nicht liest :frowning:

Ich lese alles sehr sorgfaeltig, besonders wenn es von Marion oder Reinhard kommt *auch kicher*
Was ich bisher nicht fertig gebracht habe, ist, die Makro namen in den einzelnen Moduln auszulesen. Ich sende euch nun meinen heutigen Stand, mit der Bitte, die Zeile mit den „???“ zu editieren.

Option Explicit
Sub ListAllMacros()
Dim CMdl, wb As Workbook, StartLine As Long, SearchLine As Long
Dim meld1 As String, meld2 As String, Name As String
Dim MakroName As String

'Alle "Sub" und alle "Private Sub" erfassen,
' nicht jedoch Ausdruecke wie z.B. "Subroutine"
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 voe Namwe des Macros stehen,
 'also z.B "Sub MeinMacro(Parameter)"
 'das kann dann spaeter in Excel "auseinandergenommen" werden.
**ActiveCell.Offset(0, 2).Value = "???"**

 'naechste Zelle
 ActiveCell.Offset(1, 0).Activate
 .Find "End Sub", SearchLine, 1, -1, -1, False, False, True
 End If
 lngStartLine = lngStartLine + 1
 Wend
 End With
 Next CMdl
Next wb
End Sub

Dabei wird auch klar, dass ich sehr wohl die Vorabeiten von Reinhatd sehr geschaetzt, angewandt und fast missbraucht habe.
Ich freue mich auf Antworten.
Erich

http://isys-htlwy.net/excel_codebook.pdf

Jedoch hat auch dieser Link einen Haken: Ich brachte es nicht
fertig, das PDF herunterzuladen, sondern konnte es nur online
ansehen. (allerdings auf meinem alten „Urlaubs-Laptop“)

wenn Du den Link hier hast…
rechte maustaste -> Ziel speichern unter…

und auch bei der webansicht hat mein Acrobat links oben einen Knopf
„save a copy“. Der tuts auch…

Makros , Prozeduren auflisten

Was ich bisher nicht fertig gebracht habe, ist, die
Makro namen in den einzelnen Moduln auszulesen. Ich
sende euch nun meinen heutigen Stand, mit der Bitte, die Zeile
mit den „???“ zu editieren.

Hallo Erich,
sorry, habe mir jetzt den Code nicht näher angesehen, weil, ich
glaube ich habe was besseres erschaffen.

Warnung:
Vor Austestung des nachfolgenden Codes, sollte man seine excel.xlb
sichern. Wenn man in den Symbolleisten nie was geändert hat, braucht
man das nicht, dann löscht man einfach excel.xlb und fertig, Excel
legt beim Start dann eine neue mit den Standardeinstellungen an, kein
Problem.

Hintergrund ist, ich habe in einem Verzeichnis eine
Datei „findlinks.xlS“. Das ist zwar eine xlS, aber irgendwie auch
eine xlA, habe das noch nicht ganz kapiert.

Jedenfalls verabschiedete sich Excel grußlos als es diese Datei
öffnen sollte. Aus dem Grund ist im Code die Fehlerroutine drinnen,
die dann solche Dateien am Ende der Tabelle auflistet, wo es diese
Problematik gibt.

(Wer sich mit dem Code beschäftigen will, normalerweise ist nach
Workbook.open die neue Mappe das Achtiveworkbook, bei findlink.xls
war das völlig anders, da war, weil das Öffnen nicht korrekt
funktionierte o.ä. die Mappe die die Codes enthielt das
Activeworkbook, was dann logischerweise schlecht kam bei wb.close
*gg*. Deshalb an der dortigen Stelle im Code nochmals die
Namensüberprüfung bevor eine Mappe geschlossen wird.)

Warum man seine excel.xlb sichern soll? Nun, nach vielen
Codetestungen hatte ich in der Symbolleiste, weiß gar nicht mehr
unter welchen Menuepunkt, 50mal die Eintragung „findlink“.
Nur deshalb die Warnung.

Getestet auf XL2000.
Neue Features:

Die Dateinamen werden als Hyperlink eingetragen, so daß man sie
bequem öffnen kann.
Die geschätzte Restzeit bis der Code fertig ist wird in der
Statuszeile angezeigt.
Dateien mit denen es beherrschbare Probleme gab werden am Ende der
Tabelle aufgelistet und der Code springt bei Programmende dann dahin.
Sollten unlösbare Probleme auftreten so wird die Datei genannt mit
der es diese gab.

Code für Modul1 :

Option Explicit
Public Zei As Long, Spa As Integer

Sub MappenOeffnen()
'Öffnet alle Dateien im Ordner "Pfad" und listet alle Prozeduren auf.
'2007 by Reinhard
Dim wb, Pfad As String, fs As FileSearch, N As Long, ws As Worksheet
Dim oldStatusBar, Anz As Long, ProblemDateien() As Variant, PD As Long
Dim AllesOK As Boolean, Meldung As String, PfadDatei As String
Dim PfadDateiNr As Long, Gefunden As Long, Zeit As Double, Von As Double
Dim Schnitt As Double, Restzeit As Double, Restmin As Byte, Restsek As Byte
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
'On Error GoTo Fehler
'Pfad = "C:\Download"
'Pfad = ThisWorkbook.Path
Pfad = "C:\Download"
Set ws = ThisWorkbook.Worksheets("Tabelle1")
Set fs = Application.FileSearch
Call MappenSchliessen
oldStatusBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
Zei = 1
Spa = 1
With ws
 .Cells.Clear
 .Hyperlinks.Delete
 .Cells.Font.ColorIndex = xlAutomatic
 .[A2:smiley:2] = Split("Mappe Modul Prozedur Code")
 .[A2:smiley:2].Copy Destination:=.[E2:IV2]
 .[A1] = "Pfad: " & Pfad
 .[A1].Font.Bold = True
End With
ActiveWindow.FreezePanes = False
With fs
 .LookIn = Pfad
 .Filename = "\*.xls"
 .SearchSubFolders = True
 .Execute
 Gefunden = .FoundFiles.Count
 Restzeit = .FoundFiles.Count \* 2
 Restmin = Int(Restzeit / 60)
 Restsek = Restzeit - 60 \* Restmin
 For N = 1 To .FoundFiles.Count
 Von = Timer
 If InStr(.FoundFiles(N), "\Personl.xls") = 0 And InStr(.FoundFiles(N), "\" & ThisWorkbook.Name) = 0 Then
 PfadDatei = .FoundFiles(N)
 PfadDateiNr = N
 Workbooks.Open .FoundFiles(N), 0, True
 Set wb = ActiveWorkbook
 If UCase(wb.Name) "PERSONL.XLS" And wb.Name ThisWorkbook.Name Then
 Meldung = "Bearbeite gerade " & N & " / " & .FoundFiles.Count & " Dateien."
 Meldung = Meldung & " Geschätze Restzeit: " & Restmin & " Minuten und "
 Meldung = Meldung & Restsek & " Sekunden."
 Application.StatusBar = Meldung
 Call ListProcedures2(wb)
 If wb.Name ThisWorkbook.Name Then wb.Close savechanges:=False
 Else
 Anz = Anz + 1
 ReDim Preserve ProblemDateien(Anz)
 ProblemDateien(Anz) = .FoundFiles(N)
 End If
 End If
 Zeit = Zeit + Timer - Von
 Schnitt = Zeit / N
 If Int(Schnitt \* (.FoundFiles.Count - N)) 0 Then
 Call ZeileSpalte
 ws.Cells(Zei, Spa) = "Probleme gab es mit:"
 For PD = 1 To Anz
 Call ZeileSpalte
 ws.Hyperlinks.Add Anchor:=ws.Cells(Zei, Spa), Address:=ProblemDateien(PD), ScreenTip:=ProblemDateien(PD), TextToDisplay:=Mid(ProblemDateien(PD), InStrRev(ProblemDateien(PD), "\") + 1)
 'ws.Cells(Zei, Spa) = ProblemDateien(PD)
 Next PD
End If
ws.Range("A1").Select
Fehler:
Application.StatusBar = False
Application.DisplayStatusBar = oldStatusBar
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
'ws.[A3].Select
If AllesOK = True Then
 If Anz = 0 Then
 MsgBox "Die Prozeduren von " & Gefunden & " Dateien wurden problemlos aufgelistet."
 Else
 MsgBox "Es wurden die Prozeduren von " & Gefunden - Anz & " der " & Gefunden & " Dateien aufglistet."
 ws.Cells(Zei, Spa).Select
 End If
Else
 MsgBox "Es gibt ein unlösbares Problem mit der Datei " & PfadDatei & Chr(13) \_
 & "Es ist die Datei " & PfadDateiNr & " / " & Gefunden
End If
End Sub


Sub MappenSchliessen()
Dim wb As Workbook
For Each wb In Workbooks
 If UCase(wb.Name) "PERSONL.XLS" And wb.Name ThisWorkbook.Name Then
 wb.Close savechanges:=False
 End If
Next wb
End Sub


Sub ListProcedures2(ByVal wb As Workbook)
Dim VBCodeMod As CodeModule, lngStartLine As Long, strMsg As String
Dim strModName As String, CMdl, Zeile As Long, Spalte As Integer
Dim N As Long, Von As Long, Bis As Long, Prozedur As String
Dim ws As Worksheet, Meldung As String
Call ZeileSpalte
Set ws = ThisWorkbook.Worksheets("Tabelle1")
On Error Resume Next
ws.Hyperlinks.Add Anchor:=ws.Cells(Zei, Spa), Address:=wb.FullName, ScreenTip:=Mldg(wb), TextToDisplay:=wb.Name
For Each CMdl In wb.VBProject.VBComponents
 ws.Cells(Zei, Spa + 1) = CMdl.Name
 Set VBCodeMod = wb.VBProject.VBComponents(CMdl.Name).CodeModule
 With VBCodeMod
 'ws.Cells(Zei, Spa + 2) = VBCodeMod.Name
 For N = 1 To .CountOfLines
 If IstProz(.Lines(N, 1)) "" Then ws.Cells(Zei, Spa + 2) = IstProz(.Lines(N, 1))
 ws.Cells(Zei, Spa + 3) = .Lines(N, 1)
 If InStr(.Lines(N, 1), "'") \> 0 Then
 ws.Cells(Zei, Spa + 3).Characters(Start:=InStr(.Lines(N, 1), "'"), Length:=Len(.Lines(N, 1)) - InStr(.Lines(N, 1), "'") + 1).Font.ColorIndex = 5
 End If
 Call ZeileSpalte
 Next N
 End With
Next CMdl
ws.UsedRange.Columns.AutoFit
End Sub


Function ZeileSpalte()
Zei = Zei + 1
If Zei \> ThisWorkbook.Worksheets("Tabelle1").Rows.Count Then
 Zei = 2
 Spa = Spa + 4
End If
End Function


Function IstProz(ByVal Zeile As String)
Dim Vorh As Boolean, N As Byte, Woerter
Woerter = Array("Sub ", "Function ", "Property ")
For N = 0 To UBound(Woerter)
 If InStr(Zeile, Woerter(N)) \> 0 Then
 If InStr(Zeile, "'") = 0 Then
 IstProz = Zeile
 Else
 If InStr(Zeile, "'") \> InStr(Zeile, ")") Then
 IstProz = Left(Zeile, InStr(Zeile, "'") - 1)
 End If
 End If
 Exit For
 End If
Next N
End Function


Function Mldg(ByVal wb As Workbook) As String
Mldg = wb.FullName & Chr(10) & Chr(10)
Mldg = Mldg & "Erstellt von: " & wb.BuiltinDocumentProperties("Author") & Chr(10)
Mldg = Mldg & "Erstellt am: " & wb.BuiltinDocumentProperties("Creation date") & Chr(10)
Mldg = Mldg & "Zuletzt benutzt von: " & wb.BuiltinDocumentProperties("Last author") & Chr(10)
Mldg = Mldg & "Zuletzt benutzt am: " & wb.BuiltinDocumentProperties("Last save time") & Chr(10)
Mldg = Mldg & "Dateigröße: " & FileLen(wb.FullName) & " Bytes."
End Function

Gruß
Reinhard

Hallo Erich

Der richtige Link (Angabe von PC-Welt) zum Gratisbezug der PDF
ist:

http://isys-htlwy.net/excel_codebook.pdf

Jedoch hat auch dieser Link einen Haken: Ich brachte es nicht
fertig, das PDF herunterzuladen, sondern konnte es nur online
ansehen. (allerdings auf meinem alten „Urlaubs-Laptop“)

Der Link und auch runterladen funktioniert einwandfrei. Danke - so wie ich etwas Zeit habe, werde ich mich mit der Lektüre beschäftigen.

Und noch das:
Ich bemuehe mich z.Z. ein Makro zu schreiben, das alle Makros
der geoeffneten Worksheets aufistet. Dabei habe ich noch ein
kleines (?) Problem: Ich moechte bei erfolgreicher Suche die
Titelzeie des Makros in eine Excelzeile schreiben. Wie heisst
diese Zeile, ich habe mit „Name“ „Value“ „Text“ bisher keinen
Erfolg.

vielleicht hilft dir dabei der folgende Link auf eine nicht mehr gepflegte aber noch funktionierende Seite von Jörg Lorenz
http://www.excel-vba.de/3_1_1.htm
unter dem Titel „Makros auflisten“ (etwas nach unten scrollen) gibt es eine Zip-Datei mit einem xla, das man bearbeiten kann. Auf dieser Seite kann man ohne Kosten runterladen im Gegensatz zur neuen Seite :wink:

Das fertige Makro werde ich gerne hier vorstellen (wenn es
dann einmal so weit ist!)

bin schon gespannt
Lieben Gruß
Marion

Hallo Erich
Ich hab mich schon gefragt, was denn d i e Monika Weber hier zu suchen hat, die Ex-Stadträtin von Zürich.
Grüsse Niclaus

Hallo Marion
Danke fuer den Super -Hinweis auf das „Makro_auflisten.xla“. Das Makro ist so perfekt, dass ich zuerst einmal kapitulierte und meine bescheidenen Bemuehungen beiseite legen wollte.
Nun meine ich jedoch, mein „Makro-in-spe“ mit max. 40 Zeilen hat auch seine Berechtigung gegenueber dem Profi-Mkaro mit 300 Zeilen!
Ich werde es auf jeden Fall hier vorstellen.
Bis dann
Erich

Hallo Niclaus

Ich hab mich schon gefragt, was denn d i e Monika Weber
hier zu suchen hat, die Ex-Stadträtin von Zürich.

Ja, mein lieber Niclaus, es gibt halt auf dieser kleinen Welt viele „Monika Weber“ ,sogar unser lieber Guugel kennt etwa 2,5 Millionen solche! Jedoch die zwei, die wir kennen, sind bestimmt die zwei besten.
Gruss
Erich

Hallo MunichFreak

wenn Du den Link hier hast…
rechte maustaste -> Ziel speichern unter…

Besten Dank, hat geklappt!
Erich