Notifications
Clear all

SOMASE não busca os intervalos corretos em VBA.

6 Posts
2 Usuários
0 Reactions
1,575 Visualizações
(@hudson)
Posts: 12
Active Member
Topic starter
 

Boa noite.
Tenho uma macro que transfere os nomes de clientes que estão na primeira "Worksheet" para a coluna A da ultima "Worksheet" sem duplicatas, para depois fazer um SOMASE na coluna B dessa ultima "Worksheet" calculando a soma de cada cliente. Eu me refiro as planilhas como primeira e ultima "Worksheet" pois é uma pasta de trabalho que extraio de um sistema e o nome da planilha é sempre diferente a cada vez que eu a extraio. Então o problema do meu código é esse: não sei como declarar os nomes das "sheets" (já que sempre serão nomes diferentes) para inseri-los na fórmula SOMASE.

Segue o código:

Dim i As Integer
Dim Linha As Integer
Dim ws As String
    Linha = Range("A" & Rows.Count).End(xlUp).Row
    ws = Worksheets(1)
    For i = 2 To Linha Step 1
    Range("B" & i).FormulaLocal = "=SOMASE(" & ws & "AI:AI;" & "A" & i & ";" & ws & "U:U)"
    Next i

A macro acaba resultando esta fórmula:

=SOMASE(AI:AI;A2;U:U)

Quando era pra ficar assim:

=SOMASE(nome_da_plan1!AI:AI;A2;nome_da_plan1!U:U)

Espero ter usado os termos certos para a minha explicação. Comecei com VBA em excel a pouco tempo então... queria pedir a ajuda dos colegas aqui do fórum para corrigir o código.

 
Postado : 16/12/2013 10:12 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

experimente alterando as seguintes linhas

ws=worksheets(1).name

e

    Range("B" & i).FormulaLocal = "=SOMASE(" & ws & "!AI:AI;" & "A" & i & ";" & ws & "!U:U)"
 
Postado : 17/12/2013 5:13 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

experimente alterando as seguintes linhas

ws=worksheets(1).name

e

    Range("B" & i).FormulaLocal = "=SOMASE(" & ws & "!AI:AI;" & "A" & i & ";" & ws & "!U:U)"

a solução proposta pelo Reinaldo é boa, mas eu ainda acrescentaria algo:
aonde le-se:

    Range("B" & i).FormulaLocal = "=SOMASE(" & ws & "!AI:AI;" & "A" & i & ";" & ws & "!U:U)"

trocar para

    Range("B" & i).FormulaLocal = "=SOMASE('" & ws & "'!AI:AI;" & "A" & i & ";'" & ws & "'!U:U)"

Perceba o uso do apóstrofo antes e depois do nome da planilha.
E mais, arrisco dizer que não seria mais correto colocar também o nome da planilha, no argumento do critério?
Ficaria assim:

    Range("B" & i).FormulaLocal = "=SOMASE('" & ws & "'!AI:AI;'" & ws  & "'!A" & i & ";'" & ws & "'!U:U)"
 
Postado : 17/12/2013 9:12 am
(@hudson)
Posts: 12
Active Member
Topic starter
 

Muito obrigado Reinaldo e Fernando, ficou bem claro pra mim agora. Todas as maneiras que você propuseram funcionaram perfeitamente.
Abraço!!

 
Postado : 17/12/2013 10:33 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

maravilha!

mas insisto, use o método com apóstrofe, pois se não tiver apóstrofo, planilhas com mais de uma palavra no nome vão dar pau no código, ou seja:

se as planilhas todas tiverem uma palavra só, tudo bem não usar o apóstrofe, MAS, se foram duas ou mais palavras, ou seja, com um ou mais espaços no nome, o método sem apóstrofos vai falhar.

Abraço!

FF

 
Postado : 17/12/2013 11:26 am
(@hudson)
Posts: 12
Active Member
Topic starter
 

Verdade Fernando. Testei um nome com duas palavras e realmente falhou.
Ótima dica.

Abraço!!

 
Postado : 17/12/2013 6:24 pm