2017-04-17 3 views
1

Excuse manque d'expérience: En VBA, j'ai écrit un sous-programme qui change la valeur d'un argument passé. Il le fait avec succès pour les champs globaux, mais pas lors du passage, par exemple, d'une zone de texte sur un formulaire. Je m'attendrais à ce que la zone de texte change mais ce n'est pas le cas. Ainsi, par exemple (pseudo code):VBA - passer un champ de formulaire à un sous-programme en utilisant ByRef

Public Subroutine ChangeVal (ByRef abcde) 
abcde = abcde * 2 
End Sub 

ChangeVal "txtabcde" 

ne fonctionne pas.

Répondre

0

Votre passage dans une valeur mais Excel ne saura pas que cette valeur appartient à un objet particulier. Pour faire ce que vous voulez faire (en supposant que votre zone de texte est un champ de saisie ActiveX avec un nom de « TextBox1 ») que vous auriez en utilisant quelque chose comme ceci:

Public Sub ChangeVal2(ByRef obj) 
    obj.Value = obj.Value * 2 
End Sub 

Et appelez comme ceci:

ChangeVal2 ActiveSheet.TextBox1