2013-07-07 2 views
1

Я знаю, что есть тонны нитей и вопросов об этом, и это довольно очевидно, как правило, где ошибка. Большинство людей не используют ключевое слово SET при перемещении объектов. Я.Получение «Недопустимое использование свойства» при использовании набора свойств в VBA

Вот что происходит:

Это в листе первенствовать поэтому я сделал небольшой набор функций для отслеживания столбцов и сделать индекс, так что каждый раз, когда приложение запускается он будет индексировать столбцы поэтому я могу делать такие вещи, как .Cells(row_num, pCust_index("custID")) в случае изменения столбца.

У меня есть форма под названием custContagions. Это просто небольшое модальное окно, которое позволяет пользователям добавлять/удалять/редактировать заражающий статус клиента. Он содержит свойство:

Private pCust_index as dictionary 

Он также содержит это свойство сеттер:

Public Property Set set_cust_index(ByRef custIndex As Dictionary) 
    Set pCust_index = New Dictionary 
    Set pcust_index = custIndex 
End Property 

Довольно прямо вперед правильно? Принимает объект словаря, сбрасывает мой индекс и указывает на существующий переданный объект.

Теперь на форме вызова у меня есть другая сторона:

Private Sub newCustContagious_LBL_Click() 
    Dim contForm as New custContagions 
     Call contForm.set_cust_index(pCust_index) 'note pCust_index is a private here too 
     Call contForm.Show 
... 

Я получаю Недопустимое использование ошибок компилятора свойств при вызове set_cust_index.

Что я пропустил?

ответ

2

Большинство людей не используют набор ключевых слов при перемещении объектов вокруг

Тогда они не движущихся объектов вокруг. Ключевое слово Set - это способ перемещения объекта вокруг.
Существует также CopyMemory, чтобы непосредственно скопировать ObjPtr, но я не считаю, что большинство людей это делают.

Довольно прямо вправо?

Не совсем. Вы создаете словарь, немедленно отбрасываете его и заменяете другим словарем, переданным в качестве параметра. Вы должны удалить первый из двух линий, и сделать из параметров ByVal:

Public Property Set set_cust_index(ByVal custIndex As Dictionary) 
    Set pcust_index = custIndex 
End Property 

Я получаю Недопустимое использование ошибок компилятора свойств

Вы объявили свойство, а затем использовать его как под. С собственностью, вы должны сделать:

Set contForm.set_cust_index = pCust_index 

В этот момент имя set_cust_index не выглядит большим. Это сделало бы разумное имя для sub (Public Sub set_cust_index(ByVal custIndex As Dictionary)), но для имущества вам было бы лучше с Public Property Set cust_index(ByVal custIndex As Dictionary).

+0

@ словарь, отбрасывающий, то есть намеренный очистить существующий, я полагаю, что установка в NULL или NOTHING была бы лучшим выбором. Я вижу, что происходит сейчас, я думаю. Я привык к PHP, в котором я делаю функцию, у кого есть работа, она должна быть набором/get, а не отдельным ароматом sub. Попробуй это сейчас. – meteorainer

+1

@meteorainer Тот факт, что вы назначаете объектную переменную чему-то еще, уже очищает ссылку на предыдущий объект. Если ссылок на этот объект больше нет, он будет уничтожен. Если есть другие ссылки на этот объект, он не будет уничтожен независимо от того, установите ли вы какую-либо другую переменную. – GSerg

+0

Работал как шарм. +1 к вам. Пометка как решение моего отсутствия надлежащего управления классами. Благодаря! – meteorainer

Смежные вопросы