Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1428to1432
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

Tabelle: Zeilen vergleichen-Unterschiede markieren

Tabelle: Zeilen vergleichen-Unterschiede markieren
16.06.2015 09:13:12
DAEMAN
Leider ist der bisherige Verlauf verloren gegangen/deaktiviert worden, daher hier die Historie: Hallo Leute, ich habe mir eine Excel-VBA-Abfrage erstellt mit deren Hilfe Word-Formulare ausgelesen (XML- _ Verknüpfung) und in eine Excel-Tabelle geschrieben werden. Die Formulare haben verschiedene _ Revisionen, sodass ich eingestellt habe, dass doppelte oder mehrfach vorkommende Zeilen/Datensä _ tze entfernt werden (das aktuellste Änderungsdatum bleibt stehen) - doppelte Datensätze sind dann vorhanden, wenn der "Projektname" [Spalte A] identisch ist. Mein Ziel: Bevor die doppelten Datensätze gelöscht werden, soll ein Vergleich zwischen dem aktuellsten und _ _ _ dem zweit-aktuellsten Änderungsdatum durchgeführt werden - die Zeilen stehen Dank der _ Sortierung direkt untereinander, dabei soll jede Spalte durchlaufen werden und die Werte direkt _ und einzeln miteinander verglichen werden. Markiert werden sollen die Zellen, die NICHT identisch sind (z.B. Hintergrundfarbe gelb) Nice-to-have: Wäre es auch noch möglich den alten Wert als Kommentar in die Zelle mit dem neuen _ _ _ Wert einzufügen? Vielen Dank im Voraus! Gruß DAEMAN Hi DAEMAN, als Excel-Profi hättest Du auch selbst auf die bedingte Formatierung kommen können: Das mit dem Kommentar geht natürlich, aber halt mit VBA - dazu müßte man aber Deine Datei sehen: _ _ _ ob Du es an einer bestimmten Stelle in evtl. vorhandene Makros einfügen willst oder wie auch _ _ immer. Schöne Grüße, Michael Hallo Michael,
danke für den Vorschlag mit der bedingten Formatierung, und ja darauf bin ich auch schon gekommen, nur wollte ich eine vollständige VBA-Lösung, da die Excel-Tabelle einfach viel zu groß und variabel ist für eine bedingte Formatierung...
Ich werde hier mal die wesentlichen Teile des VBA Codes aufführen, und hoffe, jemand kommt eine Idee, wie man mein o.g. Ziel erreichen kann!
CODE:
Private Sub IMPORT_PROJECTS_Click()
On Error Resume Next
Dim ws As Worksheet, Lo As ListObject, objWord As Object, _
Doc As Object, cXML As CustomXMLPart, myXMLPart As CustomXMLPart, _
FS As New FileSearch, File As Variant, Datum As Date
'Tabelle im Dokument referenzieren
Set ws = Worksheets(1)
'List-Object Tabelle mit Namen referenzieren
Set Lo = ws.ListObjects("COLLATION")
'Word Objekt erzeugen
Set objWord = CreateObject("Word.Application")
objWord.Visible = False
objWord.DisplayAlerts = False
'ANZEIGE: Aktualisierungen unsichtbar
Application.DisplayAlerts = False
Application.ScreenUpdating = False
'Automatische Suche nach allen .docx Dateien im vordefinierten Pfad (inkl. Unterornder -  _
Klassenmodul, ähnlich dem alten Filesearch aus Excel 2003)
With FS
.FileName = "*.docx"
.LookIn = "V:\NST_FILER\Dept\PRM\All\06_Documents\DEN\PIS\BACKUP\TEST"
'.LookIn = "\\notion\compprojects\ProjectPlanningExecution\GenProjectInfo\Lists\Project  _
Information Sheet\Attachments"
.SearchSubFolders = True
.Execute
'Für jede Datei die gefunden wurde ..
For Each File In .FoundFiles
'Öffne die Datei
Set Doc = objWord.Documents.Open(File)
'Suche das CustomXML im Dokument
For Each cXML In Doc.CustomXMLParts
If cXML.BuiltIn = False Then
Set rootNode = cXML.SelectSingleNode("root")
If Not rootNode Is Nothing Then
Set myXMLPart = cXML
Exit For
End If
End If
Next
'Wenn der CustomXML-Part gefunden wurde ...
If Not myXMLPart Is Nothing Then
'Formularfelder zu Variablen zuordnen
strProject = myXMLPart.SelectSingleNode("/root/Project").Text
strDate1 = myXMLPart.SelectSingleNode("/root/Date1").Text
usw...
Lo.ListRows.Add
Lo.ListRows(Lo.ListRows.Count).Range(1, 1) = strProject
Lo.ListRows(Lo.ListRows.Count).Range(1, 2) = strDate1
usw....
End If
'Dokument schließen
Doc.Close False
Next
'Word schließen
objWord.DisplayAlerts = False
objWord.Quit
Set objWord = Nothing
'SORTIERUNG: PROJEKTNAME
Lo.Sort.SortFields.Add Key:=Range("A5"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
With Lo.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'SORTIERUNG: Chronologisch, absteigend
Lo.Sort.SortFields.Add Key:=Range("C5"), SortOn:=xlSortOnValues, _
Order:=xlDescending, DataOption:=xlSortNormal
With Lo.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'SO, nun stehen die importierten Projekte mit demselben Namen untereinander, chronologisch absteigend sortiert
'Jetzt fehlt mir nur noch der Vergleich der Zeilen (jede Spalte einzeln durchlaufen), die denselben Projektnamen besitzen - es soll das neuste Änderungsdatum mit dem zweit neusten verglichen werden
'Bei Unterschieden sollen beide markiert werden, zudem soll in die neuere Zelle ein Kommentar eingefügt werden, der den Inhalt der älteren Zelle enthält...
Hat jemand eine Idee?
Danke + Gruß
DAEMAN

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Beispieldatei?
17.06.2015 14:09:10
Michael
Hi DAEMAN,
irgendwie hatte sich der Server gestern vorübergehend "verschluckt".
Dein Code hilft mir gar nichts, um an einer Lösung zu arbeiten; eine Datei mit einer sinnvollen Menge Beispielwerten wäre hilfreich: ich habe keine Lust, mir eine Tabelle aus den Fingern zu saugen.
Lade halt was hoch, dann wirst Du geholfen.
Schöne Grüße,
Michael
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige