206 Aufrufe
Gefragt in Tabellenkalkulation von k-siebke Einsteiger_in (81 Punkte)
Kategorie geändert von mickey
hallo ich möchte gerne  gerne das der in halt zweier Texboxken  aus Tabelle1unabhängig von einander werte in eine andere Tabelle Übertragen. Beispiel wen ich mit texbox5 ein wert in Tabelle3 in Spalte A eintrage -soll es möglich sein Mit texbox6 in Spalte B den wert darunter einzutragen.

das ist mein kleiner versuch, leider funktioniert es nicht so wie ich denke da ständig Fehlemeldungen auftauchen

Sub inTab3Eintragen()
Dim lfreerow As Long
With Worksheets("Tabelle3")
    lfreerow = .Cells(.Rows.Count, 2).End(xlUp).Row + 1
   
     .Cells(lfreerow, 1) = Worksheets("Tabelle1").TextBox5.Text
    .Cells(lfreerow, 2) = Worksheets("Tabelle1").TextBox6.Text
    
    TextBox5.Text = vbNullString
    TextBox6.Text = vbNullString

End With
End Sub

   Sub Leeren()
Worksheets("Tabelle3").Range("A2:A1000,B2:B1000,F2:F1000").ClearContents

End Sub

Private Sub worksheet_change(ByVal target As Range)
If Intersect(target, Range("A:B")) Is Nothing Or _
    target.Count > 1 Then Exit Sub
   
 Cells(target.Row, "F") = IIf(Len(target) > 0, Now, "")
 
End Sub

6 Antworten

0 Punkte
Beantwortet von xlking Experte (1.5k Punkte)

Hallo K.

Das Worksheet-Objekt hat nun mal keine Textbox-Eigenschaft. Schon gar nicht eine mit laufender Nummer. Daher der Fehler. Wenn du ein Bild, einen Kommentar oder z.B. ein Formularsteuerelement hinzufügst (hier kommt es noch darauf an ob es aus der MS-Forms Sammlung stammt oder ein Active-X Element ist) dann handelt es sich dabei immer um ein Zeichnungsobjekt (in VBA Shape genannt).

Bei ActiveX-Formular-Elementen verwende ich in meinen Projekten immer die OLEFormat-Eigenschaft des Shape-Objekts. Damit kannst du auf die aus einem Userform bekannten Eigenschaften des ActiveX-Formularobjekts zugreifen.

.Cells(lfreerow, 1) = Worksheets("Tabelle1").Shapes("TextBox5").OLEFormat.Object.Object.Value

Gruß Mr. K.

0 Punkte
Beantwortet von k-siebke Einsteiger_in (81 Punkte)
Bearbeitet von k-siebke

Hallo, xlking danke für deine Hilfeyes, aber leider funktioniert es nicht wie erwartet mit meinen ActiveX Steuerelement Element! Den meine Fehlermeldung (gelb) taucht immer noch auf (Nach End Sub, End Funktion oder End Property können nur Kommentare stehen). Meine >>Sub inTab3Eintragen()< <wirt gelb markiert. Bin ratlos, wie ich dies beheben kann?

https://supportnet.de/forum/?qa=blob&qa_blobid=4108925429253109833

0 Punkte
Beantwortet von xlking Experte (1.5k Punkte)
Hey K.

Ach du schreck, was hast du denn das verzapft? Du kannst doch keine Sub innerhalb einer anderen Sub aufbauen. Jede Sub muss mit einer End Sub beendet werden. Erst danach kannst du eine weitere Sub im gleichen Modul schreiben. Sieht aus als hättest du versehentlich Zeilen gelöscht, deshalb der Fehler. Schau dir nochmal den Code in deiner Ausgangsfrage an und ergänze die fehlenden Zeilen.

Innerhalb einer Sub gilt für bestimmte Blocks das gleiche. If : End If, With : End With, For : Next, Do : Loop usw. Deine If-Zeile benötigt jedoch kein End If, da du alles in einer Zeile hast. Diese Möglichkeit gibts auch.

Wenn du weitere Fragen hast, meld dich. Gruß Mr. K.
0 Punkte
Beantwortet von k-siebke Einsteiger_in (81 Punkte)

Danke das Problem ist zum Teil gelöst und die die texboxsen tragen wider mein angaben ein !

das erste Problem ist aber leider so dass wen ich mit texbox5 ein Eintrag tätige nicht der Zeit Stempel in Spalte F eingetragen wird, wie bei texbox6 

zweite Problem ist wie oben beschrieben, dass wen ich in einer Zeile mit Texbox5 ein wert eintrage dies dann durch texbox6 bei der nässten Eingabe gelöscht wird und der Wert von Texbox6 in die Zelle eingetragen wirte dabei soll dies in die nässte  Frei Zeile eingetragen werden 

HImm ich hoffe ich habe nix vergessen und hoffe das ich mein Anliegen so gut es geht erläutert habe.

Ich hoffe ich habe dein angaben richtig umgesetz? 

anbei die Korektuhr(Tabelle1) :

Sub inTab3Eintragen()
Dim lfreerow As Long
With Worksheets("Tabelle3")

    lfreerow = .Cells(.Rows.Count, 2).End(xlUp).Row + 1
   
    .Cells(lfreerow, 1) = Worksheets("Tabelle1").Shapes("TextBox5").OLEFormat.Object.Object.Value
    .Cells(lfreerow, 2) = Worksheets("Tabelle1").Shapes("TextBox6").OLEFormat.Object.Object.Value

    TextBox5.Text = vbNullString
    TextBox6.Text = vbNullString

End With
End Sub

   Sub Leeren()
Worksheets("Tabelle3").Range("A2:A1000,B2:B1000,F2:F1000").ClearContents

Dieser Teil befindet sich bei mir in Tabelle3:

End Sub
Private Sub worksheet_change(ByVal target As Range)
If Intersect(target, Range("A:B")) Is Nothing Or _
    target.Count > 1 Then Exit Sub
   
 Cells(target.Row, "F") = IIf(Len(target) > 0, Now, "")

 

+1 Punkt
Beantwortet von xlking Experte (1.5k Punkte)

Also soweit ich deinen Code richtig deute, müsste der Zeitstempel immer erfolgen, wenn du das Makro ausführst. Wann startest du denn den Code. Erst wenn beide Textboxen gefüllt sind, oder schon wenn nur eine gefüllt ist? In letzterem Fall kann es durchaus vorkommen, dass ein bereits bestehender Zeitstempel überschrieben wird. Wenn du das nicht siehst, glaubst du wahrscheinlich er würde nicht ausgeführt.

Dein zweites Problem hängt mit dem ersten zusammen. Wobei ich deine Beschreibung aber leider nicht nachvollziehen kann, denn dein Code besagt eindeutig, dass Textbox5 in Spalte A und Textbox6 in Spalte B schreibt. Ein Überschreiben derselben Zelle ist damit eigentlich nicht möglich.

Grund für dein Problem dürfte sein, dass du in Spalte B nach der nächsten freien Zeile suchst. Wenn du aber üblicherweise zuerst Textbox5 und erst später Textbox6 befüllst, solltest du die freie Zeile lieber in Spalte A ermitteln.

lfreerow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1

Falls du beide Werte in der gleichen Zeile sehen willst, solltest du per If-Bedingung prüfen, welche Textbox du grade gefüllt hast und im Fall von Textbox6 das +1 bei lfreerow weglassen.

Gruß Mr. K.

0 Punkte
Beantwortet von k-siebke Einsteiger_in (81 Punkte)
Bearbeitet von k-siebke

Wie Peinlich! Ich habe meinen eigenen Denkfehler erkannt wehren ich auf Arbeit wahr - das Problem lieg bei der Anweisung der TextBoxen, leider habe ich diese nie beachtet da ich die Anweisung ursprünglich eingefügt hatte um den Inhalt wieder auf null zu setzen. Ich weiß zwar noch nicht wie das geht ,oder wie ich meine vorgaben umseze aber zumindest weiß ich jetzt wo ich ansetzen muss  

TextBox5.Text = >>>>vbNullString<<<<
TextBox6.Text = >>>>vbNullString<<<<

(von nichts kommt nichts  und wen man nix hat kann man auch nix anweisen oder ausführen )

daher will ich in  meiner Tabelle eine >>0<< eintrage als Platzhalter ohne, dass es in der TextBox angezeigt wirte 

Cells("A:A") = IIf(TextBox5 = "", "0", TextBox5.Value

Cells("B:B") = IIf(TextBox6 = "", "0", TextBox6.Value

...