Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1548to1552
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

Daten aus Word auslesen und in Excel auflisten

Daten aus Word auslesen und in Excel auflisten
04.04.2017 08:40:38
cH_rI_sI
Guten Morgen liebe Forumsgemeinde,
ich habe mir eine Suche auf Basis der clsFileSearch von Nepumuk gebastelt, wo ich in anderen Excel-Files nach Daten suche und diese dann gesammelt aufliste - dies funktioniert soweit perfekt...
Nun möchte ich das selbe mit Word-Dateien machen - die Dateien sehen so aus:
Userbild
Ich möchte dann z.B. nur Daten auslesen (z.B. "Teile Nr." und "Projekt"), wenn der Betreiber "MA2" und "MA3" ist - weiters muss ich zwischen "neuen Themen" und "Updates" unterscheiden (ob neues Thema oder Update in eigener Spalte darstellen).
Geht das überhaupt mit Word und wie muss ich das anstellen?
Meine Basis wäre u.a. Code, welchen ich gerne abwandeln möchte:
ption Explicit
Public Enum SORT_BY
Sort_by_None
Sort_by_Name
Sort_by_Path
Sort_by_Size
Sort_by_Last_Access
Sort_by_Last_Modyfy
Sort_by_Date_Create
End Enum
Public Enum SORT_ORDER
Sort_Order_Ascending
Sort_Order_Descending
End Enum
Public Type FILEINFO
strFilename As String
strPath As String
lngSize As Long
dmtLastAccess As Date
dmtLastModify As Date
dmtDateCreate As Date
End Type
Public Sub Import()
Dim objFileSearch As clsFileSearch
Dim lngIndex As Long
Dim strSuwort As String
Dim i As Integer
Dim bolErg As Boolean
Dim Zelle_C As Long
Dim Zelle_R As Long
Dim Wert As Long
Dim iZeile As Long, tempZeile As Long, iZähler As Long
Dim WS1 As Worksheet, WS2 As Worksheet
'Vorhandene Daten im Ziel löschen
'ActiveWorkbook.Worksheets("ISR Import Database").AutoFilter.Sort.SortFields. _
Clear
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
If Range("A3")  "" Then
Range("A3", ActiveCell.SpecialCells(xlLastCell)).EntireRow.Delete
Range("A3").Select
Else
Range("A3").Select
End If
Set objFileSearch = New clsFileSearch
'strSuwort = InputBox("Suchwort eingeben")
strSuwort = "XY"
With objFileSearch
.CaseSenstiv = False
.Extension = "*.xls"
.FolderPath = "D:\temp\"
.SearchLike = "*"
.SubFolders = False
If .Execute(Sort_by_Size, Sort_Order_Descending) > 0 Then
Application.ScreenUpdating = False
For lngIndex = 1 To .FileCount
With .Files(lngIndex)
Workbooks.Open (.strPath)                         'Workbook öffnen
On Error Resume Next
For i = 1 To Workbooks(.strFilename).Worksheets.Count
With Workbooks(.strFilename).Worksheets(i)
.Activate
bolErg = .Cells.Find(What:=strSuwort, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,  _
MatchCase:=False).Activate
If bolErg Then
Zelle_C = ActiveCell.Column
Zelle_R = ActiveCell.Row
Set WS1 = Application.ActiveSheet
Set WS2 = Application.Workbooks("Suche.xlsm").Worksheets("Tabelle1")
For iZeile = WS1.Cells(WS1.Rows.Count, Zelle_C).End(xlUp).Row To Zelle_R + 1 Step -1
'If IsNumeric(WS1.Cells(iZeile, Zelle_C)) And WS1.Cells(iZeile, Zelle_C) And
Wert = WS1.Cells(iZeile, Zelle_C)
If Wert > 0 And _
WS1.Cells(iZeile, 2)  "" And _
WS1.Cells(iZeile, 3)  "" And _
Left(WS1.Cells(iZeile, 3), 4)  "Prob" And _
Left(WS1.Cells(iZeile, 3), 4)  "Offe" And _
Left(WS1.Cells(iZeile, 3), 4)  "Besc" Then
iZähler = iZähler + 1
tempZeile = WS2.Cells(WS2.Rows.Count, 1).End(xlUp).Row + 1
WS2.Rows(tempZeile).Insert Shift:=xlDown
WS2.Cells(tempZeile, 1) = WS1.Cells(1, 14)
WS2.Cells(tempZeile, 2) = WS1.Cells(iZeile, 1)
WS2.Cells(tempZeile, 3) = WS1.Cells(iZeile, 2)
WS2.Cells(tempZeile, 4) = WS1.Cells(iZeile, 3)
End If
Next iZeile
'MsgBox "Import erfolgreich!"
Else
MsgBox "Suchwort nicht gefunden"
bolErg = False
End If
End With
Next i
Workbooks(.strFilename).Close savechanges:=False   'Workbook schließen
End With
Next
Else
MsgBox "Keine Datei gefunden"
End If
Application.ScreenUpdating = True
End With
Set objFileSearch = Nothing
End Sub
Anbei auch noch das File mit diesem Code:
https://www.herber.de/bbs/user/112615.xlsm
Und eine Word-Datei aus welcher ich Daten auslesen möchte:
https://www.herber.de/bbs/user/112614.doc
Wäre echt nett von Euch, wenn mir jemand helfen könnte - besten Dank im Voraus!
Wünsche Euch einen schönen Tag!
Glg,
Chrisi

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus Word auslesen und in Excel auflisten
04.04.2017 19:20:41
cH_rI_sI
Hallo nochmal,
u.U. wäre ein guter Ansatz zuerst nach Word-Tabellen mit neuen Themen zu suchen, also Word-Tabellen nach "Neue Themen" und vor "Updates..." und natürlich nach den Word-Tabellen nach "Updates..." - ich würde diese dann jeweils temporär nach Excel kopieren und dort auslesen und dann die nächste usw., da für mich einfacher...
Wäre nett, wenn mir jemand zumindest diesen Weg zeigen würde...
Schönen Abend noch!
Lg,
Chrisi
AW: Das Prinzip...
05.04.2017 11:45:00
cH_rI_sI
Danke Case, diese Seite habe ich auch schon gefunden...
Also ich gebe glaube ich auf, weil das ist zu aufwendig...
Eine Frage habe ich jedoch noch - wenn im Word mehrere getrennte Tabellen vorhanden sind, haben diese unterschiedliche, interne Namen die man ansprechen könnte?
Falls jemand Lust verspürt eine scheinbar nicht realisierbare Aufgabe zu lösen, nur zu ;-)
Eine Kiste Bier steht auf jeden Fall!
Lg,
Chrisi
AW: ein Anfang...
05.04.2017 17:37:10
Fennek
Hallo,
zuerst: nachdem ich dachte, ich hätte einiges über VBA gelernt, sah ich ein paar Codes von Case ... und verstand gar nicht.
Eine Schleife über einen/mehrere Ordner bekomme ich mit "alten" Ansätzen hin.
Zur Frage:
Die in #1 beigefügte Doc kann man in Word auslesen mit:

sub T1()
dim Tb as Table
for each Tb in activeDocument.Tables
debug.print Tb.Cell(1,4).Range.text, Tb.Cell(2,2).range.Text
next Tb
end sub
Ein Übertragen nach xl ist im Vergleich dazu einfach. Nach Texten UND Tabellen zu suchen, bekomme ich nicht hin.
mfg
Anzeige
AW: einfach
05.04.2017 17:50:49
Fennek
Hallo,
wenn man sich in VBA xl zumindest relativ besser auskennt als in wd, dann hilft:

sub T2()
'wd-Makro
ActiveDocument.Content.copy
end sub
und in xl einfach: paste. Die weitere Bearbeitung kann dann in xl erfolgen.
mfg
AW: einfach
05.04.2017 18:35:22
cH_rI_sI
Hey Fennek,
danke für deine Mühe! Muss mal schauen, ob ich irgendwie weiterkomme...
AW: einfach
06.04.2017 11:27:05
cH_rI_sI
Hallo Fennek und auch alle anderen Excel-Profis,
der Vorschlag klingt gut und macht sicherlich die weitere Suche einfacher - ich möchte daher _ zuerst mal nach einem bestimmten Suchbegriff (z.B. "XY") in den Word-Dokumenten suchen und wenn dieser gefunden wurde, dann kann der gesamte Inhalt mit

ActiveDocument.Content.copy
temporär ins Excel kopiert werden.
Im Excel muss man dann jedoch unterscheiden, ob der Suchbegriff "XY" vor oder nach "UPDATE" vorkommt (also zuerst die Position ermitteln wo "UPDATE" steht) - dann weitersuchen (Suchbegriff "XY" kann mehrmals vorkommen) - danach kann der temporär kopierte Inhalt wieder gelöscht werden und es kann das nächste Dokument in dem der Suchbegriff "XY" gesucht werden.
Kann mir irgendjemand die u.a. Suche umbauen, sodass die o.a. Anforderungen erfüllt werden?
Wäre echt nett wenn mir hier jemand helfen könnte!
Anbei nochmals der bestehende Code:
Option Explicit
Public Enum SORT_BY
Sort_by_None
Sort_by_Name
Sort_by_Path
Sort_by_Size
Sort_by_Last_Access
Sort_by_Last_Modyfy
Sort_by_Date_Create
End Enum
Public Enum SORT_ORDER
Sort_Order_Ascending
Sort_Order_Descending
End Enum
Public Type FILEINFO
strFilename As String
strPath As String
lngSize As Long
dmtLastAccess As Date
dmtLastModify As Date
dmtDateCreate As Date
End Type
Public Sub Import()
Dim objFileSearch As clsFileSearch
Dim lngIndex As Long
Dim strSuwort As String
Dim i As Integer
Dim bolErg As Boolean
Dim Zelle_C As Long
Dim Zelle_R As Long
Dim Wert As Long
Dim iZeile As Long, tempZeile As Long, iZähler As Long
Dim WS1 As Worksheet, WS2 As Worksheet
'Vorhandene Daten im Ziel löschen
'ActiveWorkbook.Worksheets("ISR Import Database").AutoFilter.Sort.SortFields. _
Clear
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
If Range("A3")  "" Then
Range("A3", ActiveCell.SpecialCells(xlLastCell)).EntireRow.Delete
Range("A3").Select
Else
Range("A3").Select
End If
Set objFileSearch = New clsFileSearch
'strSuwort = InputBox("Suchwort eingeben")
strSuwort = "XY"
With objFileSearch
.CaseSenstiv = False
.Extension = "*.xls"
.FolderPath = "D:\temp\"
.SearchLike = "*"
.SubFolders = False
If .Execute(Sort_by_Size, Sort_Order_Descending) > 0 Then
Application.ScreenUpdating = False
For lngIndex = 1 To .FileCount
With .Files(lngIndex)
Workbooks.Open (.strPath)                         'Workbook öffnen
On Error Resume Next
For i = 1 To Workbooks(.strFilename).Worksheets.Count
With Workbooks(.strFilename).Worksheets(i)
.Activate
bolErg = .Cells.Find(What:=strSuwort, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,  _
MatchCase:=False).Activate
If bolErg Then
Zelle_C = ActiveCell.Column
Zelle_R = ActiveCell.Row
Set WS1 = Application.ActiveSheet
Set WS2 = Application.Workbooks("Suche.xlsm").Worksheets("Tabelle1")
For iZeile = WS1.Cells(WS1.Rows.Count, Zelle_C).End(xlUp).Row To Zelle_R + 1 Step -1
'If IsNumeric(WS1.Cells(iZeile, Zelle_C)) And WS1.Cells(iZeile, Zelle_C) And
Wert = WS1.Cells(iZeile, Zelle_C)
If Wert > 0 And _
WS1.Cells(iZeile, 2)  "" And _
WS1.Cells(iZeile, 3)  "" And _
Left(WS1.Cells(iZeile, 3), 4)  "Prob" And _
Left(WS1.Cells(iZeile, 3), 4)  "Offe" And _
Left(WS1.Cells(iZeile, 3), 4)  "Besc" Then
iZähler = iZähler + 1
tempZeile = WS2.Cells(WS2.Rows.Count, 1).End(xlUp).Row + 1
WS2.Rows(tempZeile).Insert Shift:=xlDown
WS2.Cells(tempZeile, 1) = WS1.Cells(1, 14)
WS2.Cells(tempZeile, 2) = WS1.Cells(iZeile, 1)
WS2.Cells(tempZeile, 3) = WS1.Cells(iZeile, 2)
WS2.Cells(tempZeile, 4) = WS1.Cells(iZeile, 3)
End If
Next iZeile
'MsgBox "Import erfolgreich!"
Else
MsgBox "Suchwort nicht gefunden"
bolErg = False
End If
End With
Next i
Workbooks(.strFilename).Close savechanges:=False   'Workbook schließen
End With
Next
Else
MsgBox "Keine Datei gefunden"
End If
Application.ScreenUpdating = True
End With
Set objFileSearch = Nothing
End Sub

Anzeige
AW: einfach
06.04.2017 11:27:06
cH_rI_sI
Hallo Fennek und auch alle anderen Excel-Profis,
der Vorschlag klingt gut und macht sicherlich die weitere Suche einfacher - ich möchte daher _ zuerst mal nach einem bestimmten Suchbegriff (z.B. "XY") in den Word-Dokumenten suchen und wenn dieser gefunden wurde, dann kann der gesamte Inhalt mit

ActiveDocument.Content.copy
temporär ins Excel kopiert werden.
Im Excel muss man dann jedoch unterscheiden, ob der Suchbegriff "XY" vor oder nach "UPDATE" vorkommt (also zuerst die Position ermitteln wo "UPDATE" steht) - dann weitersuchen (Suchbegriff "XY" kann mehrmals vorkommen) - danach kann der temporär kopierte Inhalt wieder gelöscht werden und es kann das nächste Dokument in dem der Suchbegriff "XY" gesucht werden.
Kann mir irgendjemand die u.a. Suche umbauen, sodass die o.a. Anforderungen erfüllt werden?
Wäre echt nett wenn mir hier jemand helfen könnte!
Anbei nochmals der bestehende Code:
Option Explicit
Public Enum SORT_BY
Sort_by_None
Sort_by_Name
Sort_by_Path
Sort_by_Size
Sort_by_Last_Access
Sort_by_Last_Modyfy
Sort_by_Date_Create
End Enum
Public Enum SORT_ORDER
Sort_Order_Ascending
Sort_Order_Descending
End Enum
Public Type FILEINFO
strFilename As String
strPath As String
lngSize As Long
dmtLastAccess As Date
dmtLastModify As Date
dmtDateCreate As Date
End Type
Public Sub Import()
Dim objFileSearch As clsFileSearch
Dim lngIndex As Long
Dim strSuwort As String
Dim i As Integer
Dim bolErg As Boolean
Dim Zelle_C As Long
Dim Zelle_R As Long
Dim Wert As Long
Dim iZeile As Long, tempZeile As Long, iZähler As Long
Dim WS1 As Worksheet, WS2 As Worksheet
'Vorhandene Daten im Ziel löschen
'ActiveWorkbook.Worksheets("ISR Import Database").AutoFilter.Sort.SortFields. _
Clear
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
If Range("A3")  "" Then
Range("A3", ActiveCell.SpecialCells(xlLastCell)).EntireRow.Delete
Range("A3").Select
Else
Range("A3").Select
End If
Set objFileSearch = New clsFileSearch
'strSuwort = InputBox("Suchwort eingeben")
strSuwort = "XY"
With objFileSearch
.CaseSenstiv = False
.Extension = "*.xls"
.FolderPath = "D:\temp\"
.SearchLike = "*"
.SubFolders = False
If .Execute(Sort_by_Size, Sort_Order_Descending) > 0 Then
Application.ScreenUpdating = False
For lngIndex = 1 To .FileCount
With .Files(lngIndex)
Workbooks.Open (.strPath)                         'Workbook öffnen
On Error Resume Next
For i = 1 To Workbooks(.strFilename).Worksheets.Count
With Workbooks(.strFilename).Worksheets(i)
.Activate
bolErg = .Cells.Find(What:=strSuwort, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,  _
MatchCase:=False).Activate
If bolErg Then
Zelle_C = ActiveCell.Column
Zelle_R = ActiveCell.Row
Set WS1 = Application.ActiveSheet
Set WS2 = Application.Workbooks("Suche.xlsm").Worksheets("Tabelle1")
For iZeile = WS1.Cells(WS1.Rows.Count, Zelle_C).End(xlUp).Row To Zelle_R + 1 Step -1
'If IsNumeric(WS1.Cells(iZeile, Zelle_C)) And WS1.Cells(iZeile, Zelle_C) And
Wert = WS1.Cells(iZeile, Zelle_C)
If Wert > 0 And _
WS1.Cells(iZeile, 2)  "" And _
WS1.Cells(iZeile, 3)  "" And _
Left(WS1.Cells(iZeile, 3), 4)  "Prob" And _
Left(WS1.Cells(iZeile, 3), 4)  "Offe" And _
Left(WS1.Cells(iZeile, 3), 4)  "Besc" Then
iZähler = iZähler + 1
tempZeile = WS2.Cells(WS2.Rows.Count, 1).End(xlUp).Row + 1
WS2.Rows(tempZeile).Insert Shift:=xlDown
WS2.Cells(tempZeile, 1) = WS1.Cells(1, 14)
WS2.Cells(tempZeile, 2) = WS1.Cells(iZeile, 1)
WS2.Cells(tempZeile, 3) = WS1.Cells(iZeile, 2)
WS2.Cells(tempZeile, 4) = WS1.Cells(iZeile, 3)
End If
Next iZeile
'MsgBox "Import erfolgreich!"
Else
MsgBox "Suchwort nicht gefunden"
bolErg = False
End If
End With
Next i
Workbooks(.strFilename).Close savechanges:=False   'Workbook schließen
End With
Next
Else
MsgBox "Keine Datei gefunden"
End If
Application.ScreenUpdating = True
End With
Set objFileSearch = Nothing
End Sub

Anzeige
AW: Wd-Suche: Vorlage
06.04.2017 13:51:54
Fennek
Hallo,
folgenden Code habe ich in einem Forum gefunden:

Sub test()
Dim nDoc As Document, qDoc As Document
Set qDoc = ActiveDocument
'Set nDoc = Documents.Add
w = "KW 23"
For i = 1 To qDoc.Tables.Count
Set Suchbereich = qDoc.Tables(i).Range
With Suchbereich.Find
.Text = w
.Execute
Do While .Found
Suchbereich.Select
Selection.Font.Color = wdColorRed
.Execute
Loop
End With
Next i
End Sub
Versuche "tables" durch "content" zu ersetzen.
Wenn der Code passt, poste ihn bitte, damit zumindest ich noch etwas lernen kann.
mfg
AW: Wd-Suche: Vorlage
06.04.2017 14:19:37
cH_rI_sI
Hallo Fennek und auch alle anderen Profis,
ich kann mittlerweile im Word-Dokument nach einem Suchbegriff suchen - wenn gefunden, dann kopiere ich den ganzen Inhalt nach Excel - anbei der Code bis hierher:
Option Explicit
Public Enum SORT_BY
Sort_by_None
Sort_by_Name
Sort_by_Path
Sort_by_Size
Sort_by_Last_Access
Sort_by_Last_Modyfy
Sort_by_Date_Create
End Enum
Public Enum SORT_ORDER
Sort_Order_Ascending
Sort_Order_Descending
End Enum
Public Type FILEINFO
strFilename As String
strPath As String
lngSize As Long
dmtLastAccess As Date
dmtLastModify As Date
dmtDateCreate As Date
End Type
Public Sub Word_Import()
Dim objFileSearch As clsFileSearch
Dim lngIndex As Long
Dim strSuwort As String
Dim i As Integer
Dim bolErg As Boolean
Dim Zelle_C As Long
Dim Zelle_R As Long
Dim Wert As Long
Dim oApp As Object
Dim iZeile As Long, tempZeile As Long, iZähler As Long
Dim WS1 As Worksheet, WS2 As Worksheet
'Vorhandene Daten im Ziel löschen
ActiveWorkbook.Worksheets("temp").Activate
ActiveSheet.AutoFilter.Sort.SortFields.Clear
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
If Range("A3")  "" Then
Range("A3", ActiveCell.SpecialCells(xlLastCell)).EntireRow.Delete
Range("A3").Select
Else
Range("A3").Select
End If
Set objFileSearch = New clsFileSearch
Set oApp = FireWord()
'Set oApp = GetObject(, "Word.Application")
'strSuwort = InputBox("Suchwort eingeben")
strSuwort = "SQ"
With objFileSearch
.CaseSenstiv = False
.Extension = "*.doc*"
.FolderPath = "D:\temp\"
.SearchLike = "*"
.SubFolders = False
'.SubFolders = True
If .Execute(Sort_by_Size, Sort_Order_Descending) > 0 Then
Application.ScreenUpdating = False
For lngIndex = 1 To .FileCount
With .Files(lngIndex)
oApp.Documents.Open (.strPath)                         'Word-Dokument ö _
ffnen
On Error Resume Next
With ActiveDocument.Content.Find
.Execute FindText:=strSuwort, Forward:=True
If .Found = True Then
ActiveDocument.Content.Copy
Set WS2 = Application.Workbooks("Word-Suche.xlsm").Worksheets("temp")
WS2.Activate
ActiveSheet.Paste
'Ab hier möchte ich in den nach Excel temporär kopierten Daten suchen und die gesuchten  _
Begriffe in die Liste übertragen
Set WS1 = Application.Workbooks("Word-Suche.xlsm").Worksheets("Liste")
Set WS2 = Application.Workbooks("Word-Suche.xlsm").Worksheets("temp")
Else
'MsgBox "Suchwort nicht gefunden"
bolErg = False
End If
End With
'Next i
ActiveDocument.Close 'savechanges:=False   'Workbook schließen
End With
Next
Else
'MsgBox "Keine Datei gefunden"
End If
Application.ScreenUpdating = True
End With
Set objFileSearch = Nothing
End Sub
Private Function FireWord() As Object
On Error Resume Next
Dim oApp As Object
Dim wasOpen As Variant
Set oApp = GetObject(, "Word.Application")
'MsgBox Err.Number & " " & Err.Description
If Err.Number = 429 Then
Err.Clear
wasOpen = False
' Create the Word App.
Set oApp = CreateObject("Word.Application")
End If
Set FireWord = oApp
End Function

Ab hier möchte ich dann wieder nach dem selben Suchbegriff suchen, jedoch dann schon im Excel - aber hier stehe ich schon wieder an - ich brauche hier vermutlich mehrere Schleifen um folgendes zu ermöglichen:
Anbei der von Word temporär nach Excel kopierte Text:
Userbild
Ich möchte nach dem Begriff "MA3" suchen welcher nur dann gültig ist, wenn dieser Begriff neben der Zelle "Betreiber" eingetragen ist - was auch noch wichtig ist, ist ob der Suchbegriff oberhalb "UPDATE zu laufenden Themen" gefunden wird oder nicht (möchte ich später dann den Typ festlegen) - wenn "MA3" gefunden wurde, dann möchte ich weitere Begriffe suchen, nämlich "Komponente / Teil" und "Platz" - alle 3 Suchbegriffe inkl. dem definierten Typ (Neu / Update) möchte ich dann in eine Liste eintragen und weitersuchen, bis alle "MA3" neben dem Feld "Betreiber" gefunden wurden - dann temporär kopierten Text löschen, Word-File schließen und bei den Word-Files weitersuchen...
Die Liste soll dann so aussehen:
Userbild
Nachdem wir uns hier im Excel-VBA bewegen, habe ich zumindest die Hoffnung, dass mir hierbei jemand helfen kann - ich brauche hier vermutlich x-verschachtelte Schleifen und da stehe ich nun echt an...
Anbei noch mein Beispielfile:
https://www.herber.de/bbs/user/112695.xlsm
Bitte somit um Eure Unterstützung - Danke!
Lg,
Chrisi
Anzeige
AW: Wd-Suche: Vorlage
10.04.2017 08:33:57
cH_rI_sI
Hallo Fennek,
mein Code sieht nun so aus:
Option Explicit
Public Enum SORT_BY
Sort_by_None
Sort_by_Name
Sort_by_Path
Sort_by_Size
Sort_by_Last_Access
Sort_by_Last_Modyfy
Sort_by_Date_Create
End Enum
Public Enum SORT_ORDER
Sort_Order_Ascending
Sort_Order_Descending
End Enum
Public Type FILEINFO
strFilename As String
strPath As String
lngSize As Long
dmtLastAccess As Date
dmtLastModify As Date
dmtDateCreate As Date
End Type
Public Sub Word_Import()
Dim objFileSearch As clsFileSearch
Dim lngIndex As Long
Dim lngIndex1 As Long
Dim strSuwort As String
Dim strSuwort1 As String
Dim i As Integer
Dim bolErg As Boolean
Dim Wert As Long
Dim objApp As Object
Dim UPDATE As Boolean
Dim UPDATE_C As Long
Dim UPDATE_R As Long
Dim temp_C As Long
Dim temp_R As Long
Dim Betreiber As Boolean
Dim Betreiber_C As Long
Dim Betreiber_R As Long
Dim iZeile As Long, tempZeile As Long, iZähler As Long
Dim WS1 As Worksheet, WS2 As Worksheet
'Vorhandene Daten im Ziel löschen
ActiveWorkbook.Worksheets("temp").Activate
'ActiveSheet.AutoFilter.Sort.SortFields.Clear
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
If Range("A3")  "" Then
Range("A3", ActiveCell.SpecialCells(xlLastCell)).EntireRow.Delete
Range("A3").Select
Else
Range("A3").Select
End If
Set objFileSearch = New clsFileSearch
Set WS1 = Application.ActiveWorkbook.Worksheets("temp")
Set WS2 = Application.ActiveWorkbook.Worksheets("Liste")
'strSuwort = InputBox("Suchwort eingeben")
strSuwort = "XY"
With objFileSearch
.CaseSenstiv = False
.Extension = "*.doc*"
.FolderPath = "C:\temp\"
.SearchLike = "*"
.SubFolders = False
'.SubFolders = True
If .Execute(Sort_by_Size, Sort_Order_Descending) > 0 Then
Application.ScreenUpdating = False
Set objApp = OffApp("Word")
For lngIndex = 1 To .FileCount
With .Files(lngIndex)
objApp.Documents.Open (.strPath)
On Error Resume Next
With Documents(.strPath).Content.Find
.Execute FindText:=strSuwort, Forward:=True
If .Found = True Then
ActiveDocument.Content.Copy
WS1.Activate
WS1.Paste
With ActiveSheet.Activate
strSuwort1 = "UPDATE*"
UPDATE = Cells.Find(What:=strSuwort1, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False).Activate
If UPDATE = True Then
UPDATE_C = ActiveCell.Column
UPDATE_R = ActiveCell.Row
For temp_C = 1 To ActiveSheet.Cells.SpecialCells(xlLastCell). _
Column
For temp_R = 1 To ActiveSheet.Cells.SpecialCells(xlLastCell) _
.Row
strSuwort = "XY"
If Cells(temp_R, temp_C) Like strSuwort & "*" Then
If WS1.Cells(temp_R, temp_C - 1) Like "Betreiber"  _
Then
Cells(temp_R, temp_C).Select
Betreiber_C = ActiveCell.Column
Betreiber_R = ActiveCell.Row
tempZeile = WS2.Cells(WS2.Rows.Count, 1).End(xlUp). _
Row + 1
WS2.Rows(tempZeile).Insert Shift:=xlDown
WS2.Cells(tempZeile, 1) = Cells(Betreiber_R,  _
Betreiber_C)
End If
Else
'MsgBox "Suchwort" & " " & strSuwort & " " & "nicht  _
gefunden"
End If
Next
Next
Else
MsgBox "Suchwort" & " " & strSuwort1 & " " & "nicht gefunden"
End If
End With
Else
MsgBox "Suchwort" & " " & strSuwort & " " & "nicht gefunden"
'ActiveDocument.Close
'If Not objApp Is Nothing Then objApp.Quit
'Set objApp = Nothing
End If
End With
ActiveDocument.Close
If Not objApp Is Nothing Then objApp.Quit
Set objApp = Nothing
End With
Next
Else
'MsgBox "Keine Datei gefunden"
End If
Application.ScreenUpdating = True
End With
Set objFileSearch = Nothing
End Sub
Private Function OffApp(ByVal strApp As String, _
Optional blnVisible As Boolean = True) As Object
Dim objApp As Object
Dim blnTMP As Boolean
On Error Resume Next
Set objApp = GetObject(, strApp & ".Application")
Select Case Err.Number
Case 429
Err.Clear
Set objApp = CreateObject(strApp & ".Application")
blnTMP = True
If blnVisible = True Then
On Error Resume Next
objApp.Visible = True
Err.Clear
End If
End Select
On Error GoTo 0
Set OffApp = objApp
Set objApp = Nothing
End Function
Das Auslesen einer Word-Datei funktioniert nun über den Umweg via Excel - Hauptsache es passt ;-)
Lg
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge