Zeile aus Tabelle und Listbox löschen | Herbers Excel-Forum

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
UserForm ListBox TextBox


Betrifft: Zeile aus Tabelle und Listbox löschen
von: Andre
Geschrieben am: 10.11.2009 19:09:43

Hallo,
ich hatte ein Problem und hier wurde mir geholfen mit folgendem Code

Private Sub UserForm_Initialize()
  • 
    Private Sub UserForm_Initialize()
    Dim arr, l As Long, m As Long, n As Long, o As Long
    With Worksheets(2)
        arr = .Range(.Cells(1, 1), .Cells(62, 4))
    End With
    For l = LBound(arr) To UBound(arr)
        If arr(l, 3) > 0 Or arr(l, 4) > 0 Then m = m + 1
    Next
    ReDim arrTmp(m, 4)
    For l = LBound(arr) To UBound(arr)
        If arr(l, 3) > 0 Or arr(l, 4) > 0 Then
            For n = 1 To 4
                arrTmp(o, n) = arr(l, n)
            Next
            o = o + 1
        End If
    Next
    With ListBox1
        .ColumnCount = 5
        .List = arrTmp
    End With
    Erase arr: Erase arrTmp
    End Sub

  • Das zum einlesen
    und das zum bearbeiten
  • 
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim l As Long, m As Long, n As Long, o As Long, arr
    With ListBox1
        l = .ListIndex
        TextBox5.Text = .List(.ListIndex, 3)
        TextBox7.Text = .List(.ListIndex, 4)
        TextBox8.Text = .List(.ListIndex, 1)
        arr = .List
        ReDim arrtmp(UBound(arr), 4)
        For m = LBound(arr) To UBound(arr)
            If m <> l Then
                For n = 1 To 4
                    arrtmp(o, n) = arr(m, n)
                Next
                o = o + 1
            End If
        Next
        .Clear
        .List = arrtmp
    End With
    Erase arr: Erase arrtmp
    End Sub

  • das hat super geklappt.
    nun würde ich gerne nicht nur in der Listbox per doppelklick löschen sondern auch die entsprechend angewählte seite aus der Tabelle. Die werte werden in der Tabelle immer angehängt so müsste die Zeile komplett entfernt werden damit die anderen nach oben rutschen können und keine leerzeilen entstehen.
    Es gibt zwar lösungen dafür aber mit denen komme ich nicht weiter da hier mit rowsource oder so eingelesen wird und bei mir wie oben zu sehen etwas anders. Naja ich bekomme das jedenfalls nicht verheiratet. Da der Thread wohl geschlossen wurde stelle ich hier eine neue Frage.
    Wäre super wenn das irgendwie gehen würde!
    Danke
    Andre

    Betrifft: AW: Zeile aus Tabelle und Listbox löschen
    von: Oberschlumpf
    Geschrieben am: 10.11.2009 19:51:23
    Hi Andre
    Mach mich mit dem bekannt, der deine Tabelle nachbaut. Dann hätt zumindest ich Lust, dir zu helfen.
    Ach..stopp..wieso stellst du uns nicht deine (Bsp)Datei mit Bsp-Daten mit Erklärungen was wann wie wo warum zur Verfügung?
    Ciao
    Thorsten

    Betrifft: AW: Zeile aus Tabelle und Listbox löschen
    von: Andre
    Geschrieben am: 10.11.2009 20:05:22
    Hallo Chef der Schlümpfe,
    wer will was nachbauen?
    was ist eine Bsp Datei?
    ich kann nur sagen das ein Roland Hochhäuser mir hier sehr geholfen hat.
    das was er hier erstellt hat habe ich eingefügt weil meine Frage von damals wohl geschlossen wurde (konnte nicht mehr antworten). Hier füge ich mal den Link dazu ein vielleicht hilft das ja weiter.
    https://www.herber.de/forum/archiv/1112to1116/t1112620.htm#1112620
    gruß
    andre

    Betrifft: nix für mich
    von: Oberschlumpf
    Geschrieben am: 10.11.2009 20:16:16
    Hi
    Bsp ist die allgemeinübliche Abk für Beispiel...ach ja...Abk = Abkürzung
    Und zumindest ich hätte von dir gerne eineBeispiel-Datei, in der
    - der von dir eingangs erwähnte VBA-Code
    - die erwähnte Listbox und alle anderen Steuerelemente
    - Beispieldaten, die wichtig sind
    - Erklärungen, was,wann, wie, wo und warum geschehen soll
    drin ist
    Und zwar aus dem Grund, weil zumindest ich keine Lust habe, deine Datei nachbauen zu müssen (um testen zu können) - das is ja auch dein Job - sollte zumindest so sein.
    Und guck doch mal selbst deinen Beitrag an.
    Für jemanden, der deinen Code noch nie gesehen hat, erscheint all das sehr unübersichtlich.
    Ach ja, erwähnte ich es schon? Auf jeden Fall fehlt die Listbox.
    Na ja...mir egal...dann warte halt auf Roland, der dir vielleicht wieder hilft.
    Ciao
    Thorsten

    Betrifft: AW: nix für mich
    von: Andre
    Geschrieben am: 10.11.2009 21:51:32
    Hallo,
    ich habe deine Nachricht jetzt 4 mal gelesen und komme immer noch nicht damit klar!
    Egal was du nimmst versuch es mit weniger!
    ich dachte Bsp Datei hätte etwas mit Excel oder VBA zu tun!

    allgemeinübliche Abk für Beispiel...ach ja...Abk = Abkürzung

    was soll das? lächerlich machen kann ich mich auch wo anders!
    ich habe nicht geschrieben ich hätte gerne ein voll funktionsfähiges Programm oder einen super turbo Code.
    Die Codes habe ich nur eingefügt um einigermaßen darzulegen worum es geht und das ich nicht damit klar komme weil der so kompliziert ist und die anderen Lösungen nicht funktionieren.
    Für jemanden, der deinen Code noch nie gesehen hat, erscheint all das sehr unübersichtlich.

    Es ist nicht mein Code! Ich habe keine Ahnung was da steht und wie das funktioniert.
    Roland hat das geschrieben! Ich habe angegeben das ich kaum Excel und VBA kentnisse habe.
    Ich wollte hier nur wissen wie ich eine Zeile in einer Listbox und die dazu gehörige Zeile in der Exceltabelle lösche.
    Auf jeden Fall fehlt die Listbox.

    es steht doch im Code. Listbox 1!
    Na ja...mir egal...dann warte halt auf Roland, der dir vielleicht wieder hilft.
    Fällt mir nicht viel zu ein! Ich dachte vielleicht gibt es ja eine Lösung. dann habe ich deine Antwort gesehen und dachte klasse. Dann habe ich die gelesen und nicht ganz verstanden. Nachgefragt und noch mal erläutert. Dann dachte ok da ist eine neue Nachricht vielleicht jetzt. Dann habe ich fassungslos wäre übertrieben aber aber fast richtig deine zweite Nachricht gelesen und ... keine Ahnung was ich davon halten soll!
    trotzdem danke

    Betrifft: neuer Versuch
    von: Oberschlumpf
    Geschrieben am: 10.11.2009 22:33:00
    Hallo Andre
    OK, du hast recht, vielleicht war ich ein wenig zu "hart". Entschuldige bitte.
    Ich versuche es mal anders.
    Du hattest gleich zu Beginn geschrieben (in deinem ersten Beitrag zu diesem Thread):
    ich hatte ein Problem und hier wurde mir geholfen mit folgendem Code
    ...jetzt kommt dein langer Code
    das hat super geklappt.
    Und allein durch diesen, deinen Text hatte ich gedacht, dass du ja schon eine Datei mit eben dem Code haben musst - denn dein Problem war ja erst mal mit Rolands Hilfe gelöst.
    Und ich bat dich nur darum, eben genau die Datei, die du ja schon haben musst, auch uns zur Verfügung zu stellen, damit wir dann versuchen können, dein neues Problem vielleicht zu lösen.
    Es ist einfacher, denke ich, ein Problem mit genau der Datei zu lösen, in der auch das Problem auftritt, als anstelle dessen erst mal nur Codes "ins Blaue" erstellt werden, die dann wieder an deine Datei angepasst werden müssen.
    Na ja, ich warte mal auf Antwort.
    Ciao
    Thorsten

    Betrifft: AW: Zeile aus Tabelle und Listbox löschen
    von: Roland Hochhäuser
    Geschrieben am: 12.11.2009 08:45:46
    Hallo Andre,
    ich habe den Eindruck, dass Du Dich hier hoffnungslos übernimmst und dies durchaus auch siehst.
    Da zumindest Oberschlumpf die Antwort zum jetzt angefragten Detail (Synchronisieren von Tabelle, Listbox und Array)
    auch interessiert (ich unterstelle mal, dass Userform1 die richtige Bezeichnung ist, ansonsten überall anpassen):
    1. in ein allgemeines Modul

    Option Explicit
    Option Private Module
    Public arrList
    Public Const c As Long = 5&
    Sub Read_array()
    Dim l As Long
    l = Worksheets(2).Cells(1, 1).End(xlDown).Row
    With Worksheets(2)
        arrList = .Range(.Cells(1, 1), .Cells(l, c))
    End With
    For l = LBound(arrList) To UBound(arrList)
        arrList(l, c) = l
    Next
    End Sub

    Sub Fill_Listbox()
    Dim l As Long, m As Long, n As Long, o As Long
    For l = LBound(arrList) To UBound(arrList)
        If arrList(l, 3) > 0 Or arrList(l, 4) > 0 Then m = m + 1
    Next
    If m = 0 Then UserForm1.ListBox1.Clear: Exit Sub
    ReDim arrTmp(m - 1, c)
    For l = LBound(arrList) To UBound(arrList)
        If arrList(l, 3) > 0 Or arrList(l, 4) > 0 Then
            For n = 1 To c
                arrTmp(o, n) = arrList(l, n)
            Next
            o = o + 1
        End If
    Next
    With UserForm1.ListBox1
        .Clear
        .ColumnCount = c
        .ColumnWidths = ";;;;;0"
        .List = arrTmp
    End With
    Erase arrTmp
    End Sub

    2. in die Userform
    Option Explicit
    Private Sub UserForm_Initialize()
    Read_array
    Fill_Listbox
    End Sub

    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim l As Long
    With ListBox1
        l = .ListIndex
        If .ListCount = 0 Then Exit Sub
        Worksheets(2).Rows(.List(.ListIndex, c)).Delete
        TextBox5.Text = .List(.ListIndex, 3)
        TextBox7.Text = .List(.ListIndex, 2)
        TextBox8.Text = .List(.ListIndex, 1)
        Erase arrList: Read_array
        If .ListCount > 1 Then
            Fill_Listbox
        Else
            TextBox5.Text = ""
            TextBox7.Text = ""
            TextBox8.Text = ""
            .Clear
            Exit Sub
        End If
        If .ListCount > l Then .Selected(l) = True Else .Selected(l - 1) = True
    End With
    End Sub
    In VBA kann man einfache Sachen relativ schnell hinbekommen, dies ist aber bereits jetzt keine mehr
    und wird mit Sicherheit noch schwieriger, wenn noch nachzulegen sein sollte. Wenns ernsthaft und professionell
    weitergehen soll und du primär an der Erstellung einer komplexen Anwendung interessiert bist,
    von mir aus gerne, aber dann geht es los mit Fragen wie: warum keine Trennung von Daten und Code, muss es
    wirklich VBA sein, wo ist das Pflichtenheft usw. Nach deren Beantwortung wird erst abschätzbar, was an zu
    honorierendem Aufwand drin steckt. Wenn du aber "nur spielen" willst, ohne den Dingen auf den Grund gehen
    zu wollen, wars das jetzt endgültig von meiner Seite. Es gibt im Internet genügend verfügbare Ressourcen, auf die Du zugreifen kannst.
    @Oberschlumpf
    Im Prinzip gebe ich dir Recht, aber hier war der Nachbau der Tabelle wirklich in einer Minute gemacht,
    zumal Du Dich ja auch schon im ersten Posting äußertest und damit das Problem kanntest.
    Ein friedliches Miteinander aus Berlin von
    Roland Hochhäuser

    Betrifft: @Roland
    von: Oberschlumpf
    Geschrieben am: 12.11.2009 10:13:05
    Moin Roland
    Im ersten Posting war meine Frage/Bitte aber dieselbe, wie in diesem Posting:
    "Datei zeigen, damit nicht alles nachgebaut werden muss"
    Dieser Bitte ist André nicht nachgekommen, und du hattest ihm auch ohne Datei helfen können.
    Nur so viel dazu, dass ich das Problem kannte, was ja so gar nicht stimmt ;-)
    Aber egal...weil...
    a) manchmal stört es mich wirklich massiv, wenn jenand ein Problem gelöst haben möchte, der/diejenige dabei aber viele Infos vergisst (Datei, genaue Zellangaben, etc) und scheinbar erwartet, dass wir "ins Blaue" programmieren, und dann durch unnötiges weiter Fragen und weiter Antworten irgdwann dann wirklich alles passt.
    Na ja, außerdem verstehe ich es nicht, warum das Rad (die schon vorhandene Datei) noch mal erfunden/nachgenaut werden muss.
    Ich hab dieses Szenario schon oft erlebt. Wenn aber gleich zu Beginn ne Bsp-Datei vorhanden ist, dann bedarf es nur sehr wenige Beiträge (oft nur Erstfrage - Erstvorschlag einer Lösung - Ja,danke,passt!), bis das Problem gelöst ist - daher erscheint mir die ausreichende Mithilfe des Fragenden durchaus als sehr effektiv.
    b) dein letzter Satz "friedl. Miteinander...." war mir auch schon vor deinem, diesem Hinweis aufgefallen.
    Ja, ich stellte fest, dass ich manchmal wirklich sehr unfreundlich war, weil ich oft vergesse, dass die Fragenden sich dabei nix Böses denken, sondern einfach nur ihre Frage stellen, davon ausgehen, dass ihre Infos reichen und auf Lösung hoffen.
    Auch ICH mache Fehler.
    Daher versuche ich (auch schon mit Erfolg), auf Fragen dieser Art besser gar nicht, als unfreundlich zu reagieren.
    Ciao
    Thorsten

    Betrifft: AW: Zeile aus Tabelle und Listbox löschen
    von: Andre
    Geschrieben am: 16.11.2009 23:30:31
    Hallo,
    war letzte Woche nicht mehr dazu gekommen zu antworten.
    @ Roland
    danke für deine Antwort.
    Vieleicht gibt es da ein paar Missverständnisse wie so oft im Leben.
    Ich habe gedacht es wäre relativ einfach wenn man VBA beherrscht meine Fragen zu beantworten.
    Nur für mich halt weil ich nicht so kann.
    Ich habe unterstellt das dein Code von dir so gewählt wurde weil das der Professionellste Weg war und das es auch einfacher geht, du es aber so Programmierst weil du es halt so Pfrofessionell machst.
    Ich wusste nicht das es so sein muss und das es kompliziert ist.
    Als ich den Code gesehen hatte dachte ich wie kommt man auf so was und das so schnell.
    Naja ich dachte es wäre deine Art und nicht das es so sein muss.
    Das waren dann schon Missverständnisse.
    Ich danke dir erneut und werde das ausprobieren. Es werden keine neuen Fragen diesbezüglich kommen da dass das letzte Problem war was ich noch hatte bei dieser Anwendung.
    Die Anwendung hat nun 2,5 MB das meiste davon sind logische Verknüpfungen nur mit diesem Listbox Thema kam ich halt nicht weiter.
    Danke Danke.
    @ Oberschlupf
    da gab es auch einige Missverständnisse.
    Ich dachte ja Roland hat das krasser gelöst als es hätte sein müssen daher habe ich "blauäugig" wieder gedacht eine Zeile aus einer Listbox zulöschen und die dazugehörige Zeile aus der Tabelle müsste für einen VBA Sachkundigen einfach sein. Welche Tabelle und welche Listbox wäre Wurscht da es ja nur exemplarisch sein sollte.
    Als du dann geantwortet hattest und ich einiges nicht verstand und nachfragte habe kam die "komische" Antwort von dir.
    Wenn ich die 2,5 MB hochgeladen hätte (wie auch immer das geht) wärst du sicher damit nicht klar gekommen was wo hin gehört weil es mittlerweile über 50 Din A4 Seiten Code enthält wo wild hin und hergesprungen wird und ich selber schon nicht mehr weiß was wo hin gehört.
    Und ich hatte nicht genau verstanden was du da jetzt wirklich brauchst, das ist alles etwas unter gegangen weil es die Sachliche Ebene verlassen hatte.
    Ich wollte weder einen Vollen Support noch eine Turbo Code.
    Und wenn du helfen willst und fragen stellst ist das doch voll ok.
    Wenn dann gegenfragen kommen ist es dann aber vielleicht besser (das gilt dann auch für mich) nicht etwas zu unterstellen was der andere Denkt oder warum er so handelt sondern zu fragen ob das richtig interpretiert wurde.
    gruß
    Andre

    Beiträge aus den Excel-Beispielen zum Thema "Zeile aus Tabelle und Listbox löschen"