2015-07-27 1 views
0

я не могу показаться, чтобы найти причину такого поведения ...VBA инстанцировании второй из двух классов в форме пользователя триггеров прекращается первого класса

У меня есть форма пользователя, где я два класса создание экземпляра I» созданный, который будет застрелен в коллекцию. Когда вы переходите, когда код попадает на Initialize sub второго класса, первый класс завершается. Это происходит внутри формы Initialize. Вот несколько примеров кода:

Private ClaimData As ClaimDataCls 'Class 1 
Private Claims As Collection 

Public Sub UserForm_Initialize 
    Set ClaimData = New ClaimDataCls 'Class 1 initialization 
    Set Claims = New Collection 
    Dim Counter As Integer 
    Dim Claim As ClaimsCls 'Class 2 
    For Counter = 1 to 10 
     Set Claim = New ClaimsCls '<-- Here is where Class 1 hits terminate 
     'Put Data into Claim 
     Claims.Add Claim 
    Next Counter 

Я не призываю прекратить, и я не вижу, как мой исходный класс выходит за рамки здесь. Так в чем заключена сделка?

EDIT: Итак, я понял это и разместил ответ ниже, чтобы закрыть вопрос. С моей стороны это беспорядок, и вы можете прочитать подробности ниже.

+0

Я попытался воссоздать поведение, используя данный код, и 2 класса с ничего, кроме «Debug.Print» Class1 Init »и аналогичных операторов в подсистемах' initalize' и 'terminate'. Можете ли вы разместить свой 'Class_Terminate()' sub для 'ClaimsCls' (класс 2)? – Evan

+0

В коде нет ничего, что могло бы объяснить поведение, которое вы видите, поэтому, вероятно, есть какой-то другой код где-то еще, что является причиной ... –

+0

Я понял это. Это была странная ошибка. Это была совершенно несвязанная ошибка, и я думаю, что VBA просто завершает все существующие экземпляры класса, прежде чем появляться сообщение об ошибке в этом случае, которое я считал немного странным. Но это был хороший опыт обучения. – MattB

ответ

0

Решение здесь заключалось в том, что исключение происходило в инициализационной части пользовательской формы, которую я использовал. Итак, вот кнопка потока -> a на электронной таблице содержит одну строку кода для отображения формы пользователя -> инициализация формы пользователя, и я инициализирую класс, в котором возникла проблема, -> в пользовательской форме инициализируется ошибка (I попытался установить свойство неинициализированного объекта в инициализации sub) -> перед отображением ошибки VBA, по-видимому, вызовы завершаются в файле класса, который я создавал.

Это было в значительной степени. Я думаю, что это была просто уникальная комбинация событий, которые приводят к представлению о нечетной ошибке. Я бы удалил вопрос, потому что это был не тот вопрос, который я бы назвал «справедливым», но в какой-то момент может оказаться полезным, если они столкнутся с одним и тем же.