Excel VBA не будет держать ведущие нули

Я не могу найти способ сохранить ведущие нули в моем коде VBA. Нули необходимы, поскольку они соответствуют уникальным идентификаторам.

Я попытался изменить формат чисел на text и 0000.... в excel и тот же подход в моем фактическом коде: Параметру activesheet.Ячейки (i, j).NumberFormat = "00000"

какие-то другие предложения? (Если я вручную набираю эти числа в VBE, он также удаляет ведущие нули). EDIT:

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 & "&"

Это внутри цикла в конечном счете, но я отлаживаю как отдельные итерации.

2 ответов


все дискуссии были о писать в ячейку, не считывая с нее. Изменение Numberformat не работает таким образом. Посмотрите, можете ли вы понять, как работает этот код:

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

вы никогда не должны использовать Select и ActiveSheet таким образом, это не обязательно; и никогда не используйте 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"

(здесь строка преобразуется в число и отображается 6 цифр)

EDIT:
Если это не удастся - хотя я не мог этого объяснить - я все равно держу пари, что ' должны действительно работы:
(Не требуется numberformat.)

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

установка формата в текст или "00000" должна работать. Небольшой фрагмент ниже дает ожидаемые результаты. С первым хранением значения 0001 и вторым хранением значения 1, которое отформатировано так, чтобы выглядеть как 0001.

Это также работает, если значение ячейки хранится в строковой переменной.

Sub set_value()

Range("A1").NumberFormat = "@"
Range("A1").Value2 = "0001"

Range("B1").NumberFormat = "0000"
Range("B1").Value2 = "1"

End Sub