...in dem Beitrag: https://www.herber.de/forum/archiv/1088to1092/t1090132.htm
erhielt ich eine tolle Lösung von Tino. Leider stoße ich hier noch an 2 Probleme im Nachgang. Wollte aber den alten Beitrag nicht noch unötig erweitern, daher heut ein neuer Eintrag.
Problem:
Wie kann ich den Code von Tino so anpassen, dass ich mehr wie 2 Spalten angezeigt bekomme ?
Und
Kann ich die Spalte in der derSuchbegriff gefunden wird mit anzeigen lassen ? Wenn ja, Wie ?
Nun, es ist so, dass in meiner jetztigen Datei die Tabellen unterschiedliche Strukturen haben vom Aufbau - eine 67 Spalten, die andere 98 und die dritte "nur" 24...
Was das Anzeigen der Spaltenüberschriften bei der Option über "alle" Suchen nur beschränkt geeignet ist...
> Hier würde ich dann nur die Spalten Anzeigen lassen wollen - die in allen Vorkommen. Die Stammdaten...
Spalten 1,3,4,11,12,15 und 21 !
Wäre Super wenn man mir da helfen könnte. Vor allem der folgende Teil des Codes erweist sich für mich schwieriger als Gedacht:
Private Sub LeseDaten(ParamArray oSh() As Variant)
Dim oDic1 As Object, oDim2 As Object
Dim meAr, myArTemp
Dim i As Integer, A As Long, B As Long
Set oDic1 = CreateObject("Scripting.Dictionary")
'Daten Sammeln ohne doppelte
'LBound() kleinster verfügbaren Index der Array
'UBound() kleinster verfügbaren Index der Array
'### ist nur ein Hilfsmittel um Spalte 1 von Spalte 2 wieder trennen zu können
For i = LBound(oSh) To UBound(oSh)
With oSh(i)
meAr = .Range("B2:C" & .Cells(.Rows.Count, 2).End(xlUp).Row)
For A = 1 To UBound(meAr)
oDic1(meAr(A, 1) & "###" & meAr(A, 2)) = 0
Next
End With
Next i
myArTemp = oDic1.keys
ListView1.ListItems.Clear
With ListView1
'ListView Überschrift erstellen
.ColumnHeaders.Add 1, , oSh(0).Range("B1")
.ColumnHeaders.Add 2, , oSh(0).Range("C1")
.View = lvwReport
'Listview mit Daten füllen
For A = LBound(myArTemp) To UBound(myArTemp)
meAr = Split(myArTemp(A), "###")
.ListItems.Add B + 1, , meAr(0)
.ListItems(B + 1).SubItems(1) = meAr(1)
B = B + 1
Next A
End With
LVColumnWidth ListView1, True 'optimale Spalte einstellen
End Sub
Dachte an diesen Weg...aber klappt nicht:
Private Sub LeseDaten(ParamArray oSh() As Variant)
Dim oDic1 As Object, oDim2 As Object
Dim meAr, myArTemp
Dim i As Integer, A As Long, B As Long
Set oDic1 = CreateObject("Scripting.Dictionary")
'Daten Sammeln ohne doppelte
'LBound() kleinster verfügbaren Index der Array
'UBound() kleinster verfügbaren Index der Array
'### ist nur ein Hilfsmittel um Spalte 1 von Spalte 2 wieder trennen zu können
For i = LBound(oSh) To UBound(oSh)
With oSh(i)
meAr = .Range("B2:DD" & .Cells(.Rows.Count, 2).End(xlUp).Row)
For A = 1 To UBound(meAr)
oDic1(meAr(A, 1) & "###" & meAr(A, 3) & "###" & meAr(A, 11) & "###" & meAr(A, 12) _
& "###" & meAr(A, 15) & "###" & meAr(A, 21)) = 0 '
' Erweiterung der Spalten aus denen gelesen werden soll
Next
End With
Next i
myArTemp = oDic1.keys
ListView1.ListItems.Clear
ListView1.ColumnHeaders.Clear ' habe ich ergänzt, da sonst mit jedem Suchklick die Ü _
berschrift zusätzlich auftaucht....
With ListView1
'ListView Überschrift erstellen
.ColumnHeaders.Add 1, , oSh(0).Range("A1") ' Dachte so könnte man die SpaltenNamen _
gezielt setzten...
.ColumnHeaders.Add 2, , oSh(0).Range("C1")
.ColumnHeaders.Add 3, , oSh(0).Range("K1")
.ColumnHeaders.Add 4, , oSh(0).Range("L1")
.ColumnHeaders.Add 5, , oSh(0).Range("N1")
.ColumnHeaders.Add 6, , oSh(0).Range("T1")
.View = lvwReport
' Den folgenden Teil kann ich ncht genau zerlegen in dem was es macht und kann es daher nicht _
_
_
erweitern.
' Wie muss er lauten, wenn ich weitere Spalten einbeziehen möchte ? wie oben aufgeführt ?
'Listview mit Daten füllen
For A = LBound(myArTemp) To UBound(myArTemp)
meAr = Split(myArTemp(A), "###")
.ListItems.Add B + 1, , meAr(0)
.ListItems(B + 1).SubItems(1) = meAr(1)
B = B + 1
Next A
End With
LVColumnWidth ListView1, True 'optimale Spalte einstellen
End Sub
Vielen Dank und Gruß
Kay