quinni
Goto Top

VBA Script überwacht Dokumentenlänge

Hallo allesamt,

ich suche seit einigen Stunden ein Script das permanent das Word Dokument überwacht und eine message box bringt wenn das Dokument eine Zeichenzahl von X überschreitet.
Leider finde ich nichts was genau dem entspricht. (WORD 2010 - 2013)

Diese Überprüfung müsste so aussehen: WENN Zeichenanzahl über "LIMIT" UND seit "x" Sekunden nichts weiter geschrieben, DANN Box: "Achtung, "LIMIT" überschrieben. Du hast "XXX" Zeichen ( Summe("LIMIT" - "XXX")) zu viel ANSONSTEN prüfe wieder in "X" Sekunden

Ich habe eine Limitierung bereits für Formulare in Word gefunden. Allerdings dürfen es keine Formularfelder sein. Es muss über das gesamte Word Dokument gehen.
Zudem kommt erschwerend hinzu, dass Ich leider kein Programmierer sondern Gestalter bin. Benötige dieses Skript in meiner .dotx Vorlage da diese fertigen Word Dokumente dann in InDesign Dokumente importiert werden.

Daher bin ich gezwungen, fachkundige Office-Gurus darum zu bitten mir ein solches Script zur Verfügung zu stellen.

Danke schonmal im Voraus für diejenigen die sich dazu bereit erklären.

P.s. ich hatte zwar was gefunden. Aber dieser Code ist aus Word 2000 und wenn ich das bei VBA Script einfüge kommt eine Fehlermeldung von wegen Fehler bei Kompilieren: Erwartet Zeilennummer oder Sprungmarke oder Anweisung oder Anweisungsende

 Sub ZeichenZaehlen()

Dim effW, effC, C As Variant
Dim maxW, maxC, W As Variant
Dim Wtxt, Ctxt As String
maxW = 5930 'Max Anzahl Worte  
maxC = 5960 'Max Anzahl Zeichen  
effW = ActiveDocument.BuiltInDocumentProperties(wdPropertyWords)
effC = ActiveDocument.BuiltInDocumentProperties(wdPropertyCharsWSpaces)
If maxW < effW Or maxC < effC Then
If maxW < effW Then
W = effW & " (statt max " & maxW & ")"

Else
W = effW
End If

If maxC < effC Then
C = effC & " (statt max " & maxC & ")"
Else

C = effC
End If

MsgBox "ACHTUNG! Sie habeny die maximale Anzahl Worte " & _
"bzw. too many chars" & Chr(13) & Chr(13) & _
"Verwendete Anzahl WORTE: " & W & Chr(13) & _
"Verwendete Anzahl ZEICHEN: " & C
Else

W = maxW - effW
C = maxC - effC
MsgBox "* Maximale Anzahl WORTE: " & maxW & Chr(13) & _
"* Maximale Anzahl ZEICHEN: " & maxC & Chr(13) & Chr(13) & _
"* Verwendete Anzahl WORTE: " & effW & Chr(13) & _
"* Verwendete Anzahl ZEICHEN: " & effC & Chr(13) & Chr(13) & _
"Sie können noch " & W & " WORTE bzw. " & C & " ZEICHEN eingeben"
End If

End Sub

Content-Key: 243714

Url: https://administrator.de/contentid/243714

Printed on: April 18, 2024 at 00:04 o'clock

Member: colinardo
Solution colinardo Jul 15, 2014, updated at Jul 16, 2014 at 11:12:38 (UTC)
Goto Top
Hallo Quinni,
das überwachen der Useraktivität, also ob er schreibt oder nicht, geht schon mal nicht so einfach da es dafür kein Event gibt. Dies lässt sich jedoch durch überprüfen der Textlänge umgehen. Was mit VBA nicht so resourcenschonend geht, ist das kontinuierliche Überwachen. Das geht zwar mit unten stehendem Code, verbraucht dann aber etwas mehr Resourcen. Besser ginge dies mit einem richtigen Managed- oder COM-Plugin.

Probier es einfach mal aus:
(Zeile 6 und 8 kannst du nach deinen Anforderungen anpassen). In der aktuellen Konfiguration werden Leerzeichen mitgezählt, das lässt sich aber leicht ändern wenn gewünscht. Dazu muss in Zeile 14 die Konstante auf wdPropertyCharacters abgeändert werden.
Sub CheckChars()
On Error Resume Next
    Dim longChars As Long, intLimit As Integer, oldLength As Long, intSecondsWait As Integer, doc As Document
    Set doc = ActiveDocument
    'Limit an Zeichen  
    intLimit = 50
    ' Wartezeit zwischen den Überprüfungen  
    intSecondsWait = 10
    
    oldLength = 0
    ' kontinuierlich überwachen  
    While True
        ' aktuelle Anzahl der Zeichen  
        longChars = doc.BuiltInDocumentProperties(wdPropertyCharsWSpaces)
        ' Nur überprüfen wenn sich die Anzahl der Zeichen im Dokument geändert hat  
        If oldLength <> longChars Then
            ' Wenn die Anzahl der Zeichen das Limit überschreitet, Msgbox anzeigen  
            If longChars > intLimit Then
                MsgBox "Achtung du hast das LIMIT von " & intLimit & " Zeichen überschritten!" & vbNewLine & "Du hast aktuell: " & longChars - intLimit & " Zeichen zu viel!", vbExclamation  
            End If
        End If
        ' aktuelle Zeichenanzahl zwischenspeichern  
        oldLength = longChars
        ' Wartefunktion aufrufen  
        pause intSecondsWait
    Wend
End Sub

' Pause-Funktion  
Sub pause(t As Integer)
    Start = Timer
    Do While Timer < Start + t
        DoEvents
    Loop
End Sub

' Prüfenfunktion beim öffnen des Dokuments starten  
Private Sub Document_Open()
    CheckChars
End Sub

Benötige dieses Skript in meiner .dotx Vorlage
dann benötigst du aber ab jetzt das *.dotm Format wegen der Makros face-wink

Grüße Uwe