ich möchte über eine Textbox auf einer Userform in der das aktuelle Datum steht (welches aber auch geändert werden kann) das Datum in eine Variable übertragen und diese Variable in einem Modul wieder verwenden dass es mir das Datum in bestimmte Zellen im WS schreibt.
Ist das überhaupt möglich?
Habe die Variable der TB als Public datum as String gesetzt jedoch ist der Inhalt immer „“
Was muss ich beachten wenn ich den richtigen Inhalt haben will?
Das Public wirkt nur in der UserForm, in der es definiert wird.
Willst du die Variable über mehrere UserForms nutzen, musst du ein Modul anlegen und die Variable dort als Public definieren, dann wirkt Sie über alle UserForms
Public My_Date As Date
Das setzen des Datums machst du beim Ereignis Activate der UsereForm
Private Sub UserForm_Activate()
TB_Datum = Date
End Sub
Das Auslesen der Textbox bedingt, dass ein anderes Objekt den Fokus bekommt. Da hilft ein „Speichern“-Button, der nur dazu da ist den Fokus zu übernehmen, Code braucht der keinen.
Die Auslese erfolgt dann im Ereignis Exit der Textbox:
Private Sub TB_Datum_Exit(ByVal Cancel As MSForms.ReturnBoolean)
My_Date = TB_Datum
MsgBox My_Date
End Sub
ich möchte über eine Textbox auf einer Userform in der das
aktuelle Datum steht (welches aber auch geändert werden kann)
das Datum in eine Variable übertragen und diese Variable in
einem Modul wieder verwenden dass es mir das Datum in
bestimmte Zellen im WS schreibt.
Das ist selbstverständlich möglich.
Die Textbox in der Userform möge AktDatum heißen.
Ihren Inhalt liest Du als AktDatum.Value aus, mit
DeineVariable = AktDatum.Value
übergibst Du den Inhalt an DeineVariable, die Du irgendwo
definiert hast.
An Zelle B2 in der Tabelle „Tabelle1“ übergibst Du den
Wert mit
Set ws = ActiveWorkbook.Worksheets("Tabelle1")
ws.Cells(2, 2).Value = TextBox1.Value
Wenn der Wert aus AktDatum nach einer Eingabe übernommen
werden soll, wählst Du das Ereignis AfterUpdate:
Private Sub AktDatum\_AfterUpdate()
Dim ws As Worksheet, var As Variant
var = TextBox1.Value
If IsDate(var) Then
'Übergabe an Tabelle1, Zelle B2:
Set ws = ActiveWorkbook.Worksheets("Tabelle1")
ws.cells(2, 2).Value = var
Set ws = Nothing
'Übergabe an eine andere Variable:
DeineVariable = var
Else
MsgBox "Bitte korrektes Datum eingebeben"
End If
End Sub
die Syntax für die Variablendeklaration ist korrekt. Entscheidend ist die Position der Deklaration.
In diesem Fall gehört sie auf jeden Fall in den Deklarationsteil des Moduls, also oberhalb der ersten Prozedur (global).
In meinen ersten Versuchen hatte ich diese Deklaration im Modul der Userform vorgenommen, mit dem Ergebnis, dass der Datumswert in anderen Prozeduren leer war. Nachdem ich die Deklaration in ein Standardmodul verlegt hatte, aus dem ich die Übernahme in eine bestimmte Zelle der „Tabelle1“ vornahm, funktionierte alles.
Möglich ist das,
und ein Datum muss den Datentyp „Date“ haben, ein String ist kein Datum. Wenn du einen Textstring benötigst, der wie ein Datum aussieht, musst du’s konvertieren.
Leichter tu ich mir beim Verstehen, wenn der vorhandene Code einsichtig ist, daraus lässt sich besser erraten, worum es gehen soll.