Daten aus ListView verwenden

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Daten aus ListView verwenden
von: DirkR
Geschrieben am: 21.07.2015 18:33:45

Hallo Excelgemeinde!
Ich tüftele nun schon eine ganze Zeit rum....bekomme es aber nicht hin und bitte um Hilfe.
Ich habe in einer UF ein ListView und möchte nun Daten daraus weiter benutzen.
Das folgende Beispiel aus dem Forum hilft mir die Daten in eine Tabelle zu schreiben. Das funktioniert auch schon ganz gut.

Private Sub CommandButton2_Click()
    Dim avntTemp As Variant
    Dim lngRow As Long, lngColumn As Long
    With ListView1
        Redim avntTemp(1 To .ListItems.Count, 1 To .ColumnHeaders.Count)
        For lngRow = 1 To .ListItems.Count
            avntTemp(lngRow, 1) = .ListItems(lngRow).Text
            For lngColumn = 2 To .ColumnHeaders.Count
                avntTemp(lngRow, lngColumn) = .ListItems(lngRow).ListSubItems(lngColumn - 1). _
Text
            Next
        Next
    End With
    Tabelle1.Cells(1, 1).Resize(UBound(avntTemp, 1), UBound(avntTemp, 2)) = avntTemp
End Sub
Ich möchte nun Worddateien automatisch ausdrucken.
In der ListView sind Kundendaten. In Spalte 3 ist eine ID-Nummer, in Spalte 6 ist der Nachname und in Spalte 7 ist der Vorname. Alle anderen Spalten benötige ich nicht.
Der Pfad der Worddatei setzt sich wie folgt zusammen:
ThisWorkbookPath & "\03 - Kundendokumente\" & Nachname & "_" & Vorname & "-" & ID-Nummer & "\"
Der Name der Worddatei:
ThisWorkbook.Path & "\Kontaktbericht_" & Nachname & "_" & Vorname & "-" & ID-Nummer & ".docm"
Einen Ansatz zum Drucken habe ich auch schon:
Option Explicit
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
Public Sub Word_Drucken()
Dim wksBlatt As Worksheet
Dim strDatei As String
Dim lngAnzahl As Long, lngZeile As Long
Set wksBlatt = ThisWorkbook.Worksheets("Tabelle1")
  With wksBlatt
    lngZeile = IIf(IsEmpty(.Range("A65536")), .Range("A65536").End(xlUp).Row, 65536)
  End With
  
  For lngAnzahl = 1 To lngZeile
    strDatei = wksBlatt.Cells(lngAnzahl, 1).Text
    MsgBox strDatei
    ShellExecute 0, "Print", strDatei, "", "", 2
  Next lngAnzahl
Set wksBlatt = Nothing
End Sub
Jetzt muss ich es nur noch schaffen, dass ich aus dem ListView Zeile für Zeile die Daten, Pfad und Name Worddatei wie beschrieben, zum Drucken übergebe.
Und genau da liegt das Problem. Ich weiß nicht, wie ich den Pfad und den Namen Zeile für Zeile auslese!!!???
Ich hoffe auf Hilfe!
Gruß DirkR

Bild

Betrifft: AW: Daten aus ListView verwenden
von: DirkR
Geschrieben am: 21.07.2015 19:44:28
Hallo Excelgemeinde,
ich habe folgende Lösung hinbekommen.
Allerdings schreibe ich die Daten zuerst in ein Sheet. Das möchte ich aber eigentlich nicht.
Sonst funktioniert es.
Hat jemand eine Idee?
Hier mein Code:

Sub PrintListView_Kontaktbericht(x As Boolean)
If MsgBox("Sind Sie wirklich sicher, dass Sie alle Word-Kontaktberichte von den aufgelisteten  _
Kunden drucken möchten?", vbYesNo, " Achtung") = vbYes Then
    Dim avntTemp As Variant
    Dim lngRow As Long, lngColumn As Long, lngAnzahl As Long
    Dim strDatei As String
    
    With Kontaktinfos.ListView1
        ReDim avntTemp(1 To .ListItems.Count, 1 To 7) '.ColumnHeaders.Count)
        For lngRow = 1 To .ListItems.Count
            avntTemp(lngRow, 1) = .ListItems(lngRow).Text
            For lngColumn = 2 To 7 '.ColumnHeaders.Count
                avntTemp(lngRow, lngColumn) = .ListItems(lngRow).ListSubItems(lngColumn - 1). _
Text
            Next
        Next
    End With
    
    Application.ScreenUpdating = False
    With Sheets("Tabelle1")
      .Cells(1, 1).Resize(UBound(avntTemp, 1), UBound(avntTemp, 2)) = avntTemp
       For lngAnzahl = 1 To lngRow - 1
         strDatei = ThisWorkbook.Path & "\03 - Kundendokumente\" & .Cells(lngAnzahl, 6).Text & " _
_" & .Cells(lngAnzahl, 7).Text & "-" & .Cells(lngAnzahl, 3).Text & "\" _
         & "Kontaktbericht_" & .Cells(lngAnzahl, 6).Text & "_" & .Cells(lngAnzahl, 7).Text & "-" _
 & .Cells(lngAnzahl, 3).Text & ".docm"
           'MsgBox strDatei
           If Dir(strDatei) <> "" Then ShellExecute 0, "Print", strDatei, "", "", 2
       Next lngAnzahl
       .UsedRange.ClearContents
    End With
    Application.ScreenUpdating = True
End If
End Sub
Hoffe noch auf Hilfe!
Gruß DirkR

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Formel zur Ermittlung der korrekten Werte"