# VBA und Word- Wörter zählen, Benachrichtigungen etc.



## Myar (7. Oktober 2009)

Hallöchen!

Ich hoffe, dass dieses Forum das richtige ist. Da ich keines speziell für VBA/Office gefunden habe.

Erstmal vorweg: Es ist das erste mal, dass ich etwas in VB(A) mit einem Office Programm verwirklichen will. Visual Basic ist mir absolut neu. Bisher habe ich in Java, PHP und C# programmiert.

Ich habe mir ein wenig die Syntax von VB angeguckt und bin halt gerne bereit rumzuprobieren. Nur fehlt mir komplett der Ansatz bzw. überhaupt die Idee meine Wünsche in VBA zu verwirklichen, ich weiß net mal, ob das so möglich ist.
Ansonsten muss ich doch auf Java zurück greifen.
Das ganze ist halt aber für Nutzer, die nicht auf die "schicke Word Obefläche" verzichten wollen ;P

Also Denkanstöße, Meinungen ob man das überhaupt realisieren kann und evt. Codebeispiele wären hilfreich.

Nun aber zu dem, was ich eigentlich will. An folgendem Beispiel verdeutlicht:

Szenario:
Ich habe also ein festes Tagesziel an Wörtern, die geschrieben werden müssen. Fürs erste konkret 1670 Wörter am Tag. Um nach 30 Tagen auf 50000 Wörter insgesamt zu kommen.

Ich öffne also das Word Dokument, ein bisschen Text ist halt schon da.
Word zeigt mir unten an, wieviele Wörter das Dokument insgesamt enthält. Was schonmal hilfreich ist.
Ich will aber, sobald ich loslege, meinen Tagessold zu erfüllen, stets in Echtzeit wissen, wieviele Wörter ich an diesem Tag geschrieben habe.

Okay, hier bleibt die Frage was möglich ist. Abfinden kann man sich damit, dass man halt angezeigt bekommt (wie auch immer, meine Vorstellung wäre ein Label das immer sichtbar ist und die Wortzahl anzeigt) wieviele Wörter es sind, seit dem man angefangen hat.
Also dass man das Dokument nicht schließen darf.
Toll wäre, ich fange heute Mittag an, schreibe 300 Wörter. Muss den Rechner aus machen und setze mich Abends wieder dran, um die weiteren 1370 Wörter zu schreiben.
Wenn ich weiter mache, zeigt er mir an, dass ich heute 300 Wörter schon habe und zählt dann weiter.

Habe ich das Ziel von 1670 Wörtern erreicht, bekomme ich darüber eine Meldung. Ein zweites label z.B. dass halt dann einen Text aufweist und ein Soundsignal vielleicht. Kein PopUp, damit der Schreibfluss nicht unterbrochen wird.

So, ich habs geschafft, schreibe meinen Satz zu ende, speicher, schließe Word.
Morgen das gleiche Spiel.

Optional wäre halt, dass man die zu erreichende Wortzahl ändern kann. Heute schreibe ich 2000 Wörter. Also kann die Benachrichtigung morgen schon bei 1340 Wörtern erscheinen.

Puh. Wirkt schon massig.
Naja, was davon geht? Wo gibt es Beispiele, wo setze ich an?
Das wären so meine Fragen.

Na dann bin ich mal gespannt und gucke mir weiter VB Codebeispiele an *g*

Gruß
Myar


----------



## Myar (8. Oktober 2009)

Hallöchen!

Nun, nach etwas rumprobieren, habe ich es zumindest geschafft ein form zu erstellen, das sichtbar bleibt, wenn ich weiter schreibe.
Ich bekomme nur bei unten stehenden Code den laufzeitfehler 424 Objekt erforderlich.

Naja, der macht auch nciht weiter was in der zweiten Prozedur steht.
Bei nem anderen test hat das aber eh nur zu ner Endlosschleife und Word Absturz geführt...


```
Sub Tagesziel()
'
' Tagesziel Makro
'
' Fenster Positionieren
Load UserForm1
UserForm1.Top = 120
UserForm1.Left = 10
UserForm1.Show False

Woerterzaehlen

End Sub
Sub Woerterzaehlen()
' Variablen
Dim Tagesziel As Integer
Dim WordCount As Integer
' Wörter zählen
WordCount = ActiveDocument.BuiltInDocumentProperties(wdPropertyWords)
Label1.Caption = "Geschriebene Wörter: " & WordCount
Tagesziel = TextBox1.Text
While Tagesziel >= WordCount
    Label1.Caption = "Geschriebene Wörter: " & WordCount
Wend
If Tagesziel <= WordCount Then
    Label2.Caption = "Tagesziel erreicht!"
End If
End Sub
```

Edit: 

Okay, Problem gelöst. 

Mein Code sieht nun so aus: 

In ThisDocument (Code): 


```
Sub Tagesziel() 
' 
' Tagesziel Makro 
' 
'Form sichtbar lassen, aber weiter schreiben können 
UserForm1.Show False 
'Prozedur Woerterzaehlen einmal aufrufen für aktuellen Label Stand 
Call UserForm1.Woerterzaehlen 
'Die Prozedur jede Sekunde aufrufen um die Wortzahl aktuell zu halten (funktioniert nicht) 
Application.OnTime Now + TimeValue("00:00:01"), "UserForm1.Woerterzaehlen" 
End Sub
```

In UserForm1 (Code): 


```
Sub Woerterzaehlen() 
' Variablen 
Dim TageszielInt As Integer 
Dim TageszielStr As String 
Dim WordCount As Integer 
' Wörter zählen 
WordCount = ActiveDocument.BuiltInDocumentProperties(wdPropertyWords) 
'Wortanzahl ausgeben 
Label1.Caption = "Geschriebene Wörter: " & WordCount 
'Das Tagesziel aus der Textbos hohlen 
TageszielStr = TextBox1.Text 
'Wenn die textbos leer ist (was beim Start sein kann) setze das Tagesziel 
'pauschal auf 1670 anosnten übernimm das Tagesziel 
If TageszielStr = "" Then 
TageszielStr = 1670 
Else 
TageszielStr = TextBox1.Text 
End If 
'Den String aus der Textbox in einen Integer parsen 
TageszielInt = Val(TageszielStr) 
'Wenn das Tagesziel kleiner als die erreichte Wortzahl ist gibt "Tagesziel 
'erreicht" aus ansonsten "Weiter machen!" 
If TageszielInt <= WordCount Then 
Label2.Caption = "Tagesziel erreicht!" 
Else 
Label2.Caption = "Weiter machen!" 
End If 
'Zeichne Form neu 
UserForm1.Repaint 
End Sub
```

mein Ziel ist halt, dass jede Sekunde die Wortanzahl un die Eingaben aktualisiert werden. 

Nur dieses onTime greift absolut nicht


----------

