Irgendwie finde ich momentan keine Lösung für mein Problem, oder ich
sehe den Wald vor lauter Bäumen nicht.
Ich habe ein einem Word Dokument (Word 2003) eine Tabelle mit drei
Spalten und etwa 25 Zeilen (keine Excel Tabelle). In der ersten Spalte
sind verschiedene Bezeichnungen aufgeführt und der dritten Spalte
werden die verwendeten Farben oder Ausführungen aufgelistet. Ich
möchte nun bestimmte Zellen (immer die gleichen) miteinader
vergleichen und je nach Resultat (gleicher Zelleninhalt oder
unterschiedlich) eine der beiden betreffenden Zeilen löschen.
In etwa habe ich mir das so vorgestellt:
- Vergleiche Zelle C5 mit Zelle C8
- Haben die Zellen den gleichen Inhalt so soll Zeile 8 (A8:C8)
gelöscht werden
- Haben die Zellen einen unterschiedlichen Inhalt so soll nichts getan
werden
Ich habe mittels "Einfügen / Textmarke" eine Bookmark (Range)
eingefügt, aber irgendwie stehe ich nun mit der Sache mit dem
Vergleichen der Zelleninhalte an und hoffe ihr könnt mir weiterhelfen.
'**********
Sub Makro1()
Selection.SelectCell
ActiveDocument.Bookmarks.Add Range:=Selection.Range,
Name:="Farbe_01"
End Sub
'**********
Besten Dank im voraus für eure Hilf und Bemühungen.
Mariah
> In etwa habe ich mir das so vorgestellt:
> - Vergleiche Zelle C5 mit Zelle C8
> - Haben die Zellen den gleichen Inhalt so soll Zeile 8 (A8:C8)
> gelöscht werden
> - Haben die Zellen einen unterschiedlichen Inhalt so soll nichts getan
> werden
Kleine Frage, ist das der einzige Vergleich, den du machen willst oder
müssen anschliessend andere Zeilen noch miteinander verglichen werden? (also
bsp. C6 mit C9, C7 mit c10 usw.)
--
Thomas Gahler
MVP für WordVBA
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows XP (SP2), Office XP (SP3)
Nun, dies ist eine knifflige Frage. Ich habe nochmals die Tabelle
genau betrachtet. Diese Tabelle ist ein Teil des Ergebnis (Ausdruck)
aus einem Planungs-Programm für Möbel. Je nach dem wie kompliziert
oder unterschiedlich die einzelnen Teile sind, hat diese Tabelle mehr
oder weniger Zeilen, respektive einzelne Zellen welche miteinander
verglichen werden müssen. Im einfachsten Fall wird nur ein Vergleich
(oder möglicherweise auch gar keiner) benötigt weil nur beispielsweise
5 Zeilen mit Angaben vorhanden sind. Im schlechtesten Fall müssen etwa
10 Zellen miteinander verglichen werden.
Ich denke ich werde erst nach einem bekannten Begriff in der Spalte A
suchen ob dieser vorhanden ist und falls ja in die Spalte C dieser
Zeile gehen um den Wert (Zelleninhalt "Farbe_01") der zu diesem
Begriff gehört zu erhalten. Danach soll nach einem zweiten bekannten
Begriff gesucht werden und falls dieser auch vorhanden ist, soll der
entsprechende Wert in der Spalte C (Zelleninhalt "Farbe_02") mit dem
ersten Wert ("Farbe_01") verglichen werden. Je nach Ergebnis dieses
Verleichs soll nun, wie erwähnt die eine der beiden Zeilen gelöscht
werden. Diese Zeilen Löschung ist abhängig vom "Rang" / "Position" des
gesuchten Begriffs.
Diese Tabelle hat in etwa folgenden Aufbau / Aussehen:
Spalte A - Spalte B - Spalte C
Zeile 1 - "Seiten Farbe" - leere Zelle - "rot"
Zeile 2 - "Seiten Kante" - leere Zelle - "rot"
Zeile 3 - "Boden Farbe" - leere Zelle - "blau"
Zeile 4 - "Boden Kante" - leere Zelle - "rot"
Zeile 5 - "Deckel Farbe" - leere Zelle - "grün"
Zeile 6 - "Deckel Kante" - leere Zelle - "rot"
usw.
In diesem Beipiel ist nun die Idee, dass jeweils der Wert
(Zelleninhalt) von "Seiten Farbe", "Boden Farbe" und "Deckel Farbe"
nacheinander verglichen werden. Es gibt keine Übereinstimmung also
sollen keine Zeilen gelöscht werden. Nun sollen auch "Seiten Kante",
"Boden Kante" und "Deckel Kante" miteinander verglichen werden. Hier
gibt es Übereinstimmungen und es sollen nun die Zeilen 4 und 6
gelöscht werden, da diese Informationen mehrfach vorhanden sind und
der Übersichtlichkeit wegen nicht benötigt werden.
Vermutlich habe ich mich in einen Gedanken verrannt und komme darum
nicht auf die Lösung meines Problems. Ich danke dir und hoffe du
kannst mir bei diesem Problem helfen.
Mariah
Ich konnte inzwischen mein Problem mit dem Vergleichen von
Zelleninhalten in Word Tabellen lösen. Es ist vielleicht nicht die
eleganteste Lösung aber sie funktioniert zumindest. Für jene welche
vielleicht später ein ähnliches Problem haben, stelle ich meine Lösung
hier ins Netz.
Es ist offenbar in Word nicht möglich den Zelleninhalt direkt
abzufragen weil die Abfrage "Range.Value", welche in Excel vorhanden
ist, fehlt. Daher habe ich den Umweg über die Abfrage einer Variablen
gewählt.
'******************************
Sub Vergleich_Zelleninhalt()
'
Dim Farbe_Seiten As String, Kante_Seiten As String
Dim Farbe_Boden As String, Kante_Boden As String
Dim Farbe_Deckel As String, Kante_Deckel As String
'
' Textmarke einfügen und Variable definieren
Selection.GoTo What:=wdGoToTable, Which:=wdGoToFirst, Count:=1,
Name:=""
Selection.Find.ClearFormatting
With Selection.Find
.Text = "Seiten Farbe"
.Forward = True
.Wrap = wdFindStop
.MatchCase = True
End With
Selection.Find.Execute
Selection.EndKey Unit:=wdRow
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
ActiveDocument.Bookmarks.Add Range:=Selection.Range,
Name:="Farbe_der_Seiten"
Farbe_Seiten = Selection.Bookmarks("Farbe_der_Seiten").Range
'
' Textmarke einfügen und Variable definieren
Selection.GoTo What:=wdGoToTable, Which:=wdGoToFirst, Count:=1,
Name:=""
Selection.Find.ClearFormatting
With Selection.Find
.Text = "Seiten Kante"
.Forward = True
.Wrap = wdFindStop
.MatchCase = True
End With
Selection.Find.Execute
Selection.EndKey Unit:=wdRow
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
ActiveDocument.Bookmarks.Add Range:=Selection.Range,
Name:="Kante_der_Seiten"
Kante_Seiten = Selection.Bookmarks("Kante_der_Seiten").Range
'
' Textmarke einfügen und Variable definieren
Selection.GoTo What:=wdGoToTable, Which:=wdGoToFirst, Count:=1,
Name:=""
Selection.Find.ClearFormatting
With Selection.Find
.Text = "Boden Farbe"
.Forward = True
.Wrap = wdFindStop
.MatchCase = True
End With
Selection.Find.Execute
Selection.EndKey Unit:=wdRow
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
ActiveDocument.Bookmarks.Add Range:=Selection.Range,
Name:="Farbe_des_Boden"
Farbe_Boden = Selection.Bookmarks("Farbe_des_Boden").Range
'
' Textmarke einfügen und Variable definieren
Selection.GoTo What:=wdGoToTable, Which:=wdGoToFirst, Count:=1,
Name:=""
Selection.Find.ClearFormatting
With Selection.Find
.Text = "Boden Kante"
.Forward = True
.Wrap = wdFindStop
.MatchCase = True
End With
Selection.Find.Execute
Selection.EndKey Unit:=wdRow
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
ActiveDocument.Bookmarks.Add Range:=Selection.Range,
Name:="Kante_des_Boden"
Kante_Boden = Selection.Bookmarks("Kante_des_Boden").Range
'
' Textmarke einfügen und Variable definieren
Selection.GoTo What:=wdGoToTable, Which:=wdGoToFirst, Count:=1,
Name:=""
Selection.Find.ClearFormatting
With Selection.Find
.Text = "Deckel Farbe"
.Forward = True
.Wrap = wdFindStop
.MatchCase = True
End With
Selection.Find.Execute
Selection.EndKey Unit:=wdRow
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
ActiveDocument.Bookmarks.Add Range:=Selection.Range,
Name:="Farbe_des_Deckel"
Farbe_Deckel = Selection.Bookmarks("Farbe_des_Deckel").Range
'
' Textmarke einfügen und Variable definieren
Selection.GoTo What:=wdGoToTable, Which:=wdGoToFirst, Count:=1,
Name:=""
Selection.Find.ClearFormatting
With Selection.Find
.Text = "Deckel Kante"
.Forward = True
.Wrap = wdFindStop
.MatchCase = True
End With
Selection.Find.Execute
Selection.EndKey Unit:=wdRow
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
ActiveDocument.Bookmarks.Add Range:=Selection.Range,
Name:="Kante_des_Deckel"
Kante_Deckel = Selection.Bookmarks("Kante_des_Deckel").Range
'
Selection.GoTo What:=wdGoToTable, Which:=wdGoToFirst, Count:=1,
Name:=""
'
' Vergleichen der Variablen
If Farbe_Seiten = Farbe_Boden Then
MsgBox "Die Farben von Seiten und Boden sind identisch."
Else
MsgBox "Die Farben von Seiten und Boden sind unterschiedlich."
End If
'
If Farbe_Seiten = Farbe_Deckel Then
MsgBox "Die Farben von Seiten und Deckel sind identisch."
Else
MsgBox "Die Farben von Seiten und Deckel sind
unterschiedlich."
End If
'
If Kante_Seiten = Kante_Boden Then
MsgBox "Die Kanten von Seiten und Boden sind identisch."
Else
MsgBox "Die Kanten von Seiten und Boden sind unterschiedlich."
End If
'
If Kante_Seiten = Kante_Deckel Then
MsgBox "Die Kanten von Seiten und Deckel sind identisch."
Else
MsgBox "Die Kanten von Seiten und Deckel sind
unterschiedlich."
End If
'
End Sub
'******************************
Sollte jemand noch eine andere oder bessere Lösung haben, so bin ich
sehr interessiert daran.
Beste Grüsse wünscht allen Lesern
Mariah