Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
872to876
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
872to876
872to876
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Spezialfall

Spezialfall
31.05.2007 18:23:20
Thorben
Hallo Excel-Profis,
ich habe ein spezielles Problem. Ich möchte eine Datenbank in Excel erstellen mit allen Adressen von allen Mietern einer Hausverwaltung. Diese Daten bekomme ich aus einem Programm (MS-Dos basiert), daß die Adressen in ein Worddokument übergibt. Allerdings nur pro Wohnhaus. Diese Daten sind jeweils mit einem Semikolon getrennt.
Hier mal ein Beispiel, wie so ein Datensatz in Word aussieht:
ObjektNr;ObjektStr;ObjektPLZ;ObjektOrt;Wohnung;Name1;Name2;Strasse;PLZ;Ort;Lage;Anrede1;Anrede2
53;Musterstraße 50;56871;Musterhausen;1/1;Herr;Max Mustermann;Musterstraße 50; 56871; Musterhausen;EG;;
Für jedes Objekt wird also ein neues Worddokument erstellt.
Jetzt brauche ich also ein Makro, dass sich aus den Worddokumenten die Adressen zieht (dies allerdings ohne die erste „Überschriften-“ Zeile, da diese schon in Excel besteht), automatisch nach dem Semikolon trennt und in einen bestimmten Bereich in Excel einfügt.
Am Ende möchte ich also eine komplette Liste aller Wohnungen haben. Da dies keine einmalige Sache ist, weil neue Mieter dazu kommen bzw. wechseln, brauche ich eine Lösung die ich dann beliebig oft wiederholen kann.
Die Worddateien sind übrigens nach den jeweiligen Objektnummern bezeichnet (Bsp. Objektnr. „005“ = Worddateibezeichnung „005“
Ich hoffe ich habe mich nicht zu umständlich ausgedrückt und ihr könnt mir helfen.
Mit freundlichem Gruß
Thorben

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spezialfall
01.06.2007 08:58:00
Oberschlumpf
HI Thorben
"....und in einen bestimmten Bereich in Excel einfügt....."
Cool - hätte ich meine Glaskugel nicht gerade an David Copperfield ausgeliehen (ohne mich wäre der aufgeschmissen!!) - dann wüsste ich sofort, um welchen Bereich es sich handelt....
...eine qualifizierte Antwort erwartet eine qualifizierte Fragestellung...
Deswegen habe ich nun als "Bereich" Spalte A und Zeile 1 festgesetzt, und jeder nächste Datensatz wird in die nächste freie Zeile geschrieben - du musst den Code, wenn er denn auch bei dir funktioniert - also noch selbst anpassen.
Wenn der Inhalt der Word-Dateien vom Aufbau her immer gleich ist - also immer gleiche Überschriftenzeile, immer gleiche Anzahl an Datenspalten, jede Spalte durch ; getrennt (egal, ob Wert vorhanden oder nicht) und immer nur 2 Zeilen (Überschriften- und Datenzeile) - dann versuch es mal mit diesem Code:
(die Exceldatei muss im selben Verz. wie die Word-Dateien gespeichert sein)

Sub Hausverw()
Cells.Clear
Dim lstrWdFile As String, loZeile As Long
lstrWdFile = Dir(ThisWorkbook.Path & "\*.doc")
loZeile = 1
Application.ScreenUpdating = False
Do Until lstrWdFile = ""
Open ThisWorkbook.Path & "\" & lstrWdFile For Binary As #1
Do While Not EOF(1)
Line Input #1, zeile
If InStr(1, zeile, "Obj") > 0 Then
Range("A" & loZeile).Value = zeile
Exit Do
End If
Loop
Close
Range("A" & loZeile).Value = Right(Range("A" & loZeile).Value, Len(Range("A" &  _
loZeile).Value) - InStr(1, Range("A" & loZeile).Value, ""))
Range("A" & loZeile).Value = Replace(Range("A" & loZeile).Value, "/", "(")
Range("A" & loZeile).TextToColumns Destination:=Range("A" & loZeile), _
DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
Semicolon:=True, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), _
Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _
Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1)), _
TrailingMinusNumbers:=True
Range("E" & loZeile).Value = "'" & Replace(Range("E" & loZeile).Value, "(", "/")
lstrWdFile = Dir
loZeile = loZeile + 1
Loop
Application.ScreenUpdating = True
End Sub


Codeablauf:
1. Um den Code mehrfach zu verwenden, werden zuerst alle Zellen gelöscht
2. Die Variable lstrWdFile erhält aus dem Verzeichnis, in dem die Excel-Datei gespeichert ist, den Namen der ersten Word-Datei
3. Die Do/Loop-Schleife wird gestartet
4. Zuerst wird die Word-Datei im Binär-Mode zeilenweise eingelesen
(hier bin ich nicht sicher, ob im Binär-Modus so "gearbeitet" werden kann - auch wenn mein Code funktioniert. DAher bitte ich die, die sich hier besser auskennen, um Feedback und/oder Code-Korrektur, wenn erforderlich)
5. Sobald die Zeile gefunden wurde, in der der Textteil "Obj" vorkommt - die Überschriftenzeile - werden sowohl Überschriften- als auch Datenzeile in die erste freie Zeile in Excel geschrieben, und die Word-Datei wird geschlossen
6. Im nächsten Schritt wird die Überschriftenzeile entfernt
7. Dann wird in der verbleibenden Datenzeile das Zeichen "/" durch "(" ersetzt, da ein späterer Zellwert "1/1" (Wohnung) von Excel als Datum interpretiert und entsprechend umgewandelt wird, was hier nicht erwünscht ist
8. Jetzt wird die Datenzeile, die noch komplett in Zelle A steht, durch die ; auf so viel Spalten verteilt, wie erforderlich
9. Nun wird das in 7. gesetzte Zeichen "(" wieder in "/" umgewandelt - damit nicht wieder ein Datumswert entsteht, wird diesem Zellinhalt gleichzeitig ein Apostroph vorgesetzt, damit Excel diesen Zellwert als Text behandelt
Konnte ich helfen?
Ciao
Thorsten

Anzeige
AW: Spezialfall
01.06.2007 09:31:39
thorben
Hallo Thorsten,
erstmal vielen Dank für deine Antwort.
Sorry, dass mit dem Bereich Zelle A1 war da schon richtig.
Ich habe mir das Makro in meine Exceldatei eingefügt. Leider übernimmt er nur die Überschriften anstatt der Einträge für die Wohnungen.
Zu den Worddateien: Die sind wie du schon gesagt hast immer gleich, bloß dass es für ein Haus mal 5 Zeilen gibt (5 Wohnungen) und für das andere Haus z.B. 9 Zeilen (also 9 Wohnungen).
Ich hoffe das du mir da nochmal helfen kannst.
Aber nochmals vielen Dank für deine Antwort...
Gruß
Thorben

AW: Spezialfall
01.06.2007 09:43:27
Oberschlumpf
Hi Thorben
Kannst du eine Worddatei mit mehr als 2 Zeilen (Wohnungen) uploaden?
Wenn die Daten keiner sehen darf, dann ersetze sie durch Bsp-Daten.
Ciao
Thorsten

Anzeige
AW: Spezialfall
01.06.2007 14:30:00
thorben
Hab da vielleicht nochmal nen Einfall. Vielleicht kann man ja einfach alle Inhalte aller Worddateien einlesen. Und dann die entsprechenden Überschriften rausfiltern und löschen.
Hab da schon versucht ein bischen rumgebasteln, da ist aber nur Blödsinn bei rausgekommen.
Ich hoffe ich habe damit jetzt nicht noch mehr Fragen aufgeworfen...
Gruß Thorben

AW: Spezialfall
01.06.2007 14:54:32
Oberschlumpf
Hi Thorben
Versuch es mal mit dieser korrigierten Version:

Sub Hausverw()
Cells.Clear
Dim lstrWdFile As String, loZeile As Long
lstrWdFile = Dir(ThisWorkbook.Path & "\*.doc")
loZeile = 1
Do Until lstrWdFile = ""
Open ThisWorkbook.Path & "\" & lstrWdFile For Binary As #1
Do Until Loc(1) >= LOF(1)
Line Input #1, zeile
If InStr(1, zeile, "Herr") > 0 Or InStr(1, zeile, "Frau") > 0 Then
If InStr(1, zeile, "") > 0 Then
Range("A" & loZeile).Value = Right(zeile, Len(zeile) -  _
InStr(1, zeile, ""))
Else
Range("A" & loZeile).Value = zeile
End If
Range("A" & loZeile).Value = Replace(Range("A" & loZeile).Value, "/" _
, "(")
Range("A" & loZeile).TextToColumns Destination:=Range("A" & loZeile) _
, _
DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
Semicolon:=True, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), _
Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _
Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1)), _
_
TrailingMinusNumbers:=True
Range("E" & loZeile).Value = "'" & Replace(Range("E" & loZeile). _
Value, "(", "/")
loZeile = loZeile + 1
End If
Loop
Close
lstrWdFile = Dir
Loop
End Sub


Hab mich nun etwas schlauer gemacht, was den Binary-Mode betrifft, und glaube, dass nun auch bei dir alles laufen sollte - zumindest liest mir der Code nun anstandslos alle Word-Dateien ein.
Ach so, Voraussetzung ist allerdings, dass in jeder Zeile die Anrede "Mann" oder "Frau" vorkommt.
Ich hoffe, diese Voraussetzung wird in all deinen Word-Dateien erfüllt.
Bin auf dein Feedback neugierig :-)
Ciao
Thorsten

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige