Excel VBA: utilizzare la variabile stringa come input per il metodo Union


1

Da qualche parte nel Foglio chiamato Foglio 2 ho il seguente: Clicca per l'immagine

Utilizza la funzione TEXTJOIN per concatenare i valori nella colonna A. La stringa in B100 è la variabile S (vedi il codice).

Sto tentando di utilizzare questo come input per un metodo nella mia macro. Di seguito è riportato uno snippet di codice dal modulo:

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 e C1 sono calcolati nel codice e sono i seguenti intervalli:

C0= C7:C310
C1= D7:D310

Quando viene eseguito il codice precedente, viene generato un errore sulla riga Set WholeRange = Union(S)con "Errore di compilazione: tipo non corrispondente"

Ho provato Set WholeRange = Union(C0, C1)quale funziona con successo, ma non voglio usarlo perché in realtà ci sono più variabili che possono essere scelte.

La mia domanda è: perché la stringa può essere passata come parametro e come posso correggere il problema?

NB: Ho più di 2 intervalli nel codice che non è mostrato qui. Lo script decide quali intervalli utilizzare. Poiché è necessario immettere più di 2 intervalli, sto usando il Unionmetodo anziché il Rangemetodo


L'Unione non richiede un intervallo? È Suna stringa? Cosa succede se lo usi Union(INDIRECT(S))?
Yorik,

@Yorik, INDIRECTè una funzione del foglio di lavoro. Penso che intendevi usare RANGE(S).
Rey Juna,

@ReyJuna Ho dimenticato di aggiungere questo alla domanda, ma ho calcolato più intervalli (4+). I due precedenti erano solo esempi, quindi l'utilizzo di Range non funzionerà poiché ho più di 2 parametri di input. La mia domanda originale è stata modificata.
Kavinda JD,

Stai utilizzando Suna stringa per rappresentare i nomi delle variabili. UNIONrichiede almeno due argomenti di intervallo.
Rey Juna,

L'output di quanto sopra mostra che il valore di Sè C0,C1- due argomenti. Il problema è che pensa che sia solo un argomento.
Kavinda JD,

Risposte:


0

Quindi Sè una stringa e anche se legge come se stesse specificando un intervallo, Union()richiede un oggetto intervallo , motivo per cui stai ricevendo un errore di mancata corrispondenza del tipo. Stai passando il tipo sbagliato.

Fintanto che il valore di Sspecifica un intervallo corretto, prova qualcosa del tipo:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.