При присвоении переменной VBA меняется тип данных

Присваиваю ячейку из переменной "cell" переменной "prevCellValue" В переменной "prevCellValue" остается значение, но не ссылка на ячейку как было в "cell"

Как при присвоении оставить типы переменных одинаковыми?

VBA CODE


Ответы (2 шт):

Автор решения: Юрий Безруков

Нужно было использовать set для полного копирования

set a = b
→ Ссылка
Автор решения: vikttur

У Вас prevCellValue сначала как значение (сравнивается с константой):

If  prevCellValue <> -111111 Then

потом в переменную пытаетесь передать объект:

prevCellValue = cell

Но объект в переменую передается с помощью оператора Set. А так как переменная до этого содержала значение и нет оператора присваивания, редактор понимает, что в переменную из cell нужно передать значение.

Чтобы подобные ошибки не возникали:

1) сверху модуля, над всеми объявлениями глобальных переменных и процедурами вписать оператор Option Explicit;

2) все переменные должны быть объявлены;

3) объявлять переменные очень желательно с указанием их типов:

Dim SheetOrder As Worksheet
Dim rRangeTime As Range
Dim i As Long

4) перед отладкой (да и в процессе написания кода) компилировать программу (Debug - Compile VBAProject).

Эти нехитрые приемы помогут избежать многих ошибок и сэкономят время при отладке кода.

Попутные замечания.

Переменным желательно давать понятные имена. По имени 'prevCellValue' можно понять, что переменая предназначена для хранения значения ячейки (Value), но никак не самой ячейки как объекта ...

После использования переменных с присвоенными объектами принудительно освобождать память:

Set prevCellValue = Nothing 
→ Ссылка