2014-10-13 5 views
0

Я пытаюсь вставить ссылочный номер в ячейку в excel с помощью vba. Я хочу, чтобы префикс текст «V0000», а затем авто увеличивается число, начиная с 836.vba auto увеличивает число?

so for each row that gets inserted I will have V0000836 
Then V0000837 
etc 

Большая часть моего кода создает новые строки данных и вставляет в нее автоматически один за другим, но вместо того, отправляя весь мой код, я просто хочу сосредоточиться на этой одной строке кода, которая вставляет значение в столбец AA моей таблицы. Я использую следующее, но он просто дает мне V00001 каждый раз. может кто-нибудь показать мне, как я могу заставить мой код делать то, что я хочу.

ws2.Range("AA" & DestRow).Value = "V0000836" & Value + 1 

ответ

-1

Используя VBA, вы можете сделать это путем увеличения числа каждый раз, когда цикл проходит круглый, а затем предварив V0000 на фронт, как так:

Dim i As Integer 
Dim cell As Range, rng As Range 

Set rng = Range("A1:A10") 

i = 836 

For Each cell In rng 
    cell.Value = "V000" & i 
    i = i + 1 
Next cell 
+0

это, похоже, не работает, всегда дает тот же результат V0000836 –

+0

Просто протестировал его и отлично работает для меня? – Gareth

+0

У этого всегда будет префикс «V000», что неверно, поскольку, если у вас есть десятки, сотни, тысячи, у вас всегда будет этот префикс. например. «V0009», «V00099», «V000999», поскольку «i» равно 9, 99 и 999 соответственно –

1

Рассмотрим альтернативу, которая не удаляет числовая (математической) функциональности из значения ячейки.

ws2.Range("AA" & DestRow).numberformat = "\V0000000" 
ws2.Range("AA" & DestRow).Value = 836 + 1 

Если вам требуется форматированный (отображается) буквенно-цифровые обозначения вы можете восстановить его, как это.

Dim str as string, num as long 
str = ws2.Range("AA" & DestRow).text '◄ V0000837 
num = ws2.Range("AA" & DestRow).value '◄ 837 
+0

++, это путь, но будьте осторожны с использованием '.Text', как если бы ширина столбца была довольно небольшой и текст фактически отображает '###', то это значение '.Text' будет возвращать' ### ', что может не всегда быть тем, что ожидается. Возможно, лучшей альтернативой возврату форматированного значения будет «Формат (ws2.Range (« AA »& DestRow) .Value,« \ V0000000 »)' –

+0

@Jeeped Спасибо за это, но он не совсем делает то, что мне нужно, он добавляет от 1 до V0000836, что делает его V0000837, но когда я запускаю свой код и создаю новую строку, число остается таким же, как V0000837, и я хочу, чтобы он доходил до V0000838 и 839 и т. д. для каждой новой строки –

+0

@liam spence - Попробуйте 'ws2.Range (" AA "& DestRow) = ws2.Range (" AA "и DestRow) .offset (-1, 0) + 1'. Существует несколько способов увеличить число, когда вы имеете дело с истинными числами. – Jeeped

Смежные вопросы