Можно ли отправить и сохранить ссылку на тип в VB6 / VBA? - PullRequest
1 голос
/ 24 сентября 2008

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

Отправка не является проблемой, я просто использую ключевое слово ByRef:

public Sub SetStopToEdit(ByRef currentStop As StopType)

Но когда я пытаюсь использовать Set to store currentStop в принимающем модуле, я получаю ошибку «Требуется объект» при запуске программы:

Private stopToEdit As StopTypeModule.StopType
' ... Lots of code
Set stopToEdit = currentStop

StopType определяется в модуле следующим образом ( не модуль класса ):

Public Type StopType
    MachineName As String
    StartDate As Date
    StartTime As String
    Duration As Double
End Type

Можно ли сохранить отправленную ссылку или мне нужно превратить StopType в класс?

Пока работает только установка локальной переменной:

stopToEdit = currentStop

Когда позднее изменяется stopToEdit, изменение не отображается в переменной, отправленной на SetStopToEdit.

Ответы [ 3 ]

2 голосов
/ 24 сентября 2008

Вы должны преобразовать его в класс.

1 голос
/ 24 сентября 2008

Что такое StopType? Как это определяется? Является ли Type материалом VB6-Record? Если это так (и если возможно), вам следует переопределить его как класс - и использовать только те, которые в противном случае могут столкнуться с проблемами с коллекциями.

Попробуйте опустить ключевое слово Set - строки, целые числа и числа, но если я правильно помню, записи также не установлены , они позволяют , но это неявно в назначении:

stopToEdit = currentStop

РЕДАКТИРОВАТЬ : Если вы хотите изменить переданную запись (ByRef), используйте ручной элемент для копирования элемента вместо переназначения целиком - это должно помочь.

В то же время: НЕ ! ByRef (к сожалению, в VB по умолчанию) не очень круто (перефразируя моего сына). Попытайтесь спроектировать свои функции так, чтобы они не меняли передаваемые аргументы - это то, для чего у вас есть возвращаемое значение ...

0 голосов
/ 29 сентября 2008

Путаница здесь в том, что StopType не является ссылкой как объект, но ведет себя больше как встроенный тип, такой как LONG. Когда вы делаете:

stopToEdit = currentStop

Вы берете только копию currentStop. Если вы впоследствии измените stopToEdit, вам нужно скопировать его обратно:

currentStop = stopToEdit

Таким образом, значение будет передано обратно из Sub.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...