Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Hilfe bei User form markierte Zeile in List box Löschen
#1
Hallo Liebes Excel forum,

ich bin wieder am verzweifeln... 
Für meine Kalkulation Mappe habe ich eine kleine Datenbank angelegt in einen Extra Sheet " Personaldaten" befinden Sich 5 Spalten.
Per userform sollen Personalkosten & Umsatzdaten in Textboxen eingegeben werden  und zeilen weise in dieser Tabelle gespeichert werden. In Einer List box wird dann das eingetragene Jahr/ Monat als Verweis hinterlegt.
Wenn ich dann in der Listbox die Zeile Markiere füllen sich die Textboxen auch wieder mit den Daten. Wie eine kleine Datenbank eben... Soweit klappt auch alles sehr gut...

1.Aber Zwei Dinge bekomme ich nicht hin ich möchte das in der Listbox nicht nur das Jahr.Welche in Spalte 1 gespeichert wird sondern auch der Monat der sich in spalte Zwei Speichert als Name in der Listbox Hinterlegt wird für die Übersicht und weiß nicht wie...
2. Als Zweites möchte ich das  wenn ich eine Zeile in der Listbox Markiere,das ich sie auch per Kommando Button Löschen kann. Und dann die richtige zeile gelöscht wird von A bis E. ( Bis E weil sich da noch eine weitere Hilfs spalte befindet. wo die Formel nicht gelöscht werden darf)

'Löschen Schaltfläche Ereignisroutine
Private Sub CommandButton2_Click()
   Dim LZeile As Long
   

     If ListBox1.ListIndex = -1 Then Exit Sub
   

     Do While Trim(CStr(Sheets("Personalkosten").Cells(LZeile, 1).Value)) <> ""
     
        
         If ListBox1.Text = Trim(CStr(Sheets("Personalkosten").Cells(LZeile, 1).Value)) Then
             
   
             Sheets("Personalkosten").Rows(CStr(LZeile & ":" & LZeile)).Delete   Er Markiert mir immer diese Zeile bei dem versuch den gewählten Beitrag zu Löschen
             
             Call UserForm_Initialize
             If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
             
             Exit Do
             
         End If
     
         LZeile = LZeile + 1
     Loop
     
End Sub

Im Anhang ist die Kalkulation Mappe / die Userform heißt Personal erfassung.

Vielleicht könnt Ihr mir ja wieder aus der Patsche Helfen, ich hoffe das es verständlich war und freue mich auf eure Kreativen Köpfe.

Viele Liebe Grüße

Toto


Angehängte Dateien
.xlsm   Gastro_Einzelkalkulationvorlage.xlsm (Größe: 957,82 KB / Downloads: 5)
Antworten Top
#2
Hallo,

meinst Du so?

Code:
'Löschen Schaltfläche Ereignisroutine
Private Sub CommandButton2_Click()
   Dim LZeile As Long
  

     If ListBox1.ListIndex = -1 Then Exit Sub
  
      LZeile = 1
     Do While Trim(CStr(Sheets("Personalkosten").Cells(LZeile, 1).Value)) <> ""
    
        
         If ListBox1.Text = Trim(CStr(Sheets("Personalkosten").Cells(LZeile, 1).Value)) Then
            
  
             Worksheets("Personalkosten").ListObjects("Personalkosten").ListRows(LZeile - 1).Delete
            
'             Call UserForm_Initialize  'wieso das denn?
             If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
            
             Exit Do
            
         End If
    
         LZeile = LZeile + 1
     Loop
    
End Sub
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#3
Call UserForm_Initialize  'wieso das denn?

             If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0

Dieser Code ist dafür das die Listbox sich neu lädt und die Gelöschte zeile auch direkt Visuell als gelöscht anzeigt.

Wenn ich diesen Weg lassen würde, würde die Markierte und Gelöschte zeile erst nach Manuellen Beenden und Neu öffnen als Gelöscht gezeigt.

Es funktioniert Wunderbar :19:  Danke dir Wiedermal!!
Antworten Top
#4
Hättest du jetzt noch eine Idee für die erste Frage?
Zitat:"1.Aber Zwei Dinge bekomme ich nicht hin ich möchte das in der Listbox nicht nur das Jahr.Welche in Spalte 1 gespeichert wird sondern auch der Monat der sich in spalte Zwei Speichert als Name in der Listbox Hinterlegt wird für die Übersicht und weiß nicht wie..."
Antworten Top
#5
Hallo,

wenn ich die Frage verstehen würde Huh
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#6
hmm wenn ich in der Userform einen Eintrag Schreibe und Ihn dann Speicher, Zeigt er in der Listbox das Jahr an was in der Userform eingetragen wurde , ich würde gerne das er als name in der List das Angegebene Jahr und den Angegebenen Monat  in der Listbox einträgt.

Beispiel: wenn ich in der Userform Das Jahr 2015 und den Monat Januar eingebe und Ihn dann Speicher zeigt er nur das Jahr in der Listbox, jetzt noch mit dem Angegebenen Monat da neben wäre Super.
Antworten Top
#7
Ich hoffe du Verstehst mich jetzt...manchmal schwer die dinge zu beschreiben ^^
Antworten Top
#8
Das mit den namen in der Listbox konnte ich jetzt hinbekommen. Ich habe  eine weitere spalte A mit einer formel versehen  wo er aus den beiden Spalten B & C den namen dann generiert und diese in der Listbox ausgibt.
Nur leider Funktioniert es jetzt nicht mehr richtig mit dem Löschen Button.. 

Wenn ich jetzt einen Markierten Eintrag Löschen möchte, löscht er Ihn korrekt aus der Zeile raus.. aber wenn ich gleich einen Neuen Eintrag Hinzufügen möchte. Setzt er mir die Daten in die eigentliche Leere Zeile, als auch eine Zeile weiter.. ( Siehe Bild im Anhang)

Und wenn er was Löscht, Zeigt dann auch in der ersten Spalte der den Namen aus B & C generiert =WENNFEHLER((#BEZUG!&" "&#BEZUG!);"")

Ich hoffe du kannst mir nochmal helfen......

Hier der Komplette Code:
Code:
Option Explicit
Option Compare Text
Private Sub CommandButton1_Click()
' Neuer Eintrag Button
   Dim LZeile As Long

     
     LZeile = 2
     Do While Trim(CStr(Sheets("Personalkosten").Cells(LZeile, 2).Value)) <> ""
         LZeile = LZeile + 1 'Nächste Zeile bearbeiten
     Loop
     
     Sheets("Personalkosten").Cells(LZeile, 2) = CStr("Neuer Eintrag Zeile " & LZeile)
     

     ListBox1.AddItem CStr("Neuer Eintrag Zeile " & LZeile)
     
     ListBox1.ListIndex = ListBox1.ListCount - 1

End Sub
'Löschen Schaltfläche Ereignisroutine
Private Sub CommandButton2_Click()
   Dim LZeile As Long
   

     If ListBox1.ListIndex = -1 Then Exit Sub
   
      LZeile = 2
     Do While Trim(CStr(Sheets("Personalkosten").Cells(LZeile, 1).Value)) <> ""
     
        
         If ListBox1.Text = Trim(CStr(Sheets("Personalkosten").Cells(LZeile, 1).Value)) Then
Worksheets("Personalkosten").ListObjects("Personalkosten").ListRows(LZeile - 1).Delete
   Call UserForm_Initialize
             If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
             
             Exit Do
             
         End If
     
         LZeile = LZeile + 1
     Loop
     
End Sub

Private Sub CommandButton3_Click()
'Speichern

   Dim LZeile As Long
   
 
     If ListBox1.ListIndex = -1 Then Exit Sub
     
   
     If Trim(CStr(Box1.Text)) = "" Then
       
         MsgBox "Sie müssen das Jahr eingeben!", vbCritical + vbOKOnly, "FEHLER!"
 
         Exit Sub
     End If
 
     LZeile = 2
     Do While Trim(CStr(Sheets("Personalkosten").Cells(LZeile, 2).Value)) <> ""
     
         
         If ListBox1.Text = Trim(CStr(Sheets("Personalkosten").Cells(LZeile, 2).Value)) Then
             
       'In zeile Schreiben
       
             Sheets("Personalkosten").Cells(LZeile, 2).Value = Trim(CStr(Box1.Text))
             Sheets("Personalkosten").Cells(LZeile, 3).Value = Box2.Text
             Sheets("Personalkosten").Cells(LZeile, 4).Value = TextBox2.Text
             Sheets("Personalkosten").Cells(LZeile, 5).Value = TextBox3.Text
             Sheets("Personalkosten").Cells(LZeile, 6).Value = TextBox4.Text
             
             If ListBox1.Text <> Trim(CStr(Box1.Text)) Then
                 Call UserForm_Initialize
                 If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
             End If
             
             Exit Do
             
         End If
     
         LZeile = LZeile + 1
     Loop
     
End Sub
Private Sub CommandButton4_Click()
     Unload Me
End Sub
Private Sub ListBox1_Click()
   Dim LZeile As Long
     
     Box1 = ""
     Box2 = ""
     TextBox2 = ""
     TextBox3 = ""
     TextBox4 = ""
         
     If ListBox1.ListIndex >= 0 Then
     
         LZeile = 2
         Do While Trim(CStr(Sheets("Personalkosten").Cells(LZeile, 1).Value)) <> ""
         
       
             If ListBox1.Text = Trim(CStr(Sheets("Personalkosten").Cells(LZeile, 1).Value)) Then
             
                 'TextBoxen füllen
                 Box1 = Trim(CStr(Sheets("Personalkosten").Cells(LZeile, 2).Value))
                 Box2 = Sheets("Personalkosten").Cells(LZeile, 3).Value
                 
                 TextBox2 = Sheets("Personalkosten").Cells(LZeile, 4).Value
                 TextBox3 = Sheets("Personalkosten").Cells(LZeile, 5).Value
                 TextBox4 = Sheets("Personalkosten").Cells(LZeile, 6).Value
         
             
                 Exit Do
             
             End If
         
             LZeile = LZeile + 1
         
         Loop
         
         
     End If
     
End Sub
Private Sub UserForm_Activate()
    If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
End Sub
Private Sub UserForm_Initialize()
   Dim LZeile As Long

     'Alle TextBoxen leer machen
     Box1 = ""
     Box2 = ""
     TextBox2 = ""
     TextBox3 = ""
     TextBox4 = ""
   
     ListBox1.Clear
     
     LZeile = 2
     Do While Trim(CStr(Sheets("Personalkosten").Cells(LZeile, 1).Value)) <> ""
         
         'Aktuelle Zeile in die ListBox eintragen
         ListBox1.AddItem Trim(CStr(Sheets("Personalkosten").Cells(LZeile, 1).Value))
         
         LZeile = LZeile + 1 'Nächste Zeile bearbeiten
         
     Loop
'Monat
With Personalerfassung.Box2
.AddItem "Januar" 'Null Begriff
.AddItem "Februar"
.AddItem "März"
.AddItem "April"
.AddItem "Mai"
.AddItem "Juni"
.AddItem "Juli"
.AddItem "August"
.AddItem "September"
.AddItem "Oktober"
.AddItem "November"
.AddItem "Dezember"

End With

Dim i As Integer

With Personalerfassung.Box1
 For i = 2015 To 2030
 .AddItem CStr(i)
 Next
  End With
End Sub


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#9
Hallo,

(18.09.2018, 18:33)toto18 schrieb: Das mit den namen in der Listbox konnte ich jetzt hinbekommen. Ich habe  eine weitere spalte A mit einer formel versehen  wo er aus den beiden Spalten B & C den namen dann generiert und diese in der Listbox ausgibt.
Nur leider Funktioniert es jetzt nicht mehr richtig mit dem Löschen Button.. 

ich hatte das ein wenig anders gemacht.
Code:
Private Sub UserForm_Initialize()
   Dim LZeile As Long
  
     'Alle TextBoxen leer machen
     Box1 = ""
     Box2 = ""
     TextBox2 = ""
     TextBox3 = ""
     TextBox4 = ""
  
     ListBox1.Clear
    
     LZeile = 2
     Do While Trim(CStr(Sheets("Personalkosten").Cells(LZeile, 1).Value)) <> ""
        
         'Aktuelle Zeile in die ListBox eintragen
         ListBox1.AddItem Trim(CStr(Sheets("Personalkosten").Cells(LZeile, 1).Value))
         ListBox1.List(ListBox1.ListCount - 1, 1) = Worksheets("Personalkosten").Cells(LZeile, 2)
         LZeile = LZeile + 1 'Nächste Zeile bearbeiten
        
     Loop
'Jahr
With Personalerfassung.Box2
.AddItem "Januar" 'Null Begriff
.AddItem "Februar"
.AddItem "März"
.AddItem "April"
.AddItem "Mai"
.AddItem "Juni"
.AddItem "Juli"
.AddItem "August"
.AddItem "September"
.AddItem "Oktober"
.AddItem "November"
.AddItem "Dezember"



End With

Dim i As Integer

With Personalerfassung.Box1
For i = 2015 To 2030
.AddItem CStr(i)
Next



End With
End Sub

Setze aber unbedingt die ColumnCount-Eigenschaft deiner Listbox auf 2!
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#10
Schön Guten abend,

habe es eben mal geändert leider, bleibt das Problem bestehen ich finde nur den Fehler nicht..
Nach dem Löschen und wenn ich wieder einen Neuen Eintrag hinzufüge.. schreibt er es immer noch Zeilen versetzt von einander...
Ich habe das gefühl das es vielleicht an der Formel in der ersten spalte Liegt oder vielleicht am Button der den Neuen Eintrag hinzufügt.
Im Anhang ist noch mal die Aktuelle Datei... Vielleicht hast du ja nochmal ein paar Minuten über :20:


Angehängte Dateien
.xlsm   Gastro_Einzelkalkulationvorlage.xlsm (Größe: 945,86 KB / Downloads: 4)
Antworten Top


Gehe zu:


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