web-dev-qa-db-fra.com

excel vba sous-routine d'appel avec des variables

J'ai défini le sous-programme suivant:

Sub EnterCellValueMonthNumber(cells As range, number As Integer)

range(cells).Select
ActiveCell.FormulaR1C1 = number

End Sub

Quand j'appelle le sous-programme comme ceci:

EnterCellValueMonthNumber ("N23:Q23",1)

Je reçois le message d'erreur suivant:

Compile error Expected: =

Je ne sais pas pourquoi je reçois ce message. Quelqu'un sait-il ce qui me manque?

30
user366121

Vous appelleriez le sous comme

EnterCellValueMonthNumber "N23:Q23", 1

Pas de parenthèses. Ou

Call EnterCellValueMonthNumber("N23:Q23", 1)

Crochets et Call avant.

De plus, votre Sub attend un objet Range comme premier argument et vous fournissez une chaîne; vous devez changer la signature du sous-marin en:

Sub EnterCellValueMonthNumber(cells As String, number As Integer)

En outre, je ne suis pas sûr de ce que vous essayez de réaliser avec ce code car il ne définira que la cellule supérieure gauche de la plage à 1.

Range(cells).Value = number
' Or, if you're going to be passing in something more complex later...
Range(cells).FormulaR1C1 = number

être plus approprié?

Je serais également très prudent d'utiliser Range("...") sans spécifier à quelle feuille vous faites référence. Cela agira sur la feuille active et peut donc provoquer des problèmes inattendus, préférez presque toujours SheetX.Range("..."). De même pour l'utilisation de .Select, Ce n'est pas nécessaire et ne peut que vous causer des problèmes à l'avenir.

49
Simon Cowen

Vous avez en fait 2 problèmes.

D'abord la réponse réelle à votre question. Vous devez dire:

Call EnterCellValueMonthNumber("N23:Q23",1)

Mais cela ne fonctionnera toujours pas si vous l'exécutez, car vous avez défini cells de type range... définissez-le comme type string en utilisant ceci à la place:

Sub EnterCellValueMonthNumber(cells As String, number As Integer)
    Range(cells).Select
    ActiveCell.FormulaR1C1 = number
End Sub
2
Hari Seldon

Essayez le code suivant:

Sub EnterCellValueMonthNumber(ByVal cells As String, number As Integer)

    Range(cells).Select

    ActiveCell.FormulaR1C1 = number

End Sub
0
Ramakrishnan N