Variable aus Textbox global setzen

Variable aus Textbox global setzen

Hallo,

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 geht schon, halt im OnChange-Ereignis des Textfelds die Variable setzen:

Private Sub txtDatum\_Change()
 pubDatum = txtDatum
End Sub

Die Public-Variable sollte in einem allgemeinen Modul (und nicht im Modul des Userforms) deklariert sein.

Gruß
Reinhard Kraasch

Hallo faro01,

leider kenne ich mich mit Excel 2003 nicht besonders gut aus. Bei Access würde es besser aussehen und mitlerweile bei C# (VS2008Express) noch besser.

Es sind auch zu wenige Infos…

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

Bei mir heißt die Textbox „TB_Datum“

Hallo,

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

Hoffe, das hilft Dir.

Gruß
gs

Hallo faro01,

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.

Viel Erfolg

peter1952

Hey danke für deine Hilfe,

habe es so umgesetzt und es funktioniert.

Ist evtl ein kleiner Schönheitsfehler da das Datum auf ein WS geschrieben wird, aber das ist nicht schlimm :wink:

Grüße

Hallo,

Wo hast du den die Variable gesetzt?
In der sub?
Bin grad selten am programmieren, aber ich denke du musst die variable global setzen.

Gruß
Christian

Hallo,

Ist evtl ein kleiner Schönheitsfehler da das Datum auf ein WS
geschrieben wird, aber das ist nicht schlimm :wink:

Du hattest ja geschrieben, daß das Datum in ein ws über-
nommen werden soll. Wenn nicht, laß einfach die Befehle
zum Übertrag ins ws aus.

Gruß
gs

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.

lg