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

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

Код: 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
Excel VBA: Запись в динамический массив одного единственного значения?
    #39613908
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
Debug.Print TypeName(Range("A1:A1").Value)
Double
Debug.Print TypeName(Range("A1:A2").Value)
Variant()
...
Рейтинг: 0 / 0
Excel VBA: Запись в динамический массив одного единственного значения?
    #39613920
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

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

Спасибо!
...
Рейтинг: 0 / 0
Excel VBA: Запись в динамический массив одного единственного значения?
    #39613946
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Excel VBA: Запись в динамический массив одного единственного значения?
    #39613958
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Excel VBA: Запись в динамический массив одного единственного значения?
    #39614101
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Excel VBA: Запись в динамический массив одного единственного значения?
    #39614133
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist,

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


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