Notifications
Clear all

erro no código macro

10 Posts
4 Usuários
0 Reactions
1,738 Visualizações
(@kayomaster)
Posts: 0
New Member
Topic starter
 

oi gente denovo, recentemente eu havia pedido ajuda na alteracao no codigo de uma macro que o klarc28 ajudou, quando eu fiz os testes iniciais deu tudo ok.
mas agora depois que eu terminei de por todos os codigos nas colunas quando aperto o botao "lançar pontos" não esta mais indo. ele buga. se possivel alguem me disser o porque do erro possa me ajudar.

no caso o codigo copia as as colunas

Set sRgColunas = ShtCONSOLIDADO.Range("C" & sRow & ", I" & sRow & ",M" & sRow & ", O" & sRow & ",R" & sRow & ", T" & sRow & ",V" & sRow)

e cola cada uma em sua planilha separada, só irá copiar valores diferentes de zero podendo ser negativo ou positivo de cada coluna quando houver dados.

Sub Copy_Consolidado()
    Dim Linha As Long
    Dim sLinSheets As Long
    Dim sRG As Range
    Dim sCodigo
    Dim sRow As Long
    Dim sSht As Worksheet
    Dim ShtCONSOLIDADO As Worksheet
    Dim sRgColunas
    Dim sRotulo
    Dim iLinRotulo
    Dim Col As String
    
    Dim wb As Workbook
    Set wb = ThisWorkbook
    
    Set ShtCONSOLIDADO = wb.Sheets("CONSOLIDADO")
    
    Linha = ShtCONSOLIDADO.Range("A2").End(xlDown).Row
    
    Set sRG = ShtCONSOLIDADO.Range("A4:" & "A" & Linha)
    
        For Each x In sRG
            sRow = x.Row

            Set sRgColunas = ShtCONSOLIDADO.Range("C" & sRow & ", I" & sRow & ",M" & sRow & ", O" & sRow & ",R" & sRow & ", T" & sRow & ",V" & sRow)
                
                For Each i In sRgColunas
                    iLinRotulo = 2 'Linha do Cabeçalho
                    
                    'Verificamos se o avlor é nulo
                    If i.Value <> "" Then
                        'Montamos a Letra das Colunas
                        Col = Split(i.Address(1, 0), "$")(0)
                        
                        'Linha dos Rotulos (Cabeçalho)
                        sRotulo = Range(Col & iLinRotulo).Address(0, 0)
                        'Capturamos o codigo
                        sCodigo = x.Value
                        sRow = i.Row
                        
                        'Montamos o nome da aba como o sCodigo
                        Set sSht = wb.Sheets(CStr(sCodigo))
                        sLinSheets = sSht.Range("A2").End(xlDown).Row + 1
                        
                        'Copiamos para as abas
                        ShtCONSOLIDADO.Range(sRotulo).Copy
sSht.Range("A" & sLinSheets).PasteSpecial (xlPasteValues)
                        ShtCONSOLIDADO.Range(i.Address).Copy
sSht.Range("B" & sLinSheets).PasteSpecial (xlPasteValues)
                        'Na instrução abaixo estou supondo que a data que comentou seria da Coluna L -DATA ENVIO
                        'Se não for, é só ajustar
                        ShtCONSOLIDADO.Range("AA" & sRow).Copy Destination:=sSht.Range("C" & sLinSheets)
                     End If
                     
                 Next i
        Next

End Sub

o excel diz que o erro esta na

sSht.Range("B" & sLinSheets).PasteSpecial (xlPasteValues)

notei também que o codigo esta copiando celulas que estão com o valor ZERO que não era pra copiar.
as colunas possuem varios formulas =SE que gera a pontucao a partir dos criterios pra copiar e jogar em cada planilha nao consegui por nenhum anexo porque informa que O arquivo é muito grande. O tamanho máximo permitido é de 50 KiB. . ai no consegui mandar nem print.

 
Postado : 07/04/2018 1:43 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

A restrição ao tamanho do arquivo ficou, no meu entender, muito pequeno; inviabilizando muitos exemplos.
Porem devido a sopa de letrinhas em sua rotina ser extensa, fica muito dificil entender onde está o problema; apenas no trecho onde diz:
"...esta copiando celulas que estão com o valor ZERO.."

creio que a comparação esta aqui: If i.Value <> "" -->mas restringe células em branco e não com valor zero
Apesar de não ser recomendado, devido a restrição atual de tamanho, sugiro dispor seu modelo em um servidor externo (tipo google drive) e mandar aqui o link

 
Postado : 07/04/2018 2:51 pm
(@xlarruda)
Posts: 0
New Member
 

Complementando as palavras do colega Reinaldo, em códigos extensos e com muitas variáveis é muito difícil apenas olhar e já encontrar o erro. Já quando você posta sua planilha, nos permite depurar seu código, indo assim, diretamente no problema.

Abrç!

 
Postado : 07/04/2018 3:15 pm
(@edsonbr)
Posts: 0
New Member
 

...nao consegui por nenhum anexo porque informa que O arquivo é muito grande. O tamanho máximo permitido é de 50 KiB. . ai no consegui mandar nem print.

A restrição ao tamanho do arquivo ficou, no meu entender, muito pequeno; inviabilizando muitos exemplos.

Já quando você posta sua planilha, nos permite depurar seu código, indo assim, diretamente no problema.

Está bem crítico mesmo esse problema do limite máx ser 50KB. Haja dieta, compactação... e criatividade na redução do tamanho nos arquivos, viu! :cry: :lol:

 
Postado : 07/04/2018 3:25 pm
(@kayomaster)
Posts: 0
New Member
Topic starter
 

oi gente ta aqui o link nao sei se ira ajudar muito pois a planilha espelha alguns dados para poder as colunas em questao funcionarem.
a aba em questao é a CONSOLIDADO e é nela onde ficam os botoes.

https://drive.google.com/open?id=18uK1p ... w6BCCAz4xe

tem outro detalhe o código

              ShtCONSOLIDADO.Range("AA" & sRow).Copy Destination:=sSht.Range("C" & sLinSheets) 

também precisa ser alterado porque também é uma formula que quando tem valores nas colunas ele vai pegar a data e lançar na hora de copiar. como agora é uma formula ele também deu erro.

então só recapitulando a rotina quando eu apertar lançar pontos ele vai pegar as colunas que estao diferente de zero s informacões com a respectiva data que fica na coluna AA e lançará na respectiva ordem de cada aba de acordo com a coluna A da aba consolidado. As colunas tem código e acredito que isso esta atrapalhando a rotina.

quando eu boto a mao a data da coluna AA sem estar com formula e aperto o boto ele fica dando loops infinitos ate eu apertar esc e parar ai ele marca o

end if

como se tivesse com erro.

ai no caso sao dois erros um que ele nao esta fazendo a rotina corretamente de copiar e outra da data de AA que agora é com a formula de data. eu num sei se to explicando direito :(

ele so precisa copiar as celulas que tem a informacao diferente de zero pegar o cabeçalho que é o titulo da coluna e colar nas abas com a data que fica em AA.

 
Postado : 07/04/2018 9:26 pm
(@kayomaster)
Posts: 0
New Member
Topic starter
 

eu ainda tentei botar assim a parte da dat

 ShtCONSOLIDADO.Range("AA" & sRow).Copy Destination:=sSht.Range("C" & sLinSheets).PasteSpecial (xlPasteValues) 

que foi o que notei que o klarc28 tinha mudado mas nao deu certo. os dois erros permanece.

 
Postado : 08/04/2018 6:37 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Alterei algo na rotina consolidado, mas não sei se atende, verifique

Sub Copy_Consolidado()
Dim Linha As Long, sLinSheets As Long, sRow As Long
Dim iLinRotulo As Integer
Dim Col As String, sRotulo As String
Dim ShtCONSOLIDADO As Worksheet, sSht As Worksheet, wb As Workbook, sRG As Range, sRgColunas As Range
Dim sCodigo, x, i
Application.ScreenUpdating = False
Set wb = ThisWorkbook
    
Set ShtCONSOLIDADO = wb.Sheets("CONSOLIDADO")
    
Linha = ShtCONSOLIDADO.Range("A2").End(xlDown).Row
    
Set sRG = ShtCONSOLIDADO.Range("A4:" & "A" & Linha)
    
For Each x In sRG
    sRow = x.Row

    Set sRgColunas = ShtCONSOLIDADO.Range("C" & sRow & ", I" & sRow & ",M" & sRow & ", O" & sRow & ",R" & sRow & ", T" & sRow & ",V" & sRow)
                
    For Each i In sRgColunas
        iLinRotulo = 2 'Linha do Cabeçalho
                    
        'Verificamos se o valor é nulo
        If i.Value <> "" And i.Value > 0 Then
            'Montamos a Letra das Colunas
            Col = Split(i.Address(1, 0), "$")(0)
                        
            'Linha dos Rotulos (Cabeçalho)
            sRotulo = Range(Col & iLinRotulo).Address(0, 0)
            'Capturamos o codigo
            sCodigo = x.Value
            sRow = i.Row
                        
            'Montamos o nome da aba como o sCodigo
            Set sSht = wb.Sheets(CStr(sCodigo))
            sLinSheets = sSht.Range("A2").End(xlDown).Row + 1
                        
            'Copiamos para as abas
            ShtCONSOLIDADO.Range(sRotulo).Copy
            sSht.Range("A" & sLinSheets).PasteSpecial (xlPasteValues)
            ShtCONSOLIDADO.Range(i.Address).Copy
            sSht.Range("B" & sLinSheets).PasteSpecial (xlPasteValues)
            
            'Na instrução abaixo estou supondo que a data que comentou seria da Coluna AA -DATA ENVIO
            'Se não for, é só ajustar
            ShtCONSOLIDADO.Range("AA" & sRow).Copy
            sSht.Range("C" & sLinSheets).PasteSpecial (xlPasteValues)
        End If
                     
    Next i
Next
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
 
Postado : 08/04/2018 6:43 am
(@kayomaster)
Posts: 0
New Member
Topic starter
 

ola reinaldo. Exatamente é isso mesmo, porém ele não copiou os dados quando o número é negativo note as células O8, O10, O22, no caso qualquer uma das celulas copiadas podem também ser números negativos que também precisam ser copiado. mas a rotina é exatamente essa. so que os números podem ser positivos ou negativos. ^^

 
Postado : 08/04/2018 6:31 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Experimente alterar
De:
If i.Value <> "" And i.Value > 0 Then
Para:
If i.Value <> "" And i.Value > 0 or i.value<0 Then

 
Postado : 08/04/2018 7:43 pm
(@kayomaster)
Posts: 0
New Member
Topic starter
 

é exatamente isso mesmo! oh povo inteligente! multiplica senhor o/
Deus abençõe você e família. Muito obrigado a você e a todos do fórum que sempre ajudam a todos nós.
o/ :D

 
Postado : 09/04/2018 5:06 am