Excel VBA - Use a variável de string como entrada para o Union Method

1

Em algum lugar da Planilha, chamada Planilha 2, tenho o seguinte: Clique para a imagem

Ele usa a função TEXTJOIN para concatenar os valores na coluna A. A string em B100 é a variável S (veja o código).

Estou tentando usar isso como entrada para um método na minha macro. Segue-se um fragmento de código do Módulo:

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 são calculados no código e são os seguintes intervalos:

C0= C7:C310
C1= D7:D310

Quando o código acima é executado, um erro é produzido na linha Set WholeRange = Union(S) com "Compile error: Type Mismatch"

Eu tentei Set WholeRange = Union(C0, C1) , que funciona com sucesso, mas não quero usar isso, pois há mais variáveis que podem ser escolhidas.

Minha pergunta é por que a string pode ser passada como um parâmetro e como posso corrigir o problema?

N.B: tenho mais de dois intervalos no código que não são mostrados aqui. O script decide quais intervalos usar. Como mais de dois intervalos precisam ser inseridos, estou usando o método Union em vez do método Range

    
por Kavinda JD 15.08.2018 / 17:31

1 resposta

0

Portanto, S é uma string e mesmo que seja como se estivesse especificando um Range, Union() requer um Range object , e é por isso que você está recebendo um erro de incompatibilidade de tipos. Você está passando o tipo errado.

Assim, enquanto o valor de S especificar um intervalo adequado, tente algo como:

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
    
por 22.08.2018 / 15:52