Zeilen auslesen

  • Sonstige

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von derderfragt.

    Zeilen auslesen

    Hi all

    ich bin noch recht unerfahren was vba anbelangt. Ich hab jetzt ne Word Briefvorlage basteln müssen, die ich auch hinbekommen habe, bis auf eine kleinigkeit.

    Ich habe ne Maske, in der die verschiedenen sachen, wie Empfänger, überschrift und briefinhalt als felder stehen. Nun soll jeh nachdem , wieviel zeilen im Briefinhalt geschrieben wird entweder eine einseitige oder zweiseitige Vorlage verwendet werden. momentan überprüfe ich nur, wieviel neue Zeilenzeichen es gibt. Allerdings schneidet Word ja Strings ab, wenn die Zeile voll ist. Kann mir jemand Sagen, wie man das lösen kann?

    am besten mit nem Codevorschlag.

    danke schonmal im Voraus
    Statt das ganze mit VBA zu machen könntest du in VB6 (o.ä.) ein Word-Objekt erzeugen und dann je nach Stringlänge eine andere Vorlage laden und dort den String/Brieftext einfügen. Du könntest ja den Text erstmal in die einseitige Vorlage einfügen per VB-Code und dann die Anzahl der Seiten abfragen, wenn es schon 2 seiten sind nimmst die andere vorlage...
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    Hi Agent

    ich kenn mich halt kaum mit VB aus und tue mich schwer an irgendwelche befehle zu kommen. Daher hab ich ne Vorlage genommen.

    Hier ein paar teile aus meinem Code.

    Sub main()
    Dim fss As Variant
    Dim string2 As String
    On Error Resume Next
    windowname = ActiveDocument.name

    ' Um im Fehlerfall dieses Code editieren zu können, muss man das Programm anhalten können:
    Set fss = CreateObject("Scripting.FileSystemObject")
    If fss.FileExists("c:\stopp_malcom") Then
    MsgBox ("Das File: C:\stopp_malcom existiert. Deshalb wird das Programm abgebrochen")
    Exit Sub
    End If

    If fss.FileExists(ActiveDocument.Path & "\" & "Brief Seezeit2.dot") = True Then
    zweiseitig_ok = True
    datei_zweiseitig = ActiveDocument.Path & "\" & "Brief Seezeit2.dot"
    End If

    Set fss = CreateObject("Scripting.FileSystemObject")
    If fss.FileExists(ActiveDocument.Path & "\" & "Brief Seezeit.dot") = False Then
    string2 = MsgBox("Die Datei Briefvorlage_Malcom.dot konnte nicht gefunden werden" & Chr(13) & _
    "Sie muss im selben Ordner wie Malcom.doc sein, also momentan in:" & Chr(13) & _
    ActiveDocument.Path & Chr(13) & _
    "Siehe: Readme.txt" & Chr(13) & _
    "Nun wird ein leeres Dokument geöffnet.", , "Datei nicht gefunden")
    Documents.Add
    Windows(windowname).Activate
    ActiveDocument.Close _
    SaveChanges:=wdDoNotSaveChanges
    Exit Sub
    End If
    datei = ActiveDocument.Path & "\" & "Brief Seezeit.dot"
    Load UserForm1 'Dadurch wird ein Bug in Word, der teilweise eintritt und es verunmöglicht,
    Unload UserForm1 'per Tab durch die Fehler zu schalten, vermieden.
    Load uf_haupt
    uf_haupt.Show
    On Error GoTo 0
    End Sub

    das ist die haupt routine meines Macros, die schaut, ob die Vorlagen Dateien existieren und startet die Maske uf_haupt.

    Function anzahlZeichenInString()
    Dim i, count As Integer
    For i = 1 To Len(text)
    If Mid(text, i, 1) = vbCr Then
    count = count + 1
    If count >= 18 Then
    zweiseitig_ok = True
    text2 = Right(text, i + 1)
    text1 = Left(text, i - 1)
    End If
    End If
    Next

    End Function

    In dieser Funktion überprüfe ich, wieviele vbCr es gibt, also direkte zeilenumbrüche. Allerdings fehlen mir die indirekten, die bei über den rand schreiben entstehen.

    wie würde das denn aussehen,


    Function testmamal()
    Set fss = CreateObject("Scripting.FileSystemObject")
    If fss.FileExists(ActiveDocument.Path & "\" & "dummy.dot") = False Then
    anzahlZeichenString
    Else
    dummy = ActiveDocument.Path & "\" & "dummy.dot"
    End If
    ersetzen "z-dummy", text


    End Function


    wie kann ich jetzt abfragen, wieviel seiten das hat? und wie kann ich das anstellen, dass wenn das läuft man nichts davon sieht?

    danke schonmal im vorraus