Excel VBA - Utiliser une variable de chaîne en tant qu'entrée dans la méthode Union


1

Quelque part dans la feuille appelée feuille 2, j'ai les éléments suivants: Cliquez pour l'image

Il utilise la fonction TEXTJOIN pour concaténer les valeurs de la colonne A. La chaîne dans B100 est la variable S (voir le code).

J'essaie de l'utiliser comme entrée d'une méthode dans ma macro. Ce qui suit est un extrait de code du module:

Dim ListofSheets, WorkingSheet As Worksheet 
Dim C0, C1 As Range   
Dim S As String
Dim WholeRange As Range

Set ListofSheets = Sheets("Sheet2")
...

Set C0 = WorkingSheet.Range(PanelColumn & StartingRow & ":" & PanelColumn & lRow)
Set C1 = WorkingSheet.Range(LoadCaseColumn & StartingRow & ":" & LoadCaseColumn & lRow)

S = ListofSheets.Cells(100, 2).Value

Set WholeRange = Union(S)
    WholeRange.Copy

End Sub

C0 et C1 sont calculés dans le code et correspondent aux plages suivantes:

C0= C7:C310
C1= D7:D310

Lorsque le code ci-dessus est exécuté, une erreur est générée sur la ligne. Set WholeRange = Union(S) avec "Erreur de compilation: incompatibilité de type"

j'ai essayé Set WholeRange = Union(C0, C1) qui fonctionne avec succès, mais je ne veux pas l'utiliser car il y a en fait plus de variables qui peuvent être choisies.

Ma question est la suivante: pourquoi la chaîne peut-elle être passée en tant que paramètre et comment puis-je résoudre le problème?

NB: J'ai plus de 2 plages dans le code qui ne sont pas montrées ici. Le script décide quelles plages utiliser. Étant donné que plus de 2 plages doivent être entrées, j’utilise la Union méthode au lieu de Range méthode


L'Union n'a-t-elle pas besoin d'une portée? Est S un string? Qu'est-ce qui se passe si vous utilisez Union(INDIRECT(S))?
— Yorik

@Yorik, INDIRECT est une fonction de feuille de calcul. Je pense que vous vouliez utiliser RANGE(S).
— Rey Juna

@ReyJuna J'ai oublié d'ajouter ceci à la question, mais j'ai plusieurs plages (4+) en cours de calcul. Les deux précédentes ne sont que des exemples. Donc, utiliser Range ne fonctionnera pas, car j’ai plus de 2 paramètres d’entrée. Ma question initiale a été modifiée.
— Kavinda JD

Vous utilisez S, une chaîne de caractères, pour représenter les noms de variables. UNION nécessite au moins deux arguments de plage.
— Rey Juna

La sortie de ce qui précède montre que la valeur de S est C0,C1 - deux arguments. Le problème est, il pense que ce n'est qu'un argument.
— Kavinda JD

Réponses:


0

Alors S est une chaîne et même s'il se lit comme s'il spécifiait une plage, Union() nécessite une gamme objet , c'est pourquoi vous obtenez une erreur d'incompatibilité de type. Vous passez le mauvais type.

Donc, tant que la valeur de S spécifie une plage appropriée, essayez quelque chose comme:

Dim UnionRange as Range 'declare at top
...
Set UnionRange= WorkingSheet.Range(S) 'insert this after S is assigned
...
Set WholeRange = Union(UnionRange) 'change the range assignment to this
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.