Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen

Tabellenblätter vergleichen


Betrifft: Tabellenblätter vergleichen von: Tim
Geschrieben am: 10.09.2019 17:04:50

Hallo zusammen,

ich habe auf einer Userform eine Listbox die ich beim Starten einlese.
Jetzt stehe ich vor der Herausforderung, dass bei doppelten Werten "Name" zwischen dem Tabellenblatt "Mitarbeiter" & "Arbeitszeit", den Wert aus der Arbeitszeit führend ist und der doppelte Wert aus dem Tabellenblatt "Mitarbeiter" nicht mit eingelesen werden soll.

Meine versuche das zu lösen scheiterten, deshalb bitte ich euch um eure Unterstützung

Dazu habe ich folgende Bsp.Datei, wer kann mir dabei helfen?

https://www.herber.de/bbs/user/131960.xlsm

  

Betrifft: AW: Tabellenblätter vergleichen von: 1712575.html
Geschrieben am: 12.09.2019 07:26:24

Hallo Tim,

z.B. so:

Private Sub UserForm_Initialize()
    Dim i As Long
    
    UserForm1.ListBox1.ColumnCount = 6 'Anzahl der Spalten
    UserForm1.ListBox1.ColumnWidths = "4cm;3cm;3cm;3cm;3cm;2cm" 'Spaltenbreite in cm
    
    Me.ListBox1.Clear
    
    With Worksheets("Arbeitszeiten")
        For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
            Me.ListBox1.AddItem .Cells(i, 1)
        Next i
    End With
    
    With Worksheets("Mitarbeiter")
        For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
            If WorksheetFunction.CountIf(Worksheets("Arbeitszeiten") _
            .Columns(1), .Cells(i, 1)) = 0 Then
                Me.ListBox1.AddItem .Cells(i, 1)
            End If
        Next i
    End With
    
    End Sub
    
Gruß Werner
  

Betrifft: AW: Tabellenblätter vergleichen von: 1712614.html
Geschrieben am: 12.09.2019 09:38:36

Hallo Werner,

funktioniert soweit wie gewünscht, jedoch bekomme ich Probleme wenn ich den nächsten Wert zu Spalte B übernehmen will.

Ich habe das wie folgt versucht:

Private Sub UserForm_Initialize()
   Dim i As Long
   
   UserForm1.ListBox1.ColumnCount = 6 'Anzahl der Spalten
   UserForm1.ListBox1.ColumnWidths = "4cm;3cm;3cm;3cm;3cm;2cm" 'Spaltenbreite in cm
   
   Me.ListBox1.Clear
   
   With Worksheets("Arbeitszeiten")
       For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
                
       Me.ListBox1.AddItem .Cells(i, 1)
       'Me.ListBox1.List(ListBox1.ListCount - 1, 1) = Cells(i, 2) = diese stelle führt zu  _
   Problemen
       
       
       Next i
   End With
   
   With Worksheets("Mitarbeiter")
       For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
           If WorksheetFunction.CountIf(Worksheets("Arbeitszeiten") _
           .Columns(1), .Cells(i, 1)) = 0 Then
               Me.ListBox1.AddItem .Cells(i, 1)
               Me.ListBox1.List(ListBox1.ListCount - 1, 1) = Cells(i, 2)
           End If
       Next i
   End With
   
   End Sub

  

Betrifft: AW: Tabellenblätter vergleichen von: 1712633.html
Geschrieben am: 12.09.2019 10:45:04

Hallo Tim,

so:

Private Sub UserForm_Initialize()
  Dim i As Long
  
  UserForm1.ListBox1.ColumnCount = 6 'Anzahl der Spalten
  UserForm1.ListBox1.ColumnWidths = "4cm;3cm;3cm;3cm;3cm;2cm" 'Spaltenbreite in cm
  
  Me.ListBox1.Clear
  
  With Worksheets("Arbeitszeiten")
      For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
         Me.ListBox1.AddItem .Cells(i, 1)
         Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = .Cells(i, 2)
         Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = .Cells(i, 3).Text
         Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = .Cells(i, 4).Text
         Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = .Cells(i, 5)
         Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = .Cells(i, 6)
      Next i
  End With
  
  With Worksheets("Mitarbeiter")
      For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
          If WorksheetFunction.CountIf(Worksheets("Arbeitszeiten") _
          .Columns(1), .Cells(i, 1)) = 0 Then
              Me.ListBox1.AddItem .Cells(i, 1)
              Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = .Cells(i, 2)
              Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = .Cells(i, 3)
              Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = .Cells(i, 4).Text
              Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = .Cells(i, 5).Text
              Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = .Cells(i, 6)
          End If
      Next i
  End With
  
  End Sub
Die Referenzierung von Cells in deinem Code ist falsch.

Wenn das Tabellenblatt in einer With / End With "Klammer" angeführt ist, dann werden die Range-Objekte innerhalb des With / End With auf das im With angegebene Tabellenblatt referenziert indem vor dem Range-Objekt ein Punkt geschrieben wird.

Gruß Werner
  

Betrifft: AW: Tabellenblätter vergleichen von: 1712651.html
Geschrieben am: 12.09.2019 11:13:12

funktioniert perfekt, vielen Dank!

  

Betrifft: Gerne u. Danke für die Rückmeldung. o.w.T. von: 1712655.html
Geschrieben am: 12.09.2019 11:29:34


Beiträge aus dem Excel-Forum zum Thema "Tabellenblätter vergleichen"