web-dev-qa-db-fra.com

Excel VBA appelant sous à partir d'un autre sous avec plusieurs entrées, sorties de différentes tailles

Je voudrais appeler un sous-marin depuis un autre sous-marin du même module. Le premier sous serait mon code principal et j'appellerais le deuxième sous-programme. Le deuxième sous-programme reçoit plusieurs entrées sous forme d’entier, double, double et double matrices. La taille des tableaux et des matrices est connue et stockée dans une variable entière. Le sous renvoie également plusieurs sorties. Donc, je voudrais faire quelque chose comme ça.

sub Main()
    Nc As integer
    Dim kij(1 To Nc, 1 To Nc), xi(1 to Nc), a1 As Double
    'I assign values to my variables from the excelsheet e.g. Nc=Cells(1,1) etc.

    CalculateA(Nc,kij, xi, a1, a)
    Cells(5,5)=a
end sub

sub CalculateA(Nc as integer,kij as matrix double, xi as array double, a as Double)
    a=0
    For i=1 To Nc
       For j=1 To Nc
          a = a + kij(i,j)*x(i)*x(j)
       Next j
    Next i
    a = a*a1
end sub

Comment sait-il quel sous-marin est le sous-marin principal où il commence à fonctionner? Puis-je mettre le sous-secondaire sur le dessus et le code commence en quelque sorte à partir du sous-programme du bas?

21
user2421555

Pour appeler un sous-marin dans un autre sous-marin, il suffit de:

Call Subname()

Donc, là où vous avez CalculateA(Nc,kij, xi, a1, a), vous devez avoir call CalculateA(Nc,kij, xi, a1, a)

En tant que premier problème, c'est à vous de décider, lorsque vous voulez exécuter un sous-marin, vous pouvez aller dans la liste des macros, sélectionner celle que vous voulez exécuter et l'exécuter, vous pouvez également lui attribuer un raccourci clavier. devez appuyer sur ces touches pour l'exécuter. Bien que, sur les sous-marins secondaires, je le fais habituellement en tant que Private sub CalculateA(...), car il n'apparaît pas dans la liste des macros et il est plus facile de travailler

J'espère que ça aide, Bruno

PS: Si vous avez une autre question à poser, mais ce n’est pas une communauté dans laquelle vous demandez du code, vous venez ici avec une question ou un code qui ne fonctionne pas et demandez de l’aide, et non comme vous l’avez fait. être formidable si vous pouviez l’écrire au format Excel VBA. "

38
Newbie

Ce sont vraiment deux questions.

On répond ici au premier: appel d'un sous-marin dans VBA

Pour le second, protip: il n'y a pas de sous-programme principal dans VBA. Oubliez les langages procéduraux à usage général. Les sous-utilisateurs VBA sont des "macros" - vous pouvez les exécuter en appuyant sur Alt + F8 ou en ajoutant un bouton à votre feuille de calcul et en appelant le sous-utilisateur souhaité à partir du sous-bouton "ButtonX_Click" généré automatiquement.

4
Carlos Vieira

Les sous-serveurs VBA ne sont pas des macros. Un sous-VBA peut être une macro, mais ce n’est pas une obligation.

Le terme "macro" est utilisé uniquement pour les actions utilisateur enregistrées. à partir de ces actions, un code est généré et stocké dans un sous-marin. Ce code est simple et ne fournit pas de structures puissantes telles que des boucles, par exemple Do .. jusqu’à, pour .. next, while .. do et d’autres.

La manière la plus élégante est de concevoir et d’écrire votre propre code VBA sans utiliser les fonctions macro!

VBA est un langage orienté objet et événementiel. Les sous-programmes, ou "les sous-programmes", sont lancés par des événements dédiés. L'événement peut être l'appui sur un bouton ou l'ouverture d'un classeur et de nombreux autres événements très spécifiques.

Si vous vous concentrez sur VB6 et non sur VBA, vous pouvez alors affirmer qu'il existe toujours une fenêtre principale ou un formulaire principal. Ce formulaire est démarré si vous démarrez l'exécutable compilé "xxxx.exe".

Dans VBA, vous n’avez rien de tel, mais vous avez un fichier XLSM qui est démarré par Excel. Vous pouvez attacher du code à l'événement Workbook_Open. Cet événement est généré si vous ouvrez le fichier Excel souhaité, appelé classeur. Dans le classeur, vous avez des feuilles de calcul.

Il est utile de se familiariser avec le modèle d'objet d'Excel. Le classeur contient plusieurs événements et méthodes. La feuille de calcul contient également plusieurs événements et méthodes.

Dans le modèle basé sur les objets, vous avez des objets, des événements et des méthodes. les méthodes sont des actions que vous pouvez faire avec un objet. les événements sont des choses qui peuvent arriver à un objet. Un objet peut contenir un autre objet, etc. Vous pouvez créer de nouveaux objets, tels que des feuilles ou des graphiques.

2
user3023996