我有一个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