Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Zellenformatierung Listbox gleiches Format
#11
Hallo Gemeinde.
Nach einigen Diskussionen auf der Arbeit sind wir zu dem Entschluss gekommen, 
dass Laden uind Speichern in eine externe .xlsx Datei zu verlegen die dann in der Praxis auf einem Server liegt,
auf die dann jeder Anwnder zugreifen kann.
Vorher war das ganze Bestandteil der .xlsm Datei in Tabellenblättern.
Was bis jetzt auch gut funktioniert hat.
Ich habe das ganze bis jetzt abgeändert, sodass es auch mit 1 Spalte in der ListBox funktioniert.
Bis jetzt sieht es so aus:
Code:
Dim i As Long
    Dim destinationWorkbook As Workbook
    Dim destinationWorksheet As Worksheet
' Öffne die externe Excel-Datei (wird später abgeändert)
    Set destinationWorkbook = GetObject("C:\Users\frank\Excel Arbeit\Archiv.xlsx")
Set destinationWorksheetPrüfkontur = destinationWorkbook.Worksheets("Prüfkontur")
With destinationWorksheetPrüfkontur
        For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
            ListBox1.AddItem .Cells(i, 1).Text
        Next i
    End With
Jetzt soll nicht nur 1 Spalte in der ListBox1 stehen sondern 4 Spalten. Und das mit Überschriften.
Da aber die entsprechenden Spalten mit den Informationen in der Tabelle Prüfkontur verteilt sind, habe ich eine Hilfstabelle: UserForm5Liste.
Die Angaben werden per VBA von der Tabelle Prüfkontur nach Tabelle UserFormListe5 übertragen.
Darin sind 4 Spalten:
A Zeichnungsnummer
B Kunde
C Datum
D Lfd.Nr.
In Zeile 1 sind dann die Überschriften entsprechend.
Die Hilfstabelle dient der bessern Übersicht für die ListBox.
Die Tabelle Prüfkontur ist die Tabelle die alle Informationen enthält die geladen werden sollen.
Wie kann ich das so umsetzen das ich die o.g. Überschriften habe, und dann die ListBox befüllen kann?
Danke
Gruß
Frank
Zitieren
#12
so:

Code:
    with ListBox1
        For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
            .AddItem .Cells(i, 1).Text
            .List(.ListCount - 1, 1) = .Cells(i, 2)
            .List(.ListCount - 1, 2) = .Cells(i, 3)
            .List(.ListCount - 1, 3) = .Cells(i, 4)
        Next i
    end with

Gruß Uwe
Zitieren
#13
Hallo Uwe, danke für eine Antwort.
dann kommt dr Fehler 438 Objekt unterstützt diese Eigenschaft oder Methode nicht
Zitieren
#14
Hallo Frank,

entweder so:
Code:
    With ListBox1
        For i = 2 To Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
            .AddItem destinationWorksheetPrüfkontur.Cells(i, 1).Text
            .List(.ListCount - 1, 1) = destinationWorksheetPrüfkontur.Cells(i, 2)
            .List(.ListCount - 1, 2) = destinationWorksheetPrüfkontur.Cells(i, 3)
            .List(.ListCount - 1, 3) = destinationWorksheetPrüfkontur.Cells(i, 4)
        Next i
    End With

oder so:
Code:
    With destinationWorksheetPrüfkontur
        For i = 2 To Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
            ListBox1.AddItem .Cells(i, 1).Text
            ListBox1.List(ListBox1.ListCount - 1, 1) = .Cells(i, 2)
            ListBox1.List(ListBox1.ListCount - 1, 2) = .Cells(i, 3)
            ListBox1.List(ListBox1.ListCount - 1, 3) = .Cells(i, 4)
        Next i
    End With

Prinzipiell ist .AddItem die lahmste Methode um eine Listbox zu füllen.
Das macht nur bei kleinen Datenaufkommen und max. 10 Spalten Sinn.
 
Gruß Uwe
Zitieren
#15
Hallo Gemeinde!
Ich habe wieder eine neue Aufgabe:
Nachdem die Listbox endlich das macht was sie soll, sollen jetzt die Einträge in dem Tabellenblatt in der entsprechenden Zeile gelöscht werden.
Was auch schon funktioniert.
Über einen CommandButton in der UserForm.
Das Problem bei der Sache ist.
Das nach dem Löschen der Zeile in dem jeweiligen Tabellenblatt der Eintrag in der ListBox bestehen bleibt.
Erst wenn ich die Datei speichere und neu öffne wird die Lsitbox neu geladen und der Eintrag ist nicht mehr in der ListBox eingetragen.
Das ganze sieht jetzt so aus:
Code:
Private Sub UserForm_Initialize()
Dim i As Long
Dim destinationWorkbook As Workbook
Dim destinationWorksheet As Worksheet
' Öffne die externe Excel-Datei
Set destinationWorkbook = GetObject("C:\Users\frank\Excel\Excel Arbeit\Archiv.xlsx")
Set destinationWorksheetPrüfkontur = destinationWorkbook.Worksheets("Prüfkontur")
With destinationWorksheetGeneratorPrüfkontur
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
ListBox1.AddItem .Cells(i, 1).Text                      'Zeichnungsnummer
ListBox1.List(ListBox1.ListCount - 1, 1) = .Cells(i, 2) 'Kunde
ListBox1.List(ListBox1.ListCount - 1, 2) = .Cells(i, 63) 'Speicherdatum
ListBox1.List(ListBox1.ListCount - 1, 3) = .Cells(i, 144) 'Anlage
ListBox1.List(ListBox1.ListCount - 1, 4) = .Cells(i, 145) 'lfd.Nr.
Next i
End With
End Sub
Hier der CommandButton:
Code:
Private Sub CommandButton1_Click()
'Einträge in Zeilen löschen
'Überprüfung ob ein Wert aus der ListBox ausgewählt wurde
If Me.ListBox1.ListIndex <> -1 Then
'Zeichnungsnummer ist entsprechend der Eintrag in Spalte A in der Listbox
Zeichnungsnummer = Me.ListBox1.Value
'Wert in Tabelle Prüfkontur Spalte A suchen.
Dim zeileinPrüfkontur As Variant
Dim filePath As String
'Pfad in der die Parameterdatei: "Archiv" in dem Format .xlsx ist:
filePath= "C:\Users\frank\Excel\Excel Arbeit\Archiv.xlsx"
'Datei öffnen:
Set wb2 = GetObject(filePath)
'Tabelle: "Prüfkontur" auswählen:
Set ws2 = wb2.Worksheets("Prüfkontur")
'Punkte in der Schreibweise xxxx.xxxx.xx entfernen
searchValue = CDbl(Replace(ListBox1.Text, ".", ""))
zeileinPrüfkontur = Application.Match(searchValue, ws2.Columns("A"), 0)
If Not IsError(zeileinPrüfkontur) Then
ws2.Rows(CLng(zeileinPrüfkontur)).Delete
End If
End If
End Sub

Die 2. Aufgabe ist, wenn die UserForm geöffnet ist, und man aber keinen Eintrag aus der ListBox auswählt, 
dann eine MsgBox erscheint in dem man einen Eintrag aus der ListBox auswählen soll.
Kann mir jemand dabei weiter helfen?
Danke

Gruß
Frank
Zitieren
#16
Hallo Frank,

zu 1. mit ListBox1.RemoveItem(ListBox1.ListIndex) löscht du die markierte Zeile.

zu 2. If ListBox1.ListIndex=-1 then MsgBox "kein Eintrag markiert"

Gruß Uwe
Zitieren
#17
Danke Uwe.
Ich habe beides in den Button geschrieben.
Ok.
If ListBox1.ListIndex = -1 Then
MsgBox "kein Eintrag markiert"
Exit Sub
End If
muss am Anfng des Buttons stehen
und
ListBox1.RemoveItem (ListBox1.ListIndex)
am Ende.
Dann funktioniert es.
Vielen Dank Uwe dafür.
Zitieren
#18
Wenn ich jetzt einen neuen Eintrag in einer Zeile anlege, dann erscheint der aber nicht in der Listbox.
Also das gleiche Problem nur umgekehrt.
Wie geht das jetzt?
Zitieren
#19
mit .AddItem
und weitere Spalten im neu erzeugten Item mit .List(.ListCount - 1, 1) ...

anbei mal ein Beispiel für die Nutzung einer Listbox ohne Fehlerbehandlung via Arrays.

Gruß Uwe


Angehängte Dateien
.xlsm   Listbox bearbeiten via Array.xlsm (Größe: 21,6 KB / Downloads: 2)
Zitieren
#20
Hallo
Als Tipp ist PetrolMaxxe Datei gut, aber mehr auch nicht.
Sie löscht den markierten Eintrag nicht sondern einen anderen.
Viele Grüße
PIVPQ
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste




Hinweis auf Angebot Excel-Inside - lang    Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden um dein Anliegen zu besprechen.
   Gerne erstellen wir auf dieser Basis ein Angebot.
   Sende deine Anfrage einfach
per E-Mail an anfrage@excel-inside.de


Powerd and supported by Excel-InsideSolutions