2008-09-24 3 views
1

Je travaille sur une application VB6 et je voudrais envoyer un Type comme référence et le stocker sous une autre forme. Est-ce possible?Est-il possible d'envoyer et de stocker une référence de type dans VB6/VBA?

L'envoyer est pas de problème, je viens d'utiliser le ByRef mot-clé:

public Sub SetStopToEdit(ByRef currentStop As StopType) 

Mais quand je tente d'utiliser Set pour stocker currentStop dans le module de réception je reçois l'erreur « Objet requis » lors de l'exécution du programme :

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

StopType est défini comme suit dans un module (pas un module de classe):

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

Est-il possible de stocker la référence envoyée ou dois-je transformer StopType en classe?

Lors de la configuration à seulement travaux variables locales:

stopToEdit = currentStop 

Lorsque stopToEdit est modifié par la suite le changement ne soit pas visible dans la variable envoyée à SetStopToEdit.

Répondre

2

Vous devez le refactoriser en classe.

1

Qu'est-ce que StopType? Comment est-ce défini? Est-ce qu'un Tapez le truc VB6-Record? Si c'est le cas (et si possible), vous devez le redéfinir en tant que classe - et ne l'utiliser que si vous rencontrez des problèmes avec les collections.

Essayez laissant tomber le Set les mots-clés - Cordes, Entiers et des chiffres, mais si je me souviens bien, aussi Records, ne sont pas Set, ils sont Let, mais qui est implicite dans l'assignement:

stopToEdit = currentStop 

EDIT: Si vous voulez changer l'enregistrement transmis (ByRef), faites un élément manuel pour la copie d'élément au lieu de réaffecter l'ensemble - cela devrait faire l'affaire. En même temps: NE PAS! ByRef (malheureusement en VB par défaut) n'est pas très cool (pour paraphraser mon fils). Essayez de concevoir vos fonctions de façon à ce qu'elles ne modifient pas les arguments passés - c'est pour cela que vous avez une valeur de retour ...

+0

J'ai modifié la question originale avec quelques réponses à vos questions. :-) – Jonas

0

La confusion ici est qu'un StopType n'est pas une référence comme un objet, mais se comporte plutôt comme un type construit tel que LONG. Lorsque vous faites:

stopToEdit = currentStop

Vous ne prenez une copie de currentStop. Si vous changez ensuite stopToEdit, vous devrez recopier:

currentStop = stopToEdit

De cette façon, la valeur sera repassée de la Sous.

Questions connexes