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

Kavinda JD
la source
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
Yorik
la source