имя переменной

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Tana_L
Сообщения: 13
Зарегистрирован: 21 май 2009, 12:12

Добрый день! Мне нужно задать переменные a1, a2, ..., a10, но надо, чтобы цифра бралась не явно, а из значения другой переменной, например, t. Я думала вот так:

Код: Выделить всё

for j=1 to 10
     t=cstr(j)
     a&t=cells(1,j)
next

но не получается...
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

И не получится. Так не бывает. Надо испльзовать массив

И можно без циклов обойтись вообще

Dim A as Variant
A=Range("A1:J1").Value

Получится значение типа Variant(1 to 1, 1 to 10)

A(1,1)....A(1,10)

И поверьте, одномерные массивы не будут тут лучше чем VariantArray. Всего-то 10 элементов! Пишите эффективный код.
Tana_L
Сообщения: 13
Зарегистрирован: 21 май 2009, 12:12

Спасибо! Я вариант с массивом пробовала, но при переносе значения "00000018" на другой лист получилось 18. С этим как бороться?
--------------------------------------------------------------------------------
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Тут даже тип Variant не поможет.
Тут надо либо а) предварительно ячейкам присвоить формат (см. свойства NumberFormat и NumberFormatLocal),

Но тут не пройдет такой фокус как с Value. Т.е. нельзя написать
fmt = Range("A2:J2").NumberFormat
т.е. придется еще сделать массив форматов

либо б) пользоваться методом Copy

Range("A1:J1").Copy Range("A4")
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте Tana_L.
в дополнение к сказанному:
если не предполагается дальнейшее участие текстовой строки "00000018" в каких либо операциях, добавьте к ней апостроф - ' ("'" & "00000018").
В документе это не будет заметно '00000018, но избавит Вас от автоматической конвертации формата Excel.
Евгений.
Tana_L
Сообщения: 13
Зарегистрирован: 21 май 2009, 12:12

Супер! Спасибо за ответы! Я недавно занимаюсь программированием на VBA. О многих вещех просто понятия не имею, но радует, что то, что вы мне написали, я и пытаюсь делать:
range("A1:J1).copy
range("A4:J4).select
selection.numberFormat="@"
range("A4:J4).Paste
Оказывается, не нужно форматировать диапазон, в который предполагается скопировать данные, и уж точно не надо этого делать между копированием и вставкой, кроме того. необязательно предварительно выделять диапазон для форматирования. И все это можно записать всего 1 строкой!!! Еще раз спасибо!
Ответить