Excel的VBA不会保持领先的零

我似乎无法find一种方法来保存我的VBA代码中的前导零。 零是必要的,因为它们对应于唯一的ID。

我已经尝试将数字格式更改为文本和0000 ….在Excel中和我的实际代码中的相同方法:ActiveSheet.Cells(i,j).NumberFormat =“00000”

还有其他build议吗? (如果我手动input这些数字到VBE它也剥离了前导零)。 编辑:

Sheets.Add.Name = "Temp" Sheets("Sheet1").Select ActiveSheet.Cells(2, 2).NumberFormat = "000" cid = Cells(2, 2) MsgBox cid Sheets("Sheet2").Select ActiveSheet.Cells(6, 1).NumberFormat = "00000" sid = Cells(6, 1) Sheets("Temp").Select Url = _ "URL;" & _ "http......asp?" & _ "X1=" & cid & "&" & _ "X2=" & sid & "&" 

这是最终在一个循环内,但我正在debugging作为单独的迭代。

以下所有的讨论都是关于写给单元格的,而不是从单元格中读取的。 更改Numberformat不起作用。 看看你是否可以找出这个代码的工作原理:

 dim v as integer v = val(Sheets("Sheet1").Cells(2, 2)) dim cid as string cid = format(v, "000") 

你不应该使用SelectActiveSheet这样的方式,这是没有必要的; 并且从不使用没有它应该指的表的Cells
(如果单元格实际上已经是数字而不是文本,则Val可以省略)。


较早的答案…:

这段代码对我来说工作得很好

 Worksheets(1).Columns("A").NumberFormat = "@" Worksheets(1).Cells(1, "A").Value = "00023" 

也是

 Worksheets(1).Columns("A").NumberFormat = "000000" Worksheets(1).Cells(1, "A").Value = "0023" 

(这里string被转换成一个数字并用6位数字显示)

编辑:
如果这样做失败 – 尽pipe我不能解释这一点 – 我仍然打赌这个' 真的应该起作用:
(不需要数字格式)

 Dim s As String s = "0002" Worksheets(1).Cells(1, "A").Value = "'" & s 

设置格式为文本或“00000”应该工作。 下面的小片段给出了预期的结果。 第一个存储的值为0001,第二个存储的值为1,格式化为0001。

如果单元格值存储在一个stringvariables中,这也是有效的。

 Sub set_value() Range("A1").NumberFormat = "@" Range("A1").Value2 = "0001" Range("B1").NumberFormat = "0000" Range("B1").Value2 = "1" End Sub