Anzeige
Archiv - Navigation
1232to1236
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
Inhaltsverzeichnis

Wörter zählen

Wörter zählen
ing.grohn
Hallo Forum,
ich möchte gerne aus Excelvba die Anzahl der Wörter eine/aller Word Datei/en ermitteln (analog Explorer Eigenschaften) ohne die Datei zu öffnen.
Hat jemand hierfür ein Tool oder einen Link?
Die Googlei war bis jetzt nicht besonders erfolgreich
Vielen Dank für die ANtworten
Mit freundlichen Grüßen
Albrecht

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Wörter zählen
07.10.2011 21:43:21
Nepumuk
Hallo,
ganz einfach so:

Public Sub Test()
    
    Const FOLDER_PATH = "D:\Eigene Dateien\Eigene Dokumente"
    
    Dim objShell As Object, objFolder As Object
    Dim lngIndex As Long, lngItemIndex As Long, lngRow As Long
    Dim vntName As Variant
    
    Application.ScreenUpdating = False
    
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(FOLDER_PATH)
    
    For lngIndex = 0 To 255
        If objFolder.GetDetailsOf(vntName, lngIndex) = "Wortanzahl" Then
            lngItemIndex = lngIndex
            Exit For
        End If
    Next
    
    If lngItemIndex > 0 Then
        For Each vntName In objFolder.Items
            If LCase$(Right$(vntName, 4)) = ".doc" Or LCase$(Right$(vntName, 5)) Like ".docx" Then
                lngRow = lngRow + 1
                Cells(lngRow, 1).Value = vntName
                Cells(lngRow, 2).Value = objFolder.GetDetailsOf(vntName, lngItemIndex)
            End If
        Next
    Else
        MsgBox "Eigenschaft nicht gefunden."
    End If
    
    Set objShell = Nothing
    Set objFolder = Nothing
    
    Application.ScreenUpdating = True
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Wörter zählen
08.10.2011 08:57:59
ing.grohn
Hallo Nepumuk,
Dein Programm läuft (nach Anpassung des Pfades, klar) fehlerlos durch. In meinem Verzeichnis liegen zwei Worddateien mit den Endungen Doc und docx (groß/klein-Schreibung ist ja hier kein Thema)
Ich erhalte aber kein Ergebnis in der Tabelle (Activesheet)?
Warum nicht?
(ich lasse es im Moment allerdings mit 2010 laufen!!)
Eine Antwort wäre nett, auch wenn ich mich erst heute melden konnte, sorry
Mit freundlichen Grüßen
Albrecht
AW: Wörter zählen
08.10.2011 11:16:02
ing.grohn
Hallo Nepumuk,
habs jetzt so gelöst:

Public Sub Test()
Const FOLDER_PATH = "c:\albrecht"
Dim objShell As Object, objFolder As Object
Dim lngIndex As Long, lngItemIndex As Long, lngRow As Long
Dim vntName As Variant
Application.ScreenUpdating = False
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(FOLDER_PATH)
For lngIndex = 0 To 255
If objFolder.GetDetailsOf(vntName, lngIndex) = "Wortanzahl" Then
lngItemIndex = lngIndex
MsgBox lngItemIndex
Exit For
End If
Next
If lngItemIndex > 0 Then
For Each vntName In objFolder.Items
MsgBox vntName
'If Left(vntName, 2) = "MS" Then
'If LCase$(Right$(vntName, 4)) = ".doc" Or LCase$(Right$(vntName, 5)) Like ".docx"  _
Then
If LCase$(Right(objFolder.GetDetailsOf(vntName, 179), 4)) = ".doc" _
Or LCase$(Right(objFolder.GetDetailsOf(vntName, 179), 5)) Like ".doc*" Then
lngRow = lngRow + 1
Cells(lngRow, 1).Value = vntName
Cells(lngRow, 2).Value = objFolder.GetDetailsOf(vntName, lngItemIndex)
Cells(lngRow, 3).Value = objFolder.GetDetailsOf(vntName, 179)
End If
Next
Else
MsgBox "Eigenschaft nicht gefunden."
End If
Set objShell = Nothing
Set objFolder = Nothing
Application.ScreenUpdating = True
End Sub

(vielleicht gehts eleganter?)
mal schaun, ob das auch bei xp passt.
Ich wünsche ein schönes Wochenende und vielen Dank für die Hilfe
Mit freundlichen Grüßen
Albrecht
Anzeige
AW: Wörter zählen
07.10.2011 22:04:56
Nepumuk
Ääääääääääääääääääääääää
das: Like ".docx" Then sollte natürlich Like ".doc*" Then heißen.
Gruß
AW: Wörter zählen
08.10.2011 09:03:15
ing.grohn
Hallo Nepumuk,
das Problem scheint darin zu liegen, das als vntName nur der "Name" angezeigt wird und keine "Erweiterung"?!!
MfG
Alnbrecht
AW: Wörter zählen
08.10.2011 09:07:44
ing.grohn
HAllo Nepumuk,
in der Tat,
es liegt daran, dass die Endungen nicht erkannt werden!!
(Windows 7, Excel 2010)
Kannst Du bitte noch mal denken?
Mit freundlichen Grüßen
Albrecht
AW: Wörter zählen
08.10.2011 11:38:06
Nepumuk
Hallo,
das ist deine Einstellung des Exploreres "Dateiendung bei bekannten Dateitypen ausblenden". Eine total unnütze Verstellmöglichkeit die nur Ärger macht und sofort abgeschafft gehört.
Gruß
Nepumuk
Anzeige
AW: NAchfrage Wörter zählen
08.10.2011 15:32:49
ing.grohn
Hallo Nepumuk,
hab ich nicht gewußt!!
schalte ich sofort ab (funkt 100)
ich möchte noch eine weitere Frage anschliessen:
es hat sicherlich seinen Grund warum das so formuliert wurde

Const FOLDER_PATH = "c:\eigene dateien\mandanten\g"

was ist aber, wenn ich das "g" variable haben möchte (von a bis z natürlich) .
den Folder_Path als String deklarieren und das über eine Schleife laufen lassen (For Buchst=65 to 90)
und das als chr() anhängen geht scheints nicht. (objektvariable oder Block with fehlt)
kannst Du da noch mal helfen?
Vielen Dank einen schönes Wochende
(meine Lösung (s.o.) lege ich dann z.A. aber, wieder was gelernt)
Mit freundlichen Grüßen
Albrecht
Anzeige
AW: Nachfrage Wörter zählen
08.10.2011 16:22:07
Nepumuk
Hallo,
was soll da nicht gehen?

Public Sub Test()
    
    Const FOLDER_PATH = "D:\Eigene Dateien\Eigene Dokumente\"
    
    Dim objShell As Object, objFolder As Object
    Dim lngIndex As Long, lngItemIndex As Long
    Dim lngPathIndex As Long, lngRow As Long
    Dim vntName As Variant
    
    Application.ScreenUpdating = False
    
    Set objShell = CreateObject("Shell.Application")
    
    Set objFolder = objShell.Namespace(FOLDER_PATH)
    
    For lngIndex = 0 To 255
        If objFolder.GetDetailsOf(vntName, lngIndex) = "Wortanzahl" Then
            lngItemIndex = lngIndex
            Exit For
        End If
    Next
    
    If lngItemIndex > 0 Then
        
        For lngPathIndex = 65 To 90 ' A-Z
            
            Set objFolder = objShell.Namespace(FOLDER_PATH & Chr$(lngPathIndex))
            
            If Not objFolder Is Nothing Then
                
                For Each vntName In objFolder.Items
                    If LCase$(Right$(vntName, 4)) = ".doc" Or _
                        LCase$(Right$(vntName, 5)) Like ".doc*" Then
                        lngRow = lngRow + 1
                        Cells(lngRow, 1).Value = vntName
                        Cells(lngRow, 2).Value = objFolder.GetDetailsOf(vntName, lngItemIndex)
                    End If
                Next
            Else
                If MsgBox("Ordner:" & vbLf & vbLf & FOLDER_PATH & Chr$(lngPathIndex) & _
                    vbLf & vbLf & "nicht gefunden. Weiter machen?", vbQuestion Or _
                    vbOKCancel, "Abfrage") = vbCancel Then Exit For
            End If
        Next
    Else
        MsgBox "Eigenschaft nicht gefunden."
    End If
    
    Set objShell = Nothing
    Set objFolder = Nothing
    
    Application.ScreenUpdating = True
    
End Sub

Ich hab gesehen, dass du eine weitere Eigenschaft in die Tabelle schreibst. Wenn das Programm auch auf anderen Rechnern laufen soll, oder du im Laufe der Zeit auf dem Rechner auf dem es jetzt läuft nochmal ein Programm installieren willst, würde ich nach der Eigenschaft suchen, so wie ich nach der Eigenschaft "Wortanzahl" gesucht habe. Wenn nämlich ein neues Programm eine neue Eigenschaft einträgt kann es durchaus sein, dass deine Eigenschaft von Stelle 179 plötzlich an Stelle 180 steht. Bei mir ist der Pfad (das ist die Eigenschaft die du nutzt) an Stelle 181. Das funktioniert zumindest auf deutschsprachigem Windows.
Gruß
Nepumuk
Anzeige
AW: Nachfrage Wörter zählen
08.10.2011 17:27:44
ing.grohn
Hallo Nepumuk,
klar ging das: Dim FolderPath as Variant und schon gings!
Vielen, vielen Dank
Über die Eigenschaften hatte ich auch schon nachgedacht (und im Hinterkopf)
Ich brauchte jetzt eine schnelle Lösung um einige zig Dateien auszumissten (steheht nur ne Anschrift drin und sonst nichts und die müssen weg.
Bei den Eigenschaften fällt mir noch ein: Wie ungenau Ms manchmal ist der Pfad (179) enthält die Dateibezeichnung (warum). Weshalb gibts keine Eigenschaft Erweiterung? Warum hält man sich nicht an anfäglichen Deklarationen: Dateibezeichnung = Dateiname plus eine Erweiterung getrennt durch Punkt) aber, das ist lange her. M W. wurden ebenso Umlaute auch nie "offiziell" nicht zu den "erlaubten" Zeichen zugeordnet. SO ist das eben.
Also nochmal
Vielen Dank
Mit freundlichen Grüßen
Albrecht
Anzeige
AW: Wörter zählen STIMMT NICHT!
09.10.2011 11:12:56
ing.grohn
Hallo Nepumuk,
zunächst mal muß ich sagen, ich würde mir wünschen mich einem derart elegannten Programmierstil zu nähern (ob es jemandem der mit Gotos angefangen hat und dem Objecte noch machmal spansich vorkommen gelingen kann?)
Das Prorgamm macht genau das was es soll: alle Worddateien werden genau aufgelistet. Super!!
Aber:
man kontrolliert ja gelegentlich das Ergebnis:
Und:
Die Daten stimmen nicht!!
Das was aus den DAteieigenschaften ausgelesen wird und die Wortanzahl, die man wenn man das Dokument öffnet und dann in Word die Wörter zählt, weichen um einige 100 Wörter voneinander ab (und das hat nichts mit der Zählweise zu tun (ist 1. März ein Wort oder zwei u. ä)). Der Unterschied ist eklatant.
Eigentlich müßte ich jedes Dokument öffnen und nachzählen!?
Hast Du eine Ahnung, ob es nur ein paar "Ausreisser" bei mir waren, oder ob die Angaben häufig/oft von einander abweichen (ich kann schlecht einige 1000 Dateien manuell prüfen)?
Vielleicht jemand anderes ähnliche Erfahrungen?
Würde mich über ein paar Infos freuen
bedankt van harten
Mit freundlichen Grüßen
Albrecht
Anzeige
AW: Wörter zählen STIMMT NICHT!
09.10.2011 12:02:04
Nepumuk
Hallo Albrecht,
du hast Recht, Word 2003 scheint nicht richtig zu zählen. Eine Datei von mir zählt unter Word 2003 1.335 Wörter. Unter Word 2007 1.258 und eine kleine Prozedur von mir 1.252 Wörter.
Meine Testroutine:

Public Sub test()
    
    Dim objWord As Object, objDocument As Object
    Dim strText As String
    
    Set objWord = CreateObject("Word.Application")
    objWord.Visible = True
    
    
    Set objDocument = objWord.Documents.Open("D:\Eigene Dateien\Eigene Dokumente\Moderatoren.doc")
    
    strText = Replace(objDocument.Content.Text, Chr$(11), " ")
    
    objDocument.Close SaveChanges:=False
    
    Do While Cbool(InStr(1, strText, " "))
        strText = Replace(strText, " ", " ")
    Loop
    
    MsgBox UBound(Split(strText, " "))
    
    
    objWord.Quit
    
    Set objDocument = Nothing
    Set objWord = Nothing
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Wörter zählen STIMMT NICHT!
09.10.2011 12:21:12
Nepumuk
Hi,
Achtung, im 1. Code sind die Doppelblank in der Do-Loop - Schleife verloren gegangen !!! Das macht die Forensoftware und lässt sich nicht beeinflussen. Darum habe ich das in folgenden Code durch Space$ ersetzt.
Jetzt hab ich nochmal nachgebessert, nun sind es 1.254 Wörter. Test mal (ich hab nämlich keine Lust Wörter zu zählen):

Public Sub test()
    
    Dim objWord As Object, objDocument As Object
    Dim strText As String
    Dim lngIndex As Long
    
    Set objWord = CreateObject("Word.Application")
    objWord.Visible = True
    
    
    Set objDocument = objWord.Documents.Open("D:\Eigene Dateien\Eigene Dokumente\Moderatoren.doc")
    strText = objDocument.Content.Text
    objDocument.Close SaveChanges:=False
    
    For lngIndex = 0 To 31
        strText = Replace(strText, Chr$(lngIndex), Space$(1))
    Next
    
    Do While Cbool(InStr(1, strText, Space$(2)))
        strText = Replace(strText, Space$(2), Space$(1))
    Loop
    
    MsgBox UBound(Split(strText, Space$(1)))
    
    
    objWord.Quit
    
    Set objDocument = Nothing
    Set objWord = Nothing
    
End Sub

Gruß
Nepumuk
Anzeige
AW: keine Lust zu zählen...
09.10.2011 12:48:18
ing.grohn
Hallo Nepumuk,
find ich alles ganz merkwürdig (naja, die Abkürzung EDV steht ja auch für "Ende der Vernunft")
Ich werd das ganze nochmal Testen und melde mich später, "bin dann mal weg"
Vielen Dank und einen sonnigen Sonntag
Mit freundlichen Grüßen
Albrecht
AW: hab jetzt gezählt!!
09.10.2011 20:59:50
ing.grohn
Hallo Nepumuk,
ich hab jetzt noch mal genau hingeschaut und Stichpunktartig gezählt:
Deine Zählweise und meine manuelle passen zusammen (82/81 und 290/286).
Ich hab Dein Zählprogramm an Dein zweites (mit den UVs) angehängt.
Rechnet zwar lange (ohne BS Aktualisierung u. ä), hat sich aber gelohnt.
Die Beschäftigung mit Wörter zählen werde ich jetzt mal erst beenden (Ergebnis hab ich)
Eine Frage noch:
Warum läßt sich die Funktion

WortZahl=objDocument.ActiveDocument.BuiltinDocumentProperties(wdPropertyWords)

nicht integrieren (kommt Fehlermeldung). In Word VBA (ohne objDocument) tut das.
Was mach ich da falsch?
Vielen Dank
Mit ferundlichen Grüßen
Albrecht
AW: hab jetzt gezählt!!
10.10.2011 09:47:18
Nepumuk
Hallo,
1. objDocument ist schon das Dokument und das hat keine ActiveDocument-Eigenschaft.
2. Woher soll Excel die Word-Konstante wdPropertyWords kennen?
3. Das ist die selbe Eigenschaft welche mein 1. Code ausliest, nur dass du jetzt das Dokument öffnest.
Aber im Prinzip so:
objDocument.BuiltinDocumentProperties(15)
Gruß
Nepumuk
AW:
10.10.2011 10:49:50
ing.grohn
Hallo Nepumuk,
vielen Dank
Mit freundlichen Grüßen
Albrecht
(je mehr man Word-Wörter zählt, desto mehr Ergebnisse erhält man: völlig sinnlos (edv))

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige