Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1092to1096
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

Listview Spalten dazufügen und Anzeige erweitern

Listview Spalten dazufügen und Anzeige erweitern
k
Hallo,
...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

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Listview Spalten dazufügen und Anzeige erweitern
30.07.2009 14:14:01
Tino
Hallo,
so wie ich Dich verstanden habe, müsste es so gehen.
Option Explicit
'Für ListView-Spalten 
Private Declare Function SendMessage Lib "user32" _
  Alias "SendMessageA" ( _
  ByVal hwnd As Long, _
  ByVal wMsg As Long, _
  ByVal wParam As Long, _
  lParam As Any) As Long
 
Private Const LVM_SETCOLUMNWIDTH = &H1000 + 30
Private Const LVSCW_AUTOSIZE = -1
Private Const LVSCW_AUTOSIZE_USEHEADER = -2
 
'Für ListView-Spalten auf optimale Breite setzen 
Private Sub LVColumnWidth(oListView As MSComctlLib.ListView, _
  Optional AccountForHeaders As Boolean = False)
 
  Dim col As Long
  Dim LParm As Long
 
  On Error GoTo Error
  If AccountForHeaders Then
    LParm = LVSCW_AUTOSIZE_USEHEADER
  Else
    LParm = LVSCW_AUTOSIZE
  End If
 
  For col = 0 To oListView.ColumnHeaders.Count - 1
    SendMessage oListView.hwnd, LVM_SETCOLUMNWIDTH, _
      col, ByVal LParm
  Next col
  Exit Sub
 
error:
End Sub

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() größter verfügbaren Index der Array 
'### ist nur ein Hilfsmittel um die Spalten wieder zu trennen 
For i = Lbound(oSh) To Ubound(oSh)
   With oSh(i)
        meAr = .Range("B2:T" & .Cells(.Rows.Count, 2).End(xlUp).Row)
        For A = 1 To Ubound(meAr)
          oDic1( _
            meAr(A, 1) & "###" & meAr(A, 2) & "###" & meAr(A, 10) & "###" & meAr(A, 11) & "###" & meAr(A, 13) & "###" & meAr(A, 19) _
          ) = 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")
  .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
  
  'Listview mit Daten füllen 
        For A = Lbound(myArTemp) To Ubound(myArTemp)
            meAr = Split(myArTemp(A), "###") 'gesammelte Daten wieder Splitten 
            .ListItems.Add B + 1, , meAr(0)
            .ListItems(B + 1).SubItems(1) = meAr(1)
            .ListItems(B + 1).SubItems(2) = meAr(2)
            .ListItems(B + 1).SubItems(3) = meAr(3)
            .ListItems(B + 1).SubItems(4) = meAr(4)
            .ListItems(B + 1).SubItems(5) = meAr(5)
            B = B + 1
        Next A
End With
 LVColumnWidth ListView1, True 'optimale Spalte einstellen 
End Sub
Gruß Tino
Anzeige
AW: Listview Spalten dazufügen und Anzeige erweitern
04.08.2009 11:26:49
k
Hallo Tino,
Du hast recht, habe in den letzten Tage zwar Deine/Eure Hilfe in Anspruch genommen, aber nur selten Feedback gegeben. Lag sicherlich daran, dass ich mit Eurer Hilfe in meinem Tool schnel weiterkam und somit sich das nächste Problem auftat - wo ich ggf. (da meine VBA-Kenntnisse noch eher bescheiden sind) erneut auf Euch zuging, ohne auf die zuvor gestellte Frage und Antwort zu reagieren.
SORRY !
Ja, das was Du oben geschrieben hast - hat genau das getroffen was ich wissen wollte. Mit der List Subitem - Methode konnte ich nun die Listview meinen Anforderungen entsprechend anpassen und das finde ich klasse.
Vielen Dank !
Gruß
Kay
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige