Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 保留前导0';字符串中的s-数字-字符串转换_String_Vba_Excel_Type Conversion - Fatal编程技术网

String 保留前导0';字符串中的s-数字-字符串转换

String 保留前导0';字符串中的s-数字-字符串转换,string,vba,excel,type-conversion,String,Vba,Excel,Type Conversion,我正在为工作中的文档跟踪表编写宏。我使用一个按钮提示用户输入文档编号,并希望根据以下编号约定指定一个默认编号。文件编号的前两个字符是后两个年份数字(本例中为15),然后是一个“-”,后面是一个五位数的序列化 我当前的代码查看最后输入的文档,并递增最后5个字符,但删除所有前导零,我希望保留这些前导零。这是生成此默认编号的代码提取(假设变量“prevNCRF”是在文档中找到的上一个文档名): 有人能帮我保存这些零吗?我想我可以包含一个循环,检查字符串的长度并添加一个前导零,直到有5个字符,但也许有更

我正在为工作中的文档跟踪表编写宏。我使用一个按钮提示用户输入文档编号,并希望根据以下编号约定指定一个默认编号。文件编号的前两个字符是后两个年份数字(本例中为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"))