我有一個UserForm
,其中包含一系列CheckBoxes
,TextBoxes
和Buttons
。一個TextBox
詢問用戶特定的日期,一旦點擊了OKButton
,它將檢查用戶的日期格式。我使用了一個Select/Case
檢查不同的格式的用戶輸入,並將其轉換爲特定格式的文件名目的(本宏接受用戶選擇的文件路徑,並生成報告,將其保存爲[MM-DD-YY] Balance Report.xlsx
)爲什麼我的Replace()方法無法正常工作?
我選擇用戶輸入格式爲MMDDYYYY,MMDDYY,MM/DD/YYYY,MM/DD/YY,MM-DD-YYYY,MM-DD-YYYY的情況檢查。
的代碼如下:
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
我行
PostingDate = Replace(PostingDate, Right(PostingDate, 2), "/20" & Right(PostingDate, 2))
發佈日期的價值遠遠從071616
到07/2016/2016
後。上述代碼行的意圖是替換071616
中的最後兩位數字,並用/2016
代替它。出於某種原因,它將取代4位數字而不是兩位數字。我認爲這個問題是在Replace (string1, find, replacement, [start, [count, [compare]]])
[查找爲字符串]的第二個參數中,它查找字符串中的所有值(16
),並用/2016
替換它。有沒有更好的方法來獲得最後兩個字符並替換它們,而不是字符串中的所有16's
?
我建議一個完全不同的方式 - 而不是試圖驗證任何垃圾在結束了'TextBox',爲什麼不使用'TextBox'事件來強制輸入掩碼? – Comintern
'它找到字符串中的所有值(16)並用/ 2016替換它 - - 是的,這正是它應該做的。 – GSerg