Страницы: 1
RSS
Как передать в vba диапазон одной ячейки в переменную?
 
Уважаемые форумчане, доброго времени суток.
Подскажите, пожалуйста, почему c диапазоном в одну ячейку код не работает?
Код
Sub test()
Dim Qb As Workbook
Dim Mq()Set Qb = ThisWorkbook
Mq = Qb.Application.Range(Cells(1, 1), Cells(1, 1))
End Sub
Здесь типы получаются разные: range и variant

Код
?typename(Mq)

Variant()
Код
?typename(Qb.Application.Range(Cells(1, 1), Cells(1, 1)))

Range

А когда в диапазоне больше одной ячейки, то код работает:
Код
Sub test1()
Dim Qb As Workbook
Dim Mq()Set Qb = ThisWorkbook
Mq = Qb.Application.Range(Cells(1, 1), Cells(2, 1))
End Sub
Типы остаются без изменений. А ошибки Type mismatch не возникает.
 
замените обьявление
Dim Mg()
на
Dim Mg
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Дополнение.
Типы здесь ни при чем.
Mg() - массив, который по умолчанию не может иметь размерность 1*1
Mg - переменная, которая может быть массивом, но может быть и единичной переменной.
 
Цитата
передать в vba диапазон одной ячейки в переменную?
- если отвечать буквально:
Код
set переменная = диапазонизоднойячейки
 
Ребят, а меня одного смущает строка Qb.Application.Range(Cells(1, 1), Cells(1, 1)), в которой сначала книга указывается, и только потом приложение (которое на фиг не надо)?…
Ну и до кучи Dim Mq()Set Qb = ThisWorkbook вызовет ошибку - двоеточие нужно или перенос строки кода
Цитата
Сергей Деев: диапазон одной ячейки в переменную
Код
Dim cl as Range ' если ячейка нужна как ячейка/диапазон, со всеми свойствами
Dim tmp 'вариативная переменная, если нужно только значение, но непонятно, текст это целое число или десятичное
Set cl=[a1] ' или tmp=[a1].Value или tmp=[a1].Value2 - далее по аналогии
Set cl=Range("A1")
Set cl=Cells(1,1) ' это и верхние возьмёт ячейку "A1" активного листа активной книги. Далее указаны вариантами с полными путями
Set cl=WorkSheets("Лист1").Range("A1")
Set cl=ActiveWorkbook.WorkSheets("Лист1").Range("A1")
Что такое переменная и как правильно её объявить?
Как обратиться к диапазону из VBA?
Изменено: Jack Famous - 02.05.2019 11:18:32
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
vikttur, получается, что ячеек должно быть минимум две?
 
Получается, что нужно понимать, что и для чего нужно.
Если передать значение одной ячейки, достаточно переменной (не массива). Если для чего-то нужен массив:
Код
ReDim Mg(1 To n, 1 To m)
Mg(1, 1) = Cells(1, 1)

где  n, m - размерности массива по вертикали и горизотали.
или
Код
Mg = Range(несколько ячеек).Value


Измените логин. Сергей у нас уже есть.
 
Спасибо.
Страницы: 1
Наверх