online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon wimaxe vom 07.03.2022, 09:29 Options

Lösung

Hilfe bei Userform und Zellen per Button in anderes Worksheet übertragen

Hallo an alle, brauche mal wieder eure Hilfe!

hier mal meine Muster Tabelle: Datei

1. Bei einem Klick auf Button „in Zahlungen übernehmen“
im Worksheet „Eingaben“ sollen Zellen nach Worksheet „Zahlungen“ fortlaufend übernommen werden:

B2 und B3 übernommen nach A2
B7 übernommen nach B2
B8 übernommen nach C2
B25 übernommen nach D2
I21 übernommen nach E2
I19 übernommen nach F2
I22 übernommen nach G2
B24 übernommen nach H2
I22 übernommen nach I2
I23 übernommen nach P2

2. Bei einem Klick auf Button „Zahlungen erfassen“ möchte ich die Daten im Worksheet „Zahlungen“ mit dem Userform „UserformZahlung“ bearbeiten und ergänzen

Gruß
wimaxe


Antwort schreiben

Antwort 1 von wimaxe vom 07.03.2022, 21:40 Options

Muster Datei

OK, Brauche nur noch Hilfe bei der Userform.
Beim aufrufen über den Button "Zahlungen erfassen"
möchte ich schon die Werte in der Userform vom Blatt "Zahlungen"
vorgegeben haben und eventl. per "Drehfeld" durchzappen, sodass ich diese Werte ergänzen kann und mit einem Button wieder abspeichern kann

Antwort 2 von coros vom 08.03.2022, 14:52 OptionsLösung

Lösung
Hallo wimaxe,

nachfolgend mal der Anfang des Codes für Deine UserForm. Du solltest in die UserForm noch einen Button einfügen und ihm den Namen „CommandButton1_Click“ in den Eigenschaften geben.
Mit dem Code wird Dir die ComboBox, bei der Du in den Eigenschaften bitte den Namen in „Name1“ solltest, mit den Werten aus Blatt „Zahlungen“ Spalte A gefüllt.
Zusätzlich wird in die 2. Spalte der ComboBox die Zeilennummer jeden Eintrags aufgeführt. Durch die Angabe der Zahl 0 in „.ColumnWidths, wird die Spaltenindexzahl nicht angezeigt. Wenn Du Dir diese mal anzeigen lassen möchtest, ändere die Zahl 0 in z.B. 10 (Zahlen sagen die Breite der Spalte aus).
Wenn Du in der ComboBox etwas auswählst, wird Dir mit dem nachfolgenden Code die Felder „CheckIn“, „CheckOut“ und „AnzahlungSoll“ mit Werten aus der Zeile der Auswahl gefüllt.
Betätigst Du den Button, werden Dir die Werte in die entsprechende Zeile und Spalte geändert.

Kopiere den Code in das Projekt der UserForm „UserFormZahlung“.
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

 Dim lngRow As Long

Private Sub CommandButton1_Click()
lngRow = Name1.List(Name1.ListIndex, 1)

'Wert aus Textfeld "AnzahlungSoll" in Spalte B (sagt die Spaltenindexzahl 4 aus, _
 Spaltenindex beginnt mit 1 für Spalte A, Spalte B die 2, _
 Spalte C die 3 usw.)  einfügen _
 Umwandelfunktion CDate(), damit TextBoxwerte als Datum in Tabellenblatt _
  übergeben werden, da Wert aus einer TextBox immer vom Typ "String" (Text) sind
Sheets("Zahlungen").Cells(lngRow, 2) = CDate(CheckIn.Value)

'Wert aus Textfeld "AnzahlungSoll" in Spalte B (sagt die Spaltenindexzahl 4 aus, _
 Spaltenindex beginnt mit 1 für Spalte A, Spalte B die 2, _
 Spalte C die 3 usw.)  einfügen _
 Umwandelfunktion CDate(), damit TextBoxwerte als Datum in Tabellenblatt _
 übergeben werden, da Wert aus einer TextBox immer vom Typ "String" (Text) sind
Sheets("Zahlungen").Cells(lngRow, 3) = CDate(CheckOut.Value)

'Wert aus Textfeld "AnzahlungSoll" in Spalte D (sagt die Spaltenindexzahl 4 aus, _
 Spaltenindex beginnt mit 1 für Spalte A, Spalte B die 2, _
 Spalte C die 3 usw.)  einfügen _
 Umwandelfunktion CDbl(), damit TextBoxwerte als Zahl in Tabellenblatt _
 übergeben werden, da Wert aus einer TextBox immer vom Typ "String" (Text) sind
Sheets("Zahlungen").Cells(lngRow, 4) = CDbl(AnzahlungSoll.Value)

'usw.
'usw.
'usw.
'usw.
'usw.
'usw.

End Sub

Private Sub Name1_Change()
lngRow = Name1.List(Name1.ListIndex, 1)

'Wert aus Spalte B (sagt die Spaltenindexzahl 2 aus, _
 Spaltenindex beginnt mit 1 für Spalte A, Spalte B die 2, _
 Spalte C die 3 usw.) einfügen
CheckIn = Sheets("Zahlungen").Cells(lngRow, 2)

'Wert aus Spalte C (sagt die Spaltenindexzahl 3 aus, _
 Spaltenindex beginnt mit 1 für Spalte A, Spalte B die 2, _
 Spalte C die 3 usw.) einfügen
CheckOut = Sheets("Zahlungen").Cells(lngRow, 3)

AnzahlungSoll = Sheets("Zahlungen").Cells(lngRow, 4)

'usw.
'usw.
'usw.
'usw.
'usw.
'usw.

End Sub

Private Sub UserForm_Initialize()
Dim lngRow As Long

'ComboBox füllen
With Name1
    .ColumnCount = 2
    .ColumnWidths = "50; 0"
    For lngRow = 2 To Sheets("Zahlungen").Cells(Rows.Count, 1).End(xlUp).Row
        'Mitarbeiterkürzel übertragen
        .AddItem Sheets("Zahlungen").Cells(lngRow, 1)
        'Zeilennummer übertragen
        .List(.ListCount - 1, 1) = lngRow
    Next lngRow
End With
End Sub 
Beachte bitte die auskommentierten Zeilen im Code, da dort noch einige Erklärungen stehen. Du musst nun den Code nur noch für die restlichen Felder erweitern.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 3 von wimaxe vom 08.03.2022, 18:09 Options

Vielen Dank Oliver,

Funktioniert prima!
ich kann Dir garnicht sagen, wie lange ich schon rumdocktor
Danke, Danke, Danke
Gruß
wimaxe

Antwort 4 von wimaxe vom 08.03.2022, 19:32 Options

Hallo Oliver,
ich habe den unteren Code eingetragen, bekomme aber Folgende Fehlermeldung
bei klicken auf den CommandButton1:
Laufzeitfehler 424:
Objekt erforderlich


Habe ich was falsch gemacht?

Code:

Private Sub CommandButton1_Click()
lngRow = Name1.List(Name1.ListIndex, 1)

'Wert aus Textfeld "AnzahlungSoll" in Spalte B (sagt die Spaltenindexzahl 4 aus, _
Spaltenindex beginnt mit 1 für Spalte A, Spalte B die 2, _
Spalte C die 3 usw.) einfügen _
Umwandelfunktion CDate(), damit TextBoxwerte als Datum in Tabellenblatt _
übergeben werden, da Wert aus einer TextBox immer vom Typ "String" (Text) sind
Sheets("Zahlungen").Cells(lngRow, 2) = CDate(CheckIn.Value)

'Wert aus Textfeld "AnzahlungSoll" in Spalte B (sagt die Spaltenindexzahl 4 aus, _
Spaltenindex beginnt mit 1 für Spalte A, Spalte B die 2, _
Spalte C die 3 usw.) einfügen _
Umwandelfunktion CDate(), damit TextBoxwerte als Datum in Tabellenblatt _
übergeben werden, da Wert aus einer TextBox immer vom Typ "String" (Text) sind
Sheets("Zahlungen").Cells(lngRow, 3) = CDate(CheckOut.Value)

'Wert aus Textfeld "AnzahlungSoll" in Spalte D (sagt die Spaltenindexzahl 4 aus, _
Spaltenindex beginnt mit 1 für Spalte A, Spalte B die 2, _
Spalte C die 3 usw.) einfügen _
Umwandelfunktion CDbl(), damit TextBoxwerte als Zahl in Tabellenblatt _
übergeben werden, da Wert aus einer TextBox immer vom Typ "String" (Text) sind
Sheets("Zahlungen").Cells(lngRow, 4) = CDbl(AnzahlungSoll.Value)
Sheets("Zahlungen").Cells(lngRow, 5) = CDate(AnzamDatum.Value)
Sheets("Zahlungen").Cells(lngRow, 6) = CDbl(RestbetragSoll.Value)
Sheets("Zahlungen").Cells(lngRow, 7) = CDate(RestamDat.Value)
Sheets("Zahlungen").Cells(lngRow, 8) = CDbl(KautionSoll.Value)
Sheets("Zahlungen").Cells(lngRow, 9) = CDate(KautionAmDat.Value)
Sheets("Zahlungen").Cells(lngRow, 10) = CDbl(AnzahlungErhalten.Value)
Sheets("Zahlungen").Cells(lngRow, 11) = CDate(AnzErhAm.Value)
Sheets("Zahlungen").Cells(lngRow, 12) = CDbl(RestErh.Value)
Sheets("Zahlungen").Cells(lngRow, 13) = CDate(RestErhAm.Value)
Sheets("Zahlungen").Cells(lngRow, 14) = CDbl(KautionErh.Value)
Sheets("Zahlungen").Cells(lngRow, 15) = CDate(KautionErhAm.Value)
Sheets("Zahlungen").Cells(lngRow, 16) = CDate(KautionRAm.Value)

End Sub

Private Sub Name1_Change()
lngRow = Name1.List(Name1.ListIndex, 1)

'Wert aus Spalte B (sagt die Spaltenindexzahl 2 aus, _
Spaltenindex beginnt mit 1 für Spalte A, Spalte B die 2, _
Spalte C die 3 usw.) einfügen
CheckIn = Sheets("Zahlungen").Cells(lngRow, 2)

'Wert aus Spalte C (sagt die Spaltenindexzahl 3 aus, _
Spaltenindex beginnt mit 1 für Spalte A, Spalte B die 2, _
Spalte C die 3 usw.) einfügen
CheckOut = Sheets("Zahlungen").Cells(lngRow, 3)

AnzahlungSoll = Sheets("Zahlungen").Cells(lngRow, 4)
AnzamDatum = Sheets("Zahlungen").Cells(lngRow, 5)
RestbetragSoll = Sheets("Zahlungen").Cells(lngRow, 6)
RestamDat = Sheets("Zahlungen").Cells(lngRow, 7)
KautionSoll = Sheets("Zahlungen").Cells(lngRow, 8)
KautionAmDat = Sheets("Zahlungen").Cells(lngRow, 9)
AnzahlungErhalten = Sheets("Zahlungen").Cells(lngRow, 10)
AnzErhAmDat = Sheets("Zahlungen").Cells(lngRow, 11)
RestErh = Sheets("Zahlungen").Cells(lngRow, 12)
RestErhAm = Sheets("Zahlungen").Cells(lngRow, 13)
KautionErh = Sheets("Zahlungen").Cells(lngRow, 14)
KautionErhAm = Sheets("Zahlungen").Cells(lngRow, 15)
KautionRAm = Sheets("Zahlungen").Cells(lngRow, 16)

End Sub

Antwort 5 von coros vom 08.03.2022, 20:27 Options

Hallo,

welche Zeile im Code des Buttons wird dann gelb markiert, wenn Du auf "Debuggen" klickst? Gibt es überhaupt die ganzen TextBoxen unter den Namen, die Du angegeben hast. Wenn ich z.B. in Deine Beispieldatei schaue, gibt es dort z.B. keine TextBox mit dem Namen "AnzErhAm" oder "KautionRAm".

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 6 von wimaxe vom 08.03.2022, 20:50 Options

Entschuldige, die Textbox ist "AnzErhAmDat" ich habe es im Code geändert.
und die Textbox "KautionRAm" habe ich noch nachträglich eingefügt

Jetzt kommt folgende Fehlermeldung:

Laufzeitfehler 13
Typen unverträglich


wenn ich auf debug klicke, ist folgende Zeile gelb:

Sheets("Zahlungen").Cells(lngRow, 11) = CDate(AnzErhAmDat.Value)

Gruß
wimaxe

Antwort 7 von wimaxe vom 08.03.2022, 21:00 Options

Ich habe folgendes rausgefunden,

wenn ich im sheet "Zahlungen" in jeder Zelle Daten habe funktioniert alles

ich muss aber über den Button "CommandButton1" abspeichern können auch wenn nicht alle Textboxen mit Werten gefüllt sind!

Gruß
wimaxe

Antwort 8 von coros vom 09.03.2022, 05:33 Options

Hallo wimaxe,

Du musst vor dem Übertragen der Daten im Code kontrollieren, ob sich in den TextBoxen auch Werte befinden, die es erlauben mit CDATE() oder CDBL() usw. zu arbeiten. Du musst also für jede TextBox mit einer If-Abfrage kontrollieren, ob ein Wert in der TextBox steht und dieser bei Zahlen z.B. numerisch ist. Das würde bei Dir z.B. so aussehen:
 If CheckIn <> "" And IsDate(CheckIn) Then
    Sheets("Zahlungen").Cells(lngRow, 2) = CDate(CheckIn.Value)
Else
    Sheets("Zahlungen").Cells(lngRow, 2) = ""
End If

If CheckOut <> "" And IsDate(CheckOut) Then
    Sheets("Zahlungen").Cells(lngRow, 3) = CDate(CheckOut.Value)
Else
    Sheets("Zahlungen").Cells(lngRow, 3) = ""
End If

If AnzahlungSoll <> "" And IsNumeric(AnzahlungSoll) Then
    Sheets("Zahlungen").Cells(lngRow, 4) = CDbl(AnzahlungSoll.Value)
Else
    Sheets("Zahlungen").Cells(lngRow, 4) = ""
End If
 
Hier wird geprüft, ob das Textfeld einen Wert enthält und ob dieser numerisch ist. Erst wenn das übereinstimmt, wird der TextBox-Inhalt übertragen. Wenn nicht, dann wird der Wert im Tabellenblatt „Zahlungen“ gelöscht.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 9 von wimaxe vom 09.03.2022, 06:24 Options

Entschuldige meine Frage Oliver,

aber wo muss ich Deinen Code eintragen?

Gruß

Antwort 10 von coros vom 09.03.2022, 06:54 Options

Hi wimaxe,

na dort, wo Du die Daten übergibst, also bei dem CommandButton1_Click-Ereignis.

Du musst also anstelle von z.B.

Sheets("Zahlungen").Cells(lngRow, 2) = CDate(CheckIn.Value)
dort

If CheckIn <> "" And IsDate(CheckIn) Then
    Sheets("Zahlungen").Cells(lngRow, 2) = CDate(CheckIn.Value)
Else
    Sheets("Zahlungen").Cells(lngRow, 2) = ""
End If
eintragen.

Wenn Du nicht möchtest, dass der Eintrag im Tabellenblatt "Zahlungen" gelöscht wird, wenn nichts in der TextBox steht, dann lasse einfach

Else
    Sheets("Zahlungen").Cells(lngRow, 2) = ""
weg.
Probier mal ein bisschen herum, dann wirst Du schon sehen, wie das alles zusammenhängt.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 11 von wimaxe vom 09.03.2022, 13:29 Options

Ich habe den Code wie unten eingetragen, der Code trägt mir aber nichts in
Row 11 und 13 und 15
alles andere geht

Private Sub CommandButton1_Click()
lngRow = Name1.List(Name1.ListIndex, 1)

Sheets("Zahlungen").Cells(lngRow, 2) = CDate(CheckIn.Value)
Sheets("Zahlungen").Cells(lngRow, 3) = CDate(CheckOut.Value)
Sheets("Zahlungen").Cells(lngRow, 4) = CDbl(AnzahlungSoll.Value)
Sheets("Zahlungen").Cells(lngRow, 5) = CDate(AnzamDatum.Value)
Sheets("Zahlungen").Cells(lngRow, 6) = CDbl(RestbetragSoll.Value)
Sheets("Zahlungen").Cells(lngRow, 7) = CDate(RestamDat.Value)
Sheets("Zahlungen").Cells(lngRow, 8) = CDbl(KautionSoll.Value)
Sheets("Zahlungen").Cells(lngRow, 9) = CDate(KautionAmDat.Value)

If AnzahlungErhalten <> "" And IsNumeric(AnzahlungErhalten) Then
Sheets("Zahlungen").Cells(lngRow, 10) = CDbl(AnzahlungErhalten.Value)
Else
Sheets("Zahlungen").Cells(lngRow, 10) = ""
End If
If AnzErhAm <> "" And IsDate(AnzErhAm) Then
Sheets("Zahlungen").Cells(lngRow, 11) = CDate(AnzErhAm.Value)
Else
Sheets("Zahlungen").Cells(lngRow, 11) = ""
End If
If RestErh <> "" And IsNumeric(RestErh) Then
Sheets("Zahlungen").Cells(lngRow, 12) = CDbl(RestErh.Value)
Else
Sheets("Zahlungen").Cells(lngRow, 12) = ""
End If
If RestErhAm <> "" And IsDate(RestErhAm) Then
Sheets("Zahlungen").Cells(lngRow, 13) = CDate(RestErhAm.Value)
Else
Sheets("Zahlungen").Cells(lngRow, 13) = ""
End If
If KautionErh <> "" And IsNumeric(KautionErh) Then
Sheets("Zahlungen").Cells(lngRow, 14) = CDbl(KautionErh.Value)
Else
Sheets("Zahlungen").Cells(lngRow, 14) = ""
End If
If KautionErhAm <> "" And IsDate(KautionErhAm) Then
Sheets("Zahlungen").Cells(lngRow, 15) = CDate(KautionErhAm.Value)
Else
Sheets("Zahlungen").Cells(lngRow, 15) = ""
End If

Sheets("Zahlungen").Cells(lngRow, 16) = CDate(KautionRAm.Value)

End Sub

Gruß
wimaxe

Antwort 12 von coros vom 09.03.2022, 13:37 Options

Hallo wimaxe,

wieso Row 11, 13 und 15? Die Daten werden doch in die Spalten (Column) 11, 13 und 15 des jeweilig aufgerufenen Termins eingetragen? Row ist die Bezeichnung für Zeile. Meinst DU nun Zeile oder Spalte?

Lade bitte mal Deine Datei hoch, bei der es nicht funktioniert, denn sonst wird es schwer Dir weiterzuhelfen.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 13 von wimaxe vom 09.03.2022, 13:53 Options

Entschultige ich meine Spalten

Hier meine Test Datei: Datei

Danke für die Hilfe
Gruß
wimaxe

Antwort 14 von coros vom 09.03.2022, 14:02 Options

Hallo wimaxe,

kontrolliere mal Deine Namen für die TextBoxen mit den Namen, die Du in dem Button_Click()-Ereignis verwandt hast. Die TextBox für Spalte 11 heißt in der USerForm "AnzErhAmDat". Im VBA-Code gibt es diese Bezeichnung nicht, sondern dort steht für die TextBox die Bezeichnung "AnzErhAm".

Das muss schon alle genau stimmen, ansonsten können die Werte nicht übertragen werden.



MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 15 von wimaxe vom 09.03.2022, 17:53 Options

OK, danke das war der Fehler.
Danke nochmals, Du hast mir sehr geholfen!
Gruß
wimaxe

Ähnliche Themen

Zellen sperren+Command Button ausführen
jockel01  10.10.2008 - 53 Hits - 7 Antworten

Mehre Zellen einer Spalte,in einer Zeile übertragen (Tab2.)
ajin  31.10.2008 - 29 Hits - 2 Antworten

Daten von UserForm in Kalender übertragen
--dlb--  23.03.2009 - 366 Hits - 10 Antworten

Daten aus Zellen per Button in neues Tabellen X einfügen
wimaxe  07.03.2010 - 185 Hits - 2 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 16:59:01 2026