Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

VBA Open Methode

Betrifft: VBA Open Methode von: Jens
Geschrieben am: 20.09.2004 13:27:48

Hallo Leute,

ich bin dabei mir einen Parser zu programmieren, der externe Texttemplates einliest und dann bei bestimmten Platzhaltern den Wert gegen Daten aus der Tabelle ersetzt.

Leider hab ich das Problem, dass ich es nicht hinbekomme die gesamte Textdatei einzulesen... irgendwie nimmt er immer nur die letzte Zeile.

Hat jemand einen Tipp?
Bin für jede Hilfe sehr dankbar ;-)
Ciao
Jens


Function getTemplate(location As String) As String
   Dim txt As String
   Open location For Input As #1
   Do Until EOF(1)
      Line Input #1, txt
   Loop
   Close
   getTemplate = txt
End Function



Function parser(templateSource As String) As String
templateSource = Replace(templateSource, "%%vorname%%", "Jens")
templateSource = Replace(templateSource, "%%nachname%%", "Müller")
templateSource = Replace(templateSource, "%%Kundennummer%%", "123435")
parser = templateSource
End Function



Sub DoParse(where As String)
MsgBox (parser(getTemplate("c:\test.txt")))
End Sub

  


Betrifft: AW: VBA Open Methode von: Jens
Geschrieben am: 20.09.2004 13:43:31

ach so... hier noch der inhalt des textfiles. Im Moment parst er nur die letzte Zeile. Die obere taucht in der MsgBox Ausgabe gar nicht erst auf... Oder liegt das vielleicht an der MsgBox, dass ich immer nur die letzte Zeile zu sehen bekomme? Hat das was mit Zeilenumbrüchen zu tun?

%%kundennummer%%
Sehr geehrter %%vorname%% %%nachname%%


  


Betrifft: AW: VBA Open Methode von: Frank
Geschrieben am: 20.09.2004 13:44:35

Hallo Jens,

eigentlich ist die Sache klar: Bei jedem Aufruf von getTemplate wird Test.TXT geöffnet, anschließend in der Do Until Schleife bis zum letzten Satz geblättert, dann wird die Datei geschlossen und der letzte Satz als String zurückgegeben. Und beim nächsten Aufruf der Funktion beginnt das Spiel wieder von vorn.

Bau die Open und Close Anweisung in die DoParse-Prozedur ein. Und die Do Until-Schleife rausnehmen und durch eine If-Abfrage ewrsetzen:
If Not EOF(1) then
LineInput #1, txt
else
close #1
end if

Hoffe, es hat geholfen.

Gruß Frank


  


Betrifft: AW: VBA Open Methode von: jetzt nimmt er nur die erste zeile *fg*
Geschrieben am: 20.09.2004 13:55:06

Hallo Frank,

erstmal danke für Deine Hilfe ;-)

Ich hab die Änderungen mal eingebaut, nur parst er nu die erste Zeile und ignoriert die Folgezeilen :-(

Ich versteh das irgendwie nich, man muss doch irgendwie son dusseliges Textfile vollständig in ne Variable schreiben können.




Function parser(templateSource As String) As String
templateSource = Replace(templateSource, "%%vorname%%", "Jens")
templateSource = Replace(templateSource, "%%nachname%%", "Müller")
templateSource = Replace(templateSource, "%%kundennummer%%", "123435")
parser = templateSource
End Function



Function DoParse(where As String) As String

Dim txt As String
Open where For Input As #1

If Not EOF(1) Then
Line Input #1, txt
Else
Close #1
End If

Close

DoParse = parser(txt)

End Function



  


Betrifft: AW: VBA Open Methode von: Frank
Geschrieben am: 20.09.2004 14:13:47

Hallo Jens,

versuch´s mal so:

Sub DoParse()
Dim txt as String
Open "C:\Test.TXT" for Input as #1
Do While Not EOF(1)
LineInput #1, txt
MsgBox(parser(txt))
Loop
End Sub


Die Funktion getTemplate also völlig weglassen, was die bislang gemancht hat steht jetzt in der Sub.
Gruß
Frank


  


Betrifft: AW: VBA Open Methode von: Dan
Geschrieben am: 20.09.2004 14:11:44

Koennte es das sein : _?
Option Explicit

Sub test()
    MsgBox getTemplate("C:\Temp\test.txt")
End Sub


Function getTemplate(location As String) As String
   Dim txt As String
   Open location For Input As #1
   getTemplate = ""
   Do Until EOF(1)
      Line Input #1, txt
      If (getTemplate = "") Then
        getTemplate = txt
      Else
        getTemplate = getTemplate & vbCrLf & txt
      End If
   Loop
   Close
End Function



  


Betrifft: LÖSUNG! von: Jens
Geschrieben am: 20.09.2004 14:18:17

also hier ist die lösung! hab das grade rausgegoogelt.
trotzdem danke für eure tipps!

kleine Frage noch: was hat es mit diesem option explicit auf sich?


Function parser(templateSource As String) As String
templateSource = Replace(templateSource, "%%vorname%%", "Jens")
templateSource = Replace(templateSource, "%%nachname%%", "Müller")
templateSource = Replace(templateSource, "%%kundennummer%%", "123435")
parser = templateSource
End Function



Function DoParse(where As String) As String

    Dim strImport As String
    Dim lngChars As Long
    Dim intFile As Integer
    
    intFile = FreeFile
    
    Open where For Input As intFile
    lngChars = LOF(intFile)
    strImport = Input(lngChars, intFile)

DoParse = parser(strImport)

End Function



  


Betrifft: AW: LÖSUNG! von: Kurt
Geschrieben am: 20.09.2004 17:55:23

für
Option Explicit muss man keinen Beitrag auf offen stellen ! Schon gar nicht bei vba=Gut
und Tschüss Kurt


 

Beiträge aus den Excel-Beispielen zum Thema "VBA Open Methode"