String 保留前导0';字符串中的s-数字-字符串转换
我正在为工作中的文档跟踪表编写宏。我使用一个按钮提示用户输入文档编号,并希望根据以下编号约定指定一个默认编号。文件编号的前两个字符是后两个年份数字(本例中为15),然后是一个“-”,后面是一个五位数的序列化 我当前的代码查看最后输入的文档,并递增最后5个字符,但删除所有前导零,我希望保留这些前导零。这是生成此默认编号的代码提取(假设变量“prevNCRF”是在文档中找到的上一个文档名): 有人能帮我保存这些零吗?我想我可以包含一个循环,检查字符串的长度并添加一个前导零,直到有5个字符,但也许有更好的方法…使用String 保留前导0';字符串中的s-数字-字符串转换,string,vba,excel,type-conversion,String,Vba,Excel,Type Conversion,我正在为工作中的文档跟踪表编写宏。我使用一个按钮提示用户输入文档编号,并希望根据以下编号约定指定一个默认编号。文件编号的前两个字符是后两个年份数字(本例中为15),然后是一个“-”,后面是一个五位数的序列化 我当前的代码查看最后输入的文档,并递增最后5个字符,但删除所有前导零,我希望保留这些前导零。这是生成此默认编号的代码提取(假设变量“prevNCRF”是在文档中找到的上一个文档名): 有人能帮我保存这些零吗?我想我可以包含一个循环,检查字符串的长度并添加一个前导零,直到有5个字符,但也许有更
Val
将“00100”
转换为双精度,将其转换为100
,因此CStr(100)
将返回“100”
您需要将字符串的格式设置为所需的格式:
defNCRFNum = NCRFNumAr(0) & "-" & Format(Val(NCRFNumAr(1)) + 1, "00000")
如果需要参数化字符串的长度,可以使用string
函数生成格式字符串:
Const digits As Integer = 5
Dim formatString As String
formatString = String(digits, "0")
defNCRFNum = NCRFNumAr(0) & "-" & Format(Val(NCRFNumAr(1)) + 1, formatString)
这就是我上面提到的循环解决方案。如果有人有更好的,我洗耳恭听
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)
将“00100”
转换为一个数字会将其转换为100
。将100
转换为字符串会将其转换为“100”
。是什么让你期待别的?如果你想“00100”
,你需要用零填充字符串。哎呀,谢谢,这真的很有帮助。太好了,这正是我所希望的!
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"))