Ich habe eine UserForm
, die eine Reihe von CheckBoxes
, TextBoxes
und Buttons
enthält. Ein TextBox
fragt den Benutzer nach einem bestimmten Datum, und sobald der OKButton
angeklickt ist, dauert es und überprüft die Formatierung des Datums des Benutzers. Ich habe eine Select/Case
verwendet, um die verschiedenen Formate zu überprüfen, die der Benutzer eingibt und konvertiert sie in ein spezifisches Format für Dateiname (dieses Makro nimmt die vom Benutzer ausgewählten Dateipfade und erzeugt einen Bericht, speichert es alsWarum funktioniert meine Replace() -Methode nicht richtig?
My Wählen Sie Groß-/Kleinschreibung, wenn die Eingabe des Benutzers als MMDDJJJJ, MMTTTNT, MM/TT/JJJJ, MM/TT/JJ, MM-TT-JJJJ, MM-TT-JJJJ formatiert ist.
Der Code ist wie folgt:
Function PostDateBoolean() As Boolean
PostingDate = PostDateTextBox.Value 'tested as 071616 (07-16-2016)
Select Case True
Case Is = PostingDate Like "##/##/##" Or _
PostingDate Like "##-##-##" Or _
PostingDate Like "##/##/20##" Or _
PostingDate Like "##-##-20##" Or _
PostingDate Like "######" Or _
PostingDate Like "########"
PostDateBoolean = True
Select Case True
Case Is = PostingDate Like "##/##/##" Or _
PostingDate Like "##-##-##"
PostingDate = Replace(PostingDate, Right(PostingDate, 2), _
"20" & Right(PostingDate, 2))
PostDateTextBox.Value = PostingDate
End Select
Select Case True
Case Is = PostingDate Like "######"
' THE ERROR IS HERE VVVV
PostingDate = Replace(PostingDate, Right(PostingDate, 2), _
"/20" & Right(PostingDate, 2))
PostingDate = Replace(PostingDate, Right(PostingDate, 7), _
"/" & Right(PostingDate, 7))
PostDateTextBox.Value = PostingDate
GoTo CheckDone:
End Select
Select Case True
Case Is = PostingDate Like "########"
PostingDate = Replace(PostingDate, Right(PostingDate, 4), _
"/" & Right(PostingDate, 4))
PostingDate = Replace(PostingDate, Right(PostingDate, 7), _
"/" & Right(PostingDate, 7))
PostDateTextBox.Value = PostingDate
GoTo CheckDone:
End Select
CheckDone:
Case Else
msg = "Please Enter a Date in the correct Date Format:" & vbCr _
& "MM/DD/YYYY Or MM/DD/YY"
PostDateBoolean = False
End Select
PostDateFileName = PostingDate
PostDateFileName = Replace(PostDateFileName, Right(PostDateFileName, 5), _
"-" & Right(PostDateFileName, 4))
PostDateFileName = Replace(PostDateFileName, Right(PostDateFileName, 8), _
"-" & Right(PostDateFileName, 7))
End Function
Nach meiner Linie
PostingDate = Replace(PostingDate, Right(PostingDate, 2), "/20" & Right(PostingDate, 2))
Die Valuta der Buchung geht 071616
-07/2016/2016
. Meine Absicht mit der obigen Codezeile besteht darin, die letzten beiden Ziffern in 071616
zu ersetzen und durch /2016
zu ersetzen. Aus irgendeinem Grund ersetzt es die 4 Ziffern und nicht nur die zwei Ziffern. Ich nehme an, dass das Problem darin besteht, dass im zweiten Parameter für Replace (string1, find, replacement, [start, [count, [compare]]])
[Find as String] alle Werte (16
) in der Zeichenfolge gefunden und durch /2016
ersetzt werden. Gibt es eine bessere Möglichkeit, JUST die letzten zwei Zeichen zu erhalten und sie zu ersetzen, anstatt alle 16's
in der Zeichenfolge?
ich einen völlig anderen Ansatz vorschlagen würde - anstatt zu versuchen, was auch immer Müll landet in dem zu validieren 'TextBox', warum verwenden Sie nicht einfach die 'TextBox'-Ereignisse, um eine Eingabemaske zu erzwingen? – Comintern
'es findet alle Werte (16) in der Zeichenkette und ersetzt sie durch/2016' - ja, das ist genau das, was es tun soll. – GSerg