Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
596to600
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
596to600
596to600
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

@Oberschlumpf: Zeilen im VBA-Code und Modul ausles

@Oberschlumpf: Zeilen im VBA-Code und Modul ausles
13.04.2005 09:47:03
ChrisSp
Hi Thorsten,
du hattest vor knapp nem Monat mal was zum Thema Zeilen auslesen bei einem unbekannten Fehler geposten. Ich hatte ja ein bisschen was rumgemäckelt und dir versprochen meine Ideen einzubauen und mich zu melden.
Nun ja - hiermit will ich dies dann auch endlich mal tun.
Erstmal mein Kompliment für die Lösung - ist ne gute Möglichkeit gerade die Fehler zu behandeln, an die man nicht denkt, besonders wenn eine Anwendung von anderen Leuten genutzt wird.
Ich habe an deiner Prozedur "AddLn ()" ein bisschen was verändert.
- deine Eingangsprüfung habe ich bei mir auf den Start eines Moduls bezogen, nicht auf das Ende, aber das ist nur Ansichtssachen - wie man´s halt will
- dann habe ich Mid durch Left ersetzt - ebenfalls nur Kosmetik
- mir ist auch aufgefallen, warum du nicht InStr() verwendet hast - gibt Probleme das z.B. Sub auch in ".Subscript" bei Diagrammen vorkommt, deshalt also Mid (oder halt Left)
Nun aber zu den wesentlichen Anpassungen:
- wie letztens schon gesagt, habe ich noch "Option Explicit" mit aufgenommen
- dann gab´s bei mir immer Sorgen mit dem Zeilenumbruch, dann kam manchmal auch in die folgende Zeile die Zeilennummer, was dann die Anweisung unterbrochen hat - Ergebnis Fehler!
- Ähnliches Problem bei "Select Case", zwischen "Select Case" und dem ersten Case darf keine Zeilennummer stehen - keine Ahnung wieso, aber da kam bei mir immer ne Fehlermeldung.
Das war´s auch schon - du kannst also mit recht stolz auf dich sein ;o)
Ach ja - da hätte ich ja fast meine Geistigen Ergüsse vergessen:
'Nicht registrierte Benutzung der Excel Code Jeanie 1.0 <b><span style="color:#000080"; >Sub</span> AddLN()</b> <span style="color:#000080"; >If</span> pstrDatName <> "" <span style="color:#000080"; >And</span> pstrDatName = pstrNeuDatName <span style="color:#000080"; >Then</span> <span style="color:#000080"; >Exit</span> <span style="color:#000080"; >Sub</span> <span style="color:#000080"; >Dim</span> lstrZeile <span style="color:#000080"; >As</span> <span style="color:#000080"; >String</span>, liZeile <span style="color:#000080"; >As</span> <span style="color:#000080"; >Integer</span>, liSuche <span style="color:#000080"; >As</span> <span style="color:#000080"; >Integer</span>, lboLeer <span style="color:#000080"; >As</span> <span style="color:#000080"; >Boolean</span> <span style="color:#000080"; >Dim</span> li_Zaehler <span style="color:#000080"; >As</span> <span style="color:#000080"; >Integer</span> <span style="color:#000080"; >If</span> pstrDatName = "" <span style="color:#000080"; >Then</span> pstrDatName = Application.GetOpenFilename(<span style="color:#800000"; >"Text Files (*.txt), *.txt"</span>, , pstrUeberschrift) <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >If</span> pstrDatName = <span style="color:#800000"; >"Falsch"</span> <span style="color:#000080"; >Then</span> <span style="color:#000080"; >Exit</span> <span style="color:#000080"; >Sub</span> liZeile = 1 lboLeer = <span style="color:#000080"; >True</span> <span style="color:#000080"; >Open</span> pstrDatName <span style="color:#000080"; >For</span> <span style="color:#000080"; >Input</span> <span style="color:#000080"; >As</span> #1 <span style="color:#000080"; >Open</span> pstrVerz & <span style="color:#800000"; >"AddDelLN.txt"</span> <span style="color:#000080"; >For</span> Output <span style="color:#000080"; >As</span> #2 <span style="color:#000080"; >Do</span> <span style="color:#000080"; >While</span> <span style="color:#000080"; >Not</span> EOF(1) Line <span style="color:#000080"; >Input</span> #1, lstrZeile <span style="color:#000080"; >If</span> (InStr(1, lstrZeile, <span style="color:#800000"; >"Sub "</span>) <> 0 <span style="color:#000080"; >Or</span> InStr(1, lstrZeile, <span style="color:#800000"; >"Function "</span>) <> 0) _ <span style="color:#000080"; >And</span> InStr(1, lstrZeile, <span style="color:#800000"; >"End"</span>) = 0 <span style="color:#000080"; >And</span> InStr(1, lstrZeile, <span style="color:#800000"; >"Exit"</span>) = 0 <span style="color:#000080"; >Then</span> <span style="color:#008000"; >'Neue Prozedur/ Funktion startet</span> liZeile = 1 <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >If</span> Left(lstrZeile, 15) <> <span style="color:#800000"; >"Option Explicit"</span> <span style="color:#000080"; >And</span> _ Left(lstrZeile, 6) <> <span style="color:#800000"; >"Public"</span> <span style="color:#000080"; >And</span> _ Left(lstrZeile, 3) <> <span style="color:#800000"; >"Dim"</span> <span style="color:#000080"; >And</span> _ Left(lstrZeile, 7) <> <span style="color:#800000"; >"Private"</span> <span style="color:#000080"; >And</span> _ Left(lstrZeile, 8) <> <span style="color:#800000"; >"Function"</span> <span style="color:#000080"; >And</span> _ Left(lstrZeile, 12) <> <span style="color:#800000"; >"End Function"</span> <span style="color:#000080"; >And</span> _ Left(lstrZeile, 3) <> <span style="color:#800000"; >"Sub"</span> <span style="color:#000080"; >And</span> _ Left(lstrZeile, 7) <> <span style="color:#800000"; >"End Sub"</span> <span style="color:#000080"; >And</span> _ Right(lstrZeile, 1) <> <span style="color:#800000"; >":"</span> <span style="color:#000080"; >Then</span> <span style="color:#008000"; >'Left(lstrZeile, 1) <> "'" And</span> <span style="color:#000080"; >For</span> liSuche = 1 <span style="color:#000080"; >To</span> Len(lstrZeile) <span style="color:#000080"; >If</span> <span style="color:#000080"; >Mid</span>(lstrZeile, liSuche, 1) <> <span style="color:#800000"; >" "</span> <span style="color:#000080"; >Then</span> <span style="color:#008000"; >'Zeile ist keine Leerzeile!</span> lboLeer = <span style="color:#000080"; >False</span> <span style="color:#000080"; >Exit</span> <span style="color:#000080"; >For</span> <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >Next</span> <span style="color:#000080"; >If</span> lboLeer = <span style="color:#000080"; >True</span> <span style="color:#000080"; >Then</span> <span style="color:#008000"; >'=> Leerzeile, wird einfach nur übernommen!</span> <span style="color:#000080"; >Print</span> #2, lstrZeile <span style="color:#000080"; >Else</span> <span style="color:#000080"; >If</span> li_Zaehler = 0 <span style="color:#000080"; >Then</span> <span style="color:#008000"; >'Bisher kein Zeilenumbruch angefangen</span> <span style="color:#000080"; >If</span> InStr(1, lstrZeile, <span style="color:#800000"; >"'"</span>, vbTextCompare) <> 0 <span style="color:#000080"; >Then</span> <span style="color:#000080"; >If</span> Left(lstrZeile, 1) = <span style="color:#800000"; >"'"</span> <span style="color:#000080"; >Then</span> <span style="color:#008000"; >' => ges. Zeile ist ein Kommentar</span> <span style="color:#000080"; >Print</span> #2, lstrZeile lboLeer = <span style="color:#000080"; >True</span> <span style="color:#000080"; >Else</span> <span style="color:#000080"; >For</span> liSuche = 1 <span style="color:#000080"; >To</span> InStr(1, lstrZeile, <span style="color:#800000"; >"'"</span>, vbTextCompare) - 1 <span style="color:#000080"; >If</span> <span style="color:#000080"; >Mid</span>(lstrZeile, liSuche, 1) <> <span style="color:#800000"; >" "</span> <span style="color:#000080"; >Then</span> <span style="color:#008000"; >' Vor dem "'" stehen noch Zeiche => Zeilennummer kann gesetzt werden</span> <span style="color:#000080"; >Print</span> #2, liZeile & <span style="color:#800000"; >" "</span> & lstrZeile liZeile = liZeile + 1 lboLeer = <span style="color:#000080"; >True</span> <span style="color:#000080"; >Exit</span> <span style="color:#000080"; >For</span> <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >Next</span> <span style="color:#000080"; >If</span> lboLeer = <span style="color:#000080"; >False</span> <span style="color:#000080"; >Then</span> <span style="color:#008000"; >'vor dem "'" stehen keine Zeichen mehr (nur Leerzeichen)</span> <span style="color:#000080"; >Print</span> #2, lstrZeile lboLeer = <span style="color:#000080"; >True</span> <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >If</span> Right(lstrZeile, 2) = <span style="color:#800000"; >" _"</span> <span style="color:#000080"; >Then</span> li_Zaehler = li_Zaehler + 1 <span style="color:#000080"; >Else</span> <span style="color:#008000"; >'Prüfung, auf Select Case - Anwendung, wenn ja - ebenfalls keine Ziffer in der nächsten Zeile</span> <span style="color:#000080"; >If</span> InStr(1, lstrZeile, <span style="color:#800000"; >"Select Case "</span>) <> 0 <span style="color:#000080"; >Then</span> <span style="color:#000080"; >For</span> liSuche = InStr(1, lstrZeile, <span style="color:#800000"; >"Select Case "</span>) - 1 <span style="color:#000080"; >To</span> 1 <span style="color:#000080"; >Step</span> -1 <span style="color:#000080"; >If</span> <span style="color:#000080"; >Mid</span>(lstrZeile, liSuche, 1) <> <span style="color:#800000"; >" "</span> <span style="color:#000080"; >Then</span> <span style="color:#008000"; >'Es gibt noch Zeicher vor Select Case => Nummer kann gesetzt werden</span> <span style="color:#000080"; >Exit</span> <span style="color:#000080"; >For</span> <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >Next</span> <span style="color:#000080"; >If</span> liSuche > -1 <span style="color:#000080"; >Then</span> li_Zaehler = li_Zaehler + 1 <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >Else</span> <span style="color:#000080"; >If</span> Right(lstrZeile, 2) = <span style="color:#800000"; >" _"</span> <span style="color:#000080"; >Then</span> li_Zaehler = li_Zaehler + 1 <span style="color:#000080"; >Print</span> #2, liZeile & <span style="color:#800000"; >" "</span> & lstrZeile liZeile = liZeile + 1 lboLeer = <span style="color:#000080"; >True</span> <span style="color:#000080"; >Else</span> <span style="color:#008000"; >'Prüfung, auf Select Case - Anwendung, wenn ja - ebenfalls keine Ziffer in der nächsten Zeile</span> <span style="color:#000080"; >If</span> InStr(1, lstrZeile, <span style="color:#800000"; >"Select Case "</span>) <> 0 <span style="color:#000080"; >Then</span> <span style="color:#000080"; >For</span> liSuche = InStr(1, lstrZeile, <span style="color:#800000"; >"Select Case "</span>) - 1 <span style="color:#000080"; >To</span> 1 <span style="color:#000080"; >Step</span> -1 <span style="color:#000080"; >If</span> <span style="color:#000080"; >Mid</span>(lstrZeile, liSuche, 1) <> <span style="color:#800000"; >" "</span> <span style="color:#000080"; >Then</span> <span style="color:#008000"; >'Es gibt noch Zeicher vor Select Case => Nummer kann gesetzt werden</span> <span style="color:#000080"; >Exit</span> <span style="color:#000080"; >For</span> <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >Next</span> <span style="color:#000080"; >If</span> liSuche > -1 <span style="color:#000080"; >Then</span> li_Zaehler = li_Zaehler + 1 <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >Print</span> #2, liZeile & <span style="color:#800000"; >" "</span> & lstrZeile liZeile = liZeile + 1 lboLeer = <span style="color:#000080"; >True</span> <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >Else</span> <span style="color:#008000"; >'mindestens in der vorhergehenden Zeile ist ein Zeilenumbruch _ => keine Zeilennummer schreiben, da sonst Fehlermeldung</span> <span style="color:#000080"; >If</span> Right(lstrZeile, 2) = <span style="color:#800000"; >" _"</span> <span style="color:#000080"; >Then</span> li_Zaehler = li_Zaehler + 1 <span style="color:#000080"; >Print</span> #2, lstrZeile lboLeer = <span style="color:#000080"; >True</span> <span style="color:#000080"; >Else</span> li_Zaehler = 0 <span style="color:#000080"; >Print</span> #2, lstrZeile lboLeer = <span style="color:#000080"; >True</span> <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >Else</span> <span style="color:#008000"; >'Zeile enthält eines der Schlüsselwörter</span> <span style="color:#008000"; >'Zeile einfach nur kopieren, ohne Zeilennummer</span> <span style="color:#000080"; >Print</span> #2, lstrZeile <span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span> <span style="color:#000080"; >Loop</span> <span style="color:#000080"; >Close</span> <b><span style="color:#000080"; >End</span> <span style="color:#000080"; >Sub</span></b>
Vielleicht findest du ja noch ein paar andere Änderungen, bis jetzt sind mir jedenfalls noch keine Fehler aufgefallen
Gruss
Chris
PS: Ach ja wie kann ich eigentlich auf den alten Thread verweisen?

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Zusatz: hat nicht ganz geklappt mit dem Code
13.04.2005 09:49:36
ChrisSp
Hier also der Code:

Sub AddLN()
If pstrDatName <> "" And pstrDatName = pstrNeuDatName Then Exit Sub
Dim lstrZeile As String, liZeile As Integer, liSuche As Integer, lboLeer As Boolean
Dim li_Zaehler As Integer
If pstrDatName = "" Then
pstrDatName = Application.GetOpenFilename("Text Files (*.txt), *.txt", , pstrUeberschrift)
End If
If pstrDatName = "Falsch" Then Exit Sub
liZeile = 1
lboLeer = True
Open pstrDatName For Input As #1
Open pstrVerz & "AddDelLN.txt" For Output As #2
Do While Not EOF(1)
Line Input #1, lstrZeile
If (InStr(1, lstrZeile, "

Sub ")  0 Or InStr(1, lstrZeile, "

Function ") <> 0) _
And InStr(1, lstrZeile, "End") = 0 And InStr(1, lstrZeile, "Exit") = 0 Then
'Neue Prozedur/ Funktion startet
liZeile = 1
End If
If Left(lstrZeile, 15) <> "Option Explicit" And _
Left(lstrZeile, 6) <> "Public" And _
Left(lstrZeile, 3) <> "Dim" And _
Left(lstrZeile, 7) <> "Private" And _
Left(lstrZeile, 8) <> "Function" And _
Left(lstrZeile, 12)  "End Function
" And _
Left(lstrZeile, 3) "Sub" And _
Left(lstrZeile, 7) "End Sub
" And _
Right(lstrZeile, 1) ":" Then 'Left(lstrZeile, 1) "'" And

For liSuche = 1 To Len(lstrZeile)
If Mid(lstrZeile, liSuche, 1) " " Then
'Zeile ist keine Leerzeile!
lboLeer = False
Exit For
End If
Next
If lboLeer = True Then
'=> Leerzeile, wird einfach nur übernommen!
Print #2, lstrZeile
Else
If li_Zaehler = 0 Then
'Bisher kein Zeilenumbruch angefangen
If InStr(1, lstrZeile, "'", vbTextCompare) 0 Then
If Left(lstrZeile, 1) = "'" Then
' => ges. Zeile ist ein Kommentar
Print #2, lstrZeile
lboLeer = True
Else
For liSuche = 1 To InStr(1, lstrZeile, "'", vbTextCompare) - 1
If Mid(lstrZeile, liSuche, 1) " " Then
' Vor dem "'" stehen noch Zeiche => Zeilennummer kann gesetzt werden
Print #2, liZeile & " " & lstrZeile
liZeile = liZeile + 1
lboLeer = True
Exit For
End If
Next
If lboLeer = False Then
'vor dem "'" stehen keine Zeichen mehr (nur Leerzeichen)
Print #2, lstrZeile
lboLeer = True
End If
End If
If Right(lstrZeile, 2) = " _" Then
li_Zaehler = li_Zaehler + 1
Else
'Prüfung, auf Select Case - Anwendung, wenn ja - ebenfalls keine Ziffer in der nächsten Zeile
If InStr(1, lstrZeile, "Select Case ") 0 Then
For liSuche = InStr(1, lstrZeile, "Select Case ") - 1 To 1 Step -1
If Mid(lstrZeile, liSuche, 1) " " Then
'Es gibt noch Zeicher vor Select Case => Nummer kann gesetzt werden
Exit For
End If
Next
If liSuche > -1 Then
li_Zaehler = li_Zaehler + 1
End If
End If
End If
Else
If Right(lstrZeile, 2) = " _" Then
li_Zaehler = li_Zaehler + 1
Print #2, liZeile & " " & lstrZeile
liZeile = liZeile + 1
lboLeer = True
Else
'Prüfung, auf Select Case - Anwendung, wenn ja - ebenfalls keine Ziffer in der nächsten Zeile
If InStr(1, lstrZeile, "Select Case ") 0 Then
For liSuche = InStr(1, lstrZeile, "Select Case ") - 1 To 1 Step -1
If Mid(lstrZeile, liSuche, 1) " " Then
'Es gibt noch Zeicher vor Select Case => Nummer kann gesetzt werden
Exit For
End If
Next
If liSuche > -1 Then
li_Zaehler = li_Zaehler + 1
End If
End If
Print #2, liZeile & " " & lstrZeile
liZeile = liZeile + 1
lboLeer = True
End If
End If
Else
'mindestens in der vorhergehenden Zeile ist ein Zeilenumbruch _
=> keine Zeilennummer schreiben, da sonst Fehlermeldung
If Right(lstrZeile, 2) = " _" Then
li_Zaehler = li_Zaehler + 1
Print #2, lstrZeile
lboLeer = True
Else
li_Zaehler = 0
Print #2, lstrZeile
lboLeer = True
End If
End If
End If
Else
'Zeile enthält eines der Schlüsselwörter
'Zeile einfach nur kopieren, ohne Zeilennummer
Print #2, lstrZeile
End If
Loop
Close
End Sub

Gruss
Chris
Anzeige
AW: Zusatz: hat nicht ganz geklappt mit dem Code
14.04.2005 11:15:21
Oberschlumpf
Hi Chris
Uih..cool...vielen Dank für Deine Antwort.
Ich werd mir alles heut abend zu Hause mal genauer ansehen.
Und "stolz" bin ich wirklich ein klitzekleines bisschen auf mich :-)
Denn mit dieser Lösung ist es nun wirklich einfacher, den noch vorhandenen Fehlern auf die Schliche zu kommen.
Den Eingangsthread, den ich erstellte, habe ich über google.de wiedergefunden.
Als Suchtext gab ich dieses ein: "Oberschlumpf site:herber.de"
Und der Link ist dieser:
https://www.herber.de/index.html?https://www.herber.de/forum/archiv/588to592/t588197.htm
Nun kann wieder jeder Interessierte nachlesen, worüber wir hier schreiben :-)
Ciao
Thorsten
Anzeige

286 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige