Notifications
Clear all

Erro 1004

7 Posts
2 Usuários
0 Reactions
1,071 Visualizações
(@rodolfon)
Posts: 4
New Member
Topic starter
 

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
(@osvaldomp)
Posts: 858
Prominent Member
 

Experimente no primeiro código substituir esta linha

enderecos = enderecos & Right(enderecos, Len(enderecos) - 1)

por esta

enderecos = Right(enderecos, Len(enderecos) - 1)

Osvaldo

 
Postado : 12/06/2016 8:51 am
(@rodolfon)
Posts: 4
New Member
Topic starter
 

Oi, obrigado pela resposta!
Na verdade eu já tinha consertado isso e coloquei o código aqui sem correção, mesmo assim nada =/

 
Postado : 12/06/2016 9:31 am
(@osvaldomp)
Posts: 858
Prominent Member
 

Testei aqui após corrigir o erro que apontei no seu código e funcionou ;) No entanto o meu Excel pode estar com defeito de fabricação 8-)

Disponibilize uma amostra do seu arquivo com o código que está dando erro instalado.

Osvaldo

 
Postado : 12/06/2016 3:02 pm
(@rodolfon)
Posts: 4
New Member
Topic starter
 

Oi, segue o arquivo de exemplo!
Obrigado

 
Postado : 13/06/2016 11:37 am
(@osvaldomp)
Posts: 858
Prominent Member
 

Veja se ajuda.
O código seleciona as células nas colunas 'C' e 'F' se "B=0,5", conforme o seu código original .

Sub SelecionaCélulas()
 Dim c As Range, R As Range
  For Each c In Range("B4:B" & Cells(Rows.count, 2).End(3).Row)
   If c.Value = 0.5 Then
    If R Is Nothing Then
     Set R = Union(c.Offset(, 1), c.Offset(, 4))
    Else
     Set R = Union(R, c.Offset(, 1), c.Offset(, 4))
    End If
   End If
  Next c
If Not R Is Nothing Then R.Select
End Sub

Osvaldo

 
Postado : 14/06/2016 7:04 am
(@rodolfon)
Posts: 4
New Member
Topic starter
 

Osvaldo, Muitíssimo obrigado!
Me ajudou sim, muito!

Deste jeito consigo fazer a seleção e o gráfico sem dar erro algum!

Muito obrigado pelo suporte!!

 
Postado : 14/06/2016 2:31 pm