在string – 数字 – string转换中保留前导0

我正在研究工作中的文档跟踪表的macros。 我使用一个提示用户input文档编号的button,我想根据以下编号约定指定一个默认编号。 文件编号的前两个字符是后两年的数字(在这种情况下是15),然后是一个“ – ”,然后是五位数的序列号。

我目前的代码查看最后input的文档,并递增最后5个字符,但是会截掉任何我想保留的前导零。 这是提取代码以生成此默认编号(假设variables“prevNCRF”是在文档中find的以前的文档名称):

Sub codeChunkTester() Dim prevNCRF, defNCRFNum As String Dim NCRFNumAr() As String 'pretend like we found this in the sheet. prevNCRF = "15-00100" 'split the string into "15" and "00100" and throw those into an array. NCRFNumAr() = Split(prevNCRF, "-") 'reconstruct the number by reusing the first part and dash, then converting 'the "00100" to a number with Val(), adding 1, then back to a string with CStr(). defNCRFNum = NCRFNumAr(0) & "-" & CStr(Val(NCRFNumAr(1)) + 1) 'message box shows "15-101" rather than "15-00101" as I had hoped. MsgBox (defNCRFNum) End Sub 

那么任何人都可以帮助我保持这些零值? 我想我可以包括一个循环,检查string的长度,并添加一个前导零,直到有5个字符,但也许有更好的办法…

"00100"转换为使用ValDouble将其转换为100 ,因此CStr(100)应该返回"100"

你需要格式化string到你想要的样子:

 defNCRFNum = NCRFNumAr(0) & "-" & Format(Val(NCRFNumAr(1)) + 1, "00000") 

如果需要参数化string的长度,可以使用String函数来生成格式string:

 Const digits As Integer = 5 Dim formatString As String formatString = String(digits, "0") defNCRFNum = NCRFNumAr(0) & "-" & Format(Val(NCRFNumAr(1)) + 1, formatString) 

这是我上面提到的循环解决scheme。 如果任何人有更好的东西,我都耳朵!

 prevNCRF = "15-00100" NCRFNumAr() = Split(prevNCRF, "-") zeroAdder = CStr(Val(NCRFNumAr(1)) + 1) 'loop: everytime the zeroAdder string is not 5 characters long, 'put a zero in front of it. Do Until Len(zeroAdder) = 5 zeroAdder = "0" & zeroAdder Loop defNCRFNum = NCRFNumAr(0) & "-" & zeroAdder MsgBox (defNCRFNum) 
 defNCRFNum = NCRFNumAr(0) & "-" & Format(CStr(Val(NCRFNumAr(1)) + 1), String(Len(NCRFNumAr(1)), "0"))