Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

VBA-Code ändern
#1
Hallo, in die Excelrunde,
untenstehender  Code ist mit einem Textfeld verknüpft, das Datum in die Tabelle einträgt.
Funktioniert auch einwandfrei.
Das Textfeld ist in einer Useform integriert
Schön wäre es wenn dem Code ein Datumsformat beigefügt wäre.

Datum wird so eingetragen:  28.05.2024
Ich möchte dieses Format:        Di 28.Mai 24


Meine Frage: ist der Code so wie ich ihn jetzt geschrieben habe richtig?
Oder muss der ganz anders geschrieben werden?  Undecided

Dim i&, arr(): arr = Array(CDate(txtDatum)
Dim i&, arr(): arr = Array(CDate(txtDatum) & Format. "TTT T. MMM JJ"

Wäre dankbar für einen Tip.

LG Jo    17
Antworten Top
#2
Hi,

wenn Du das Datum schon mit CDate in ein echtes Datum umwandelst, kannst Du einfach die entsprechende Zelle wie gewünscht über das Zahlenformat formatieren.

Wofür Du dafür ein Array benötigst, erschließt sich mir aber nicht.
Antworten Top
#3
Hallo Boris,
nun, den kompletten Code habe ich aus diesem Forum.
Da ich aber nicht so Fit in VBA bin, kann ich Dir zu Deiner Frage nix sagen.
Das man die entsprechende Zelle im Blatt per Zahlenformat ändern kann ist mir schons klar,
Hab probiert, wenn ich die Zeilen vorher mit dem bestimmten Datumsformat einstelle,
beim übertragen in die Tabelle übernommen wird, geht aber nicht.
dachte nur, wenn es ja möglich wäre direkt die Codezeile so zu schreiben, das automatisch das gewünschte Datumsformat übernommen wird, wäre das eine kleine Arbeitserleichterung.

Gruß Jo  16
Antworten Top
#4
Hallöchen,

Dein Code passt und funktioniert aber auch so nicht. Der müsste dann im Prinzip
Format(CDate(...),"...")
lauten.

Bei zuvor formatierten Zellen würde ich was in der Art nehmen:
Cells(...).Value = CDate(txtDatum)

Damit änderst Du beim Einfügen nichts mehr am voreingestellten Format.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#5
Hallo

Range("A1").Value = Format(CDate(UserForm1.TextBox1), "ddd d. mmm yy")

mfg Gast 123
Antworten Top
#6
Hallo,

Zitat:Format(CDate(UserForm1.TextBox1), "ddd d. mmm yy")
wenn es egal ist, dass daraus Text und kein richtiges Datum wird, kann man es so machen.

Gruß, Uwe
Antworten Top
#7
moin,

noch eine Möglichkeit

Code:
    With Cells(1, 1)
        .Value = CDate(txtDatum.Value)
        .NumberFormat = "ddd d.mm yy"
    End With

ist dann auch ein rechenbares Datum 

mfg Tom
Antworten Top
#8
Hallo Uwe

Sorry, du hast Recht, bei Datum muss man verflixt aufpassen. Das klappt nicht wie gewollt!
[a3].Value = UserFormTextBox1
[a3].NumberFormat = "ddd dd. mmm yy"

Gibt es bei Format eine Schreibweise mit der man das in einem Befehl hinbekommt??
Ich habe mehrere Varianten ausprobiert, leider alles erfolglos.

mfg Gast 123
Antworten Top
#9
Hallöchen,

nö. Sind "getrennte" Eigenschaften.

Um nochmal auf ein Array zurückzukommen - das macht ja nur Sinn bei mehreren Einträgen und könnte dann so aussehen. Da wird das numberformat dann auch gleich in mehreren Zellen gesetzt. Ginge mit einer Datenreihe sicher auch, bei gleichmäßiger Zu- oder Abnahme. Smile

Code:
Private Sub UserForm_Click()
Dim arrDate()
arrDate = Array(CDate(TextBox1.Text), CDate(TextBox1.Text) + 1, CDate(TextBox1.Text) + 2)
With Cells(1, 1).Resize(UBound(arrDate) + 1)
  .NumberFormat = "ddd d.mm yy"
  .Value = WorksheetFunction.Transpose(arrDate)
End With
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#10
Moin Leute,

so, habe mal die Vorschläge ausprobiert.
Die Datumseinträge in die Tabelle bleiben allerdings,
wie gehabt in diesem Format: 29.05.2024.
Da ich nicht so mit VBA vertraut bin, es aber gerne ein wenig verstehen möchte,
habe ich den Code von Schauan unten angehängt, weiß aber nicht ob das so richtig ist.

Hier mal der komplette Code der Userform:

Private Sub btnAnlegen_Click()
Dim i&, arr(): arr = Array(CDate(txtDatum), CbHändler, txtArtikel.Value, _
txtEinheit.Value, CbKategorie.Value, txtMenge, txtEinzelpreis, txtGesamtpreis)

' With Cells(1, 1)
' .Value = CDate(txtDatum.Value)
' .NumberFormat = "ddd d.mm yy"
' End With


If CbKategorie.ListIndex = -1 Then
MsgBox "keine Kathegorie ausgewählt"
CbKategorie.SetFocus
Exit Sub
End If
For i = 5 To 7
If IsNumeric(arr(i)) Then
arr(i) = CDbl(arr(i))
If i = 6 Then
arr(7) = arr(5) * arr(6)
txtGesamtpreis = arr(7)
Exit For
End If
Else
MsgBox "Es sind nur numerische Werte zulässig"
With Controls(arr(i).Name)
.SetFocus
.Value = ""
End With
Exit Sub
End If
Next i
'Tabellenzeile hinzufügen
Tabelle1.ListObjects(1).ListRows.Add.Range.Resize(1, UBound(arr) - LBound(arr) + 1) = arr


End Sub

Private Sub UserForm_Click()
Dim arrDate()
arrDate = Array(CDate(TextBox1.Text), CDate(TextBox1.Text) + 1, CDate(TextBox1.Text) + 2)
With Cells(1, 1).Resize(UBound(arrDate) + 1)
.NumberFormat = "ddd d.mm yy"
.Value = WorksheetFunction.Transpose(arrDate)
End With
End Sub

Gruß Jo
Antworten Top


Gehe zu:


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