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
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
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!!
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..."
Hallo,
wenn ich die Frage verstehen würde
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.
Ich hoffe du Verstehst mich jetzt...manchmal schwer die dinge zu beschreiben ^^
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
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!
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: