VBA-Grundkurs :)
#1
Hi Leute,

ich bin auf der Suche nach den richtigen Codes - habe einige Videos durch und auch einiges gegoogled ... allerdings finde ich nicht genau meine Lösung. Ich bin was VBA angeht halt erst am Anfang.

Code:
Private Sub CommandButton_Hinzufuegen_Click()

Dim last As Integer

last = ThisWorkbook.Sheets("Datenhinterlegung").Cells(Rows.Count, 1).End(xlUp).Row + 1

ThisWorkbook.Sheets("Datenhinterlegung").Cells(last, 1).Value = TextBox_Name.Value

End Sub

Ich bin davon ausgegangen, dass er mit dieser Formel die erste verfügbare Zelle in Spalte A befüllt - tut er aber nicht. Gibt es da eine Anpassung? Es kommt nämlich vor, dass zwischendurch einige Zellen gelöscht werden.


Dazu kommt das Problem, dass ich folgende Code-Zeile noch mit dabei habe.


Code:
ThisWorkbook.Sheets("Datenhinterlegung").Cells(last, 2).Value = ComboBox_Funktion.Value

Hier besteht das Problem, dass er die Daten aus der Combobox in die gleiche Zeile wie die Daten der Textbox schreiben soll, nur halt in Spalte B. Habt ihr da eine Idee?
Top
#2
Hallo!

Ich kann da keinen Fehler erkennen. Sollte eigentlich funktionieren. Leerzeilen zwischendrin werden dabei aber nicht berücksichtigt.

Gruß, René
Top
#3
Gäbe es denn keine Formel, die die nächste freie Zelle beschreibt? Bei vielen Löschungen und neuen Eintragungen wird es irgendwann sehr lang :)
Top
#4
Wie sieht denn jetzt der komplette code dazu aus?
Top
#5
Hi,

vermeide Leerzeilen zwischen den gefüllten, dann hast Du keine Probleme.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#6
Ich vermute, dass aufgrund des Löschens von Zeilen der Rows.Count-Teil irgendwie ein falsches Ergebnis ausgibt.
Lass dir mal mittels

Code:
Debug.print last
das Ergebnis ausgeben. Falls das nicht das gewünschte Ergebnis bringt, versuch es mit

Code:
Private Sub CommandButton_Hinzufuegen_Click()

Dim last As Integer
With ThisWorkbook.Sheets("Datenhinterlegung")
    last = .Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    .Cells(last, 1).Value = TextBox_Name.Value
End With

End Sub
Schöne Grüße
Berni
Top
#7
Hey ihr,

freut mich, dass ihr mir helfen wollt.

Das mit den Leerzeilen vermeiden, da weiß ich noch nicht, ob ich das hinbekomme. Ich schildere euch erst ein Mal, was ich mit diesem Code bezwecken möchte:

Die Userform soll dafür da sein, einen neuen Benutzer anzulegen. Dieser wird dann in einem versteckten Tabellenblatt abgelegt und in der Folge weiterverwendet. Die Userform soll sich mit einem Button öffnen. Im nächsten Schritt wollte ich dann noch eine Userform basteln, mit der sich eine Liste aller Benutzer öffnet, um dann einen auszuwählen und löschen zu können - dabei würde dann eine Leerzeile entstehen.


Der Code bislang:


Code:
Private Sub CommandButton_Cancel_Click()

'Userform schließen
   Unload UserForm_Mitarbeiter
   

End Sub



Private Sub UserForm_Initialize()

'Startwerte Textboxen
   UserForm_Mitarbeiter.TextBox_Name.Value = "Nachname eingeben"
   UserForm_Mitarbeiter.TextBox_Resturlaub.Value = "Resturlaub."
   UserForm_Mitarbeiter.TextBox_Urlaubsanspruch.Value = "Urlaubsanspruch"
   
'Liste für die Funktionen
   With UserForm_Mitarbeiter.ComboBox_Funktion
       .AddItem "Chef"
       .AddItem "Vertreter"
       .AddItem "Mitarbeiter"
       
   End With
   
End Sub



Private Sub CommandButton_Hinzufuegen_Click()

Dim last As Integer

last = ThisWorkbook.Sheets("Mitarbeiter").Cells(Rows.Count, 1).End(xlUp).Row + 1

ThisWorkbook.Sheets("Mitarbeiter").Cells(last, 1).Value = TextBox_Name.Value
ThisWorkbook.Sheets("Mitarbeiter").Cells(last, 2).Value = ComboBox_Funktion.Value
If CheckBox_Teil = True Then ThisWorkbook.Sheets("Mitarbeiter").Cells(last, 3).Value = "Ja"
If CheckBox_Teil = False Then ThisWorkbook.Sheets("Mitarbeiter").Cells(last, 3).Value = "Nein"
If CheckBox_Tag = True Then ThisWorkbook.Sheets("Mitarbeiter").Cells(last, 4).Value = "Ja"
If CheckBox_Tag = False Then ThisWorkbook.Sheets("Mitarbeiter").Cells(last, 4).Value = "Nein"
ThisWorkbook.Sheets("Mitarbeiter").Cells(last, 5).Value = TextBox_Resturlaub.Value
ThisWorkbook.Sheets("Mitarbeiter").Cells(last, 6).Value = TextBox_Urlaubsanspruch.Value

End Sub
Top
#8
Hallo,

Zitat:last = ThisWorkbook.Sheets("Datenhinterlegung").Cells(Rows.Count, 1).End(xlUp).Row + 1
das ist doch bereits die Zeile, die Du so händeringend suchst (... stammt aus Deinem eigenen Code).

Nur durch den von Edgar bereits beschriebenen Blödsinn mit den Leerzeilen
Zitat:vermeide Leerzeilen zwischen den gefüllten, dann hast Du keine Probleme.
hebelst Du Dir selbst den Code aus.
Top
#9
Wenn ich den Code ausführe und etwas damit eintragen lasse.... so zum Beispiel 4 Personen. Diese stehen dann in den ersten vier Zeilen - so wie es sein soll.
Wenn ich nun aber Person 3 aus Zeile 3 rauslösche und den Code erneut ausführe und eine Person eintrage, dann wird diese Person in Zeile 5 und nicht in Zeile 3 geschrieben. Ziel wäre hier die Zeile 3
Top
#10
Hi, 

statt die Daten zu löschen ,lösche einfach die ganze Zeile. Wenn das eine Mitgliederliste werden soll, dann ist das Löschen ein absolutes NoGo!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top


Gehe zu:


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