Galera, boa noite, tudo bem com vocês?
Se alguém puder me dar uma força eu agradeceria muito!
Estou desenvolvendo uma macro bem simples em que filtrará o conteúdo de algumas colunas, obterá o endereço das células desejadas, selecionará tais células e depois plotará isso em um gráfico!
Na verdade, a macro final será um pouco mais complexa, mas estou desenvolvendo esta inicialmente para depois aperfeiçoar o processo, pois bem:
Inicialmente tenho alguns dados de que vão de B4 até alguma coisa, Tenho que verificar quais células nesse intervalo tem um valor (no exemplo estou usando 0,5), quando tiver esse endereço, armazeno os pares ordenadas Bi, Ci, sendo i o número da linha em que estou! Tudo funciona beleza na obtenção dos endereços, o problema é pra selecionar o Range!
Vou postar a parte do código aqui para ficar mais fácil o entendimento:
Sub Teste()
'Declaração de variáveis
Dim celula As Range
Dim minvalue As Double
Dim enderecos As String
Dim enderecosunion As String
'Determinação do valor das variáveis
minvalue = 0.5
'Verificacao dos Filtros e obtenção dos endereços
For Each celula In Range("B4:" & ActiveSheet.Range("B65536").End(xlUp).Address).Cells
If celula.Value = minvalue Then
enderecos = enderecos & "," & celula.Offset(0,1).Address(False, False) & _
"," & celula.Offset(0, 4).Address(False, False)
End If
Next
enderecos = enderecos & Right(enderecos, Len(enderecos) - 1)
Range(enderecos).Select
End Sub
Tudo funciona okay, porém, na hora de selecionar as células obtidas, eu recebo o seguinte erro:
Erro em tempo de execução '1004':
O método 'Range' do objeto '_Global' falhou
Pensei:
Deve ser porque tem muitos endereços no Range e ele deve estar 'estourando', então vou fazer por Union, assim os endereços ficam 'formatados e menores' e não terei esse problema, criei o seguinte código:
Define as variaveis auxiliares de contagem
first = True
count = 1
For Each celula In Range("B4:" & ActiveSheet.Range("B65536").End(xlUp).Address).Cells
If celula.Value = minvalue Then
enderecos = enderecos & "," & celula.Offset(0,1).Address(False, False) & _
"," & celula.Offset(0, 4).Address(False, False)
count = count + 1
'Divide o Range em intervalos de 9 pares ordenadas por limitação do VBA
If count = 9 Then
If first Then
enderecosunion = Right(enderecos, Len(enderecos) - 1)
first = False
Else
enderecosunion = Union(Range(enderecosunion), Range(Right(enderecos, Len(enderecos) - 1))).Address
End If
enderecos = ""
count = 1
End If
End If
Next
enderecosunion = Union(Range(enderecosunion), Range(Right(enderecos, Len(enderecos) - 1))).Address
Range(enderecosunion).Select
Os endereços ficam bonitinhos, 'formatados', porém, na parte do Select apenas uma das colunas é selecionada e o principal problema: eu perco os pares ordenadas x, y, então dá erro no gráfico!
Portanto, tenho que fazer a seleção do primeiro jeito mesmo, mas pra isso, preciso dar um jeito de acabar com esse erro 1004, alguém tem alguma ideia de como fazer isso?
Muito obrigado desde já!
Postado : 12/06/2016 8:30 am