Thema Datum  Von Nutzer Rating
Antwort
28.02.2018 09:47:07 Hans
NotSolved
28.02.2018 10:08:17 Gast79681
NotSolved
28.02.2018 10:28:02 Gast12013
NotSolved
Blau Dateien mit Dictionary vergleichen
28.02.2018 12:10:20 Hans
Solved

Ansicht des Beitrags:
Von:
Hans
Datum:
28.02.2018 12:10:20
Views:
528
Rating: Antwort:
 Nein
Thema:
Dateien mit Dictionary vergleichen

Danke für die schnelle Antwort 

Hab schon eine andere Lösung gefunden

Habe mich erst mal für den reinen Vergleich zweier Excel dateien konzentriert.

Mein nächter Schritt ist dann .txt datein einzubinden.

Option Explicit

    Dim PfadName1 As Variant
    Dim PfadName2 As Variant
    Dim sDateiName1 As String
    Dim sDateiName2 As String
    Dim bDateiNum1 As Byte
    Dim bDateiNum2 As Byte
    Dim wb1 As Workbook
    Dim wb2 As Workbook

Private Sub CommandButton1_Click()

    Call GetOpen_FileName
    Call Vergleich_Faerbung

    
End Sub

Private Sub GetOpen_FileName()
    
    Dim i As Long
    Dim n As Long
    Dim x As Long
    Dim intWS As Byte
    Dim lName1 As Long
    Dim lName2 As Long
    
    MsgBox "Wählen Sie die beiden Exceltabellen die Verglichen werden sollen.", vbQuestion & vbOKOnly, "Info"
    ChDrive "S"
    ChDir "S:\Projekte"
          
    PfadName1 = Application.GetOpenFilename("Excel-Dateien (*.xl??), *.xl??", Title:="Bitte Exceldatei auswählen", MultiSelect:=False)
    'Extraktion des Mappennamen
    If Not PfadName1 = False Then
      Workbooks.Open PfadName1
      PfadName1 = Mid$(PfadName1, InStrRev(PfadName1, "\") + 1)
      x = (InStrRev(CStr(PfadName1), ".") - 1)
      lName1 = Len(PfadName1) - (Len(PfadName1) - x)
      sDateiName1 = Left(PfadName1, lName1)
      'MsgBox (sDateiName1)
    Else
      Exit Sub
    End If
    
    Workbooks(sDateiName1).Worksheets(1).Range("A:A").Select
    Selection.Copy
    Windows("Vergleich_Excel.xlsm").Activate
    Columns("A:A").Select
    ActiveSheet.Paste
    Columns("A:A").EntireColumn.AutoFit
    Application.CutCopyMode = False
    
    PfadName2 = Application.GetOpenFilename("Excel-Dateien (*.xl??), *.xl??", Title:="Bitte die Vergleichsdatei auswählen", MultiSelect:=False)
    
    If Not PfadName2 = False Then
      Workbooks.Open PfadName2
      PfadName2 = Mid$(PfadName2, InStrRev(PfadName2, "\") + 1)
      i = (InStrRev(CStr(PfadName2), ".") - 1)
      lName2 = Len(PfadName2) - (Len(PfadName2) - i)
      sDateiName2 = Left(PfadName2, lName2)
      'MsgBox (sDateiName2)
    Else
      Exit Sub
    End If
    
    Workbooks(sDateiName2).Worksheets(1).Range("A:A").Select
    Selection.Copy
    Windows("Vergleich_Excel.xlsm").Activate
    Columns("B:B").Select
    ActiveSheet.Paste
    Columns("B:B").EntireColumn.AutoFit
    Application.CutCopyMode = False
    
    'Vergleich Anzahl der Tabellenblätter
    If Workbooks(sDateiName1).Worksheets.Count <> Workbooks(sDateiName2).Worksheets.Count Then
      MsgBox "Die Anzahl der Tabellenblätter ist unterschiedlich!"
    End If

    'Vergleich der benutzen Zellen
    For intWS = 1 To Workbooks(sDateiName1).Worksheets.Count
      If Workbooks(sDateiName1).Worksheets(intWS).UsedRange.Cells.Count <> Workbooks(sDateiName2).Worksheets(intWS).UsedRange.Cells.Count Then
        MsgBox "Die Anzahl der benutzen Zellen in Blatt " & intWS & " " & "ist unterschiedlich!"
      End If
    Next intWS
       
End Sub

Sub Vergleich_Faerbung()

    Dim i As Long
    Dim x As Long
    Dim k As Long
    Dim n As Long
    Dim objDic1 As Object
    Dim objDic2 As Object
    Dim strCount1 As String
    Dim strCount2 As String
    
    Set objDic1 = CreateObject("scripting.dictionary")
    Set objDic2 = CreateObject("scripting.dictionary")
    
    strCount1 = Cells(Rows.Count, 1).End(xlUp).Row
    strCount2 = Cells(Rows.Count, 2).End(xlUp).Row
    
    If PfadName1 Or PfadName2 = False Then
      Exit Sub
    Else
    
    Workbooks(sDateiName1).Close SaveChanges:=False
    Workbooks(sDateiName2).Close SaveChanges:=False

    'Importieren von Zellen aus Workbook(1) in Dictionary 1
    For i = 1 To strCount1
      If Not objDic1.exists(Cells(i, 1).Value) Then
        objDic1.Add Cells(i, 1).Value, i
      End If
    Next
    
    'Importieren von Zellen aus Workbook(2) in Dictionary 2
    For x = 1 To strCount2
      If Not objDic2.exists(Cells(x, 2).Value) Then
        objDic2.Add Cells(x, 2).Value, x
      End If
    Next
    
    'Abfrage ob in aus WB2 ind dictionary 1 vorhanden
    For k = 1 To strCount2
      If objDic1.exists(ActiveSheet.Cells(k, 2).Value) Then
        Cells(k, 2).Interior.ColorIndex = 4
      Else
        Cells(i, 2).Interior.ColorIndex = 3
      End If
    Next
    
    'Abfrage ob in aus WB1 ind Dictionary 2 vorhanden
    For n = 1 To strCount1
      If objDic2.exists(ActiveSheet.Cells(n, 1).Value) Then
        Cells(n, 1).Interior.ColorIndex = 4
      Else
        Cells(n, 1).Interior.ColorIndex = 3
      End If
    Next
    
    'Debug.Print "Spalte 1"
    'Debug.Print ""
    'For Each key In objDic1.Keys
    'Debug.Print key, objDic1(key)
    'Next key
    'Debug.Print ""
    'Debug.Print "Spalte 2"
    'Debug.Print ""
    'For Each key In objDic2.Keys
    'Debug.Print key, objDic2(key)
    'Next key
    
    End If
End Sub

 

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
28.02.2018 09:47:07 Hans
NotSolved
28.02.2018 10:08:17 Gast79681
NotSolved
28.02.2018 10:28:02 Gast12013
NotSolved
Blau Dateien mit Dictionary vergleichen
28.02.2018 12:10:20 Hans
Solved