Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel VBA: Запись в динамический массив одного единственного значения? / 10 сообщений из 10, страница 1 из 1
13.03.2018, 09:05
    #39613906
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA: Запись в динамический массив одного единственного значения?
Здравствуйте.

Не могу понять почему:

Код: vbnet
1.
2.
Dim cRange() As Variant
cRange = Range("A1:A2").Value


Отрабатывает нормально, а

Код: vbnet
1.
2.
Dim cRange() As Variant
cRange = Range("A1:A1").Value



Вываливается с ошибкой "Type mismatch."
Почему в такой массив я не могу записать только одно значение, а диапазон ячеек могу?
...
Рейтинг: 0 / 0
13.03.2018, 09:11
    #39613908
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA: Запись в динамический массив одного единственного значения?
Код: vbnet
1.
2.
3.
4.
Debug.Print TypeName(Range("A1:A1").Value)
Double
Debug.Print TypeName(Range("A1:A2").Value)
Variant()
...
Рейтинг: 0 / 0
13.03.2018, 09:34
    #39613920
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA: Запись в динамический массив одного единственного значения?
Shocker.Pro,

Спасибо за информацию. Полезно.
А как мне теперь его закастовать к типу Variant ?
...
Рейтинг: 0 / 0
13.03.2018, 09:39
    #39613925
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA: Запись в динамический массив одного единственного значения?
Код: vbnet
1.
2.
Debug.Print TypeName(Array(Range("A1:A1").Value))
Variant()
...
Рейтинг: 0 / 0
13.03.2018, 09:48
    #39613928
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA: Запись в динамический массив одного единственного значения?
Shocker.Pro,

Спасибо!
...
Рейтинг: 0 / 0
13.03.2018, 10:15
    #39613946
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA: Запись в динамический массив одного единственного значения?
MAULER,

Можете делать универсально:
Код: vbnet
1.
2.
3.
4.
5.
6.
Dim cRange
cRange = Range("A1:A1").Value
If not isarray(cRange) then
redim cRange(1 to 1, 1 to 1)
cRange(1,1) = Range("A1").Value
end if


В итоге cRange всегда будет двумерным массивом с нижней границей 1 и не будет выдаваться ошибка несовпадения типов, если только одну ячейку записываете.
...
Рейтинг: 0 / 0
13.03.2018, 10:34
    #39613958
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA: Запись в динамический массив одного единственного значения?
The_PristМожете делать универсально
Зачем так сложно?
Код: vbnet
1.
2.
3.
strNeededRange = "A1:A1" ' or "A1:A2"
cRange = Range(strNeededRange).Value
If Not IsArray(cRange) Then cRange = Array(cRange)
...
Рейтинг: 0 / 0
13.03.2018, 13:47
    #39614101
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA: Запись в динамический массив одного единственного значения?
AkinaЗачем так сложно?чтобы массив всегда был двумерный с нижней границей 1. Иногда это очень сильно упрощает дальнейшую работу с массивом(без доп.проверок), если надо будет его обработать и вернуть на место. Взять приведенный Вами код. Если ячейка одна - то такой код отработает без проблем:
Код: vbnet
1.
2.
3.
4.
5.
strNeededRange = "A1:A1" ' or "A1:A2"
cRange = Range(strNeededRange).Value
If Not IsArray(cRange) Then cRange = Array(cRange)
cRange(0) = "34"
Range(strNeededRange).Value = cRange


Но если две и более - то на строке cRange(0) = "34" получим ошибку.
...
Рейтинг: 0 / 0
13.03.2018, 14:20
    #39614133
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA: Запись в динамический массив одного единственного значения?
The_Prist,

Коллеги, спасибо за ценную информацию.
Выкрутился уже.
...
Рейтинг: 0 / 0
14.03.2018, 08:05
    #39614511
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel VBA: Запись в динамический массив одного единственного значения?
The_Pristчтобы массив всегда был двумерный с нижней границей 1.
Да, что-то не сравнил типы... уговорил.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel VBA: Запись в динамический массив одного единственного значения? / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]