Notifications
Clear all

Excel 2003>2000 - Erro: Selection.Insert Shift:=xlDown

17 Posts
1 Usuários
0 Reactions
3,573 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde a todos.
.
O código abaixo funciona perfeitamente no Excel 2003, mas quando tento usa-lo no Excel 2000 (do trabalho) dá erro nesta linha --->>> Selection.Insert Shift:=xlDown ... e abre para depurar !!!!!
.
Alguém pode dar uma luz??
.
O que o código faz ... copia parte de uma planilha e cola valores e formatos em outra, mas sempre em cima do mês anterior ... ou seja, no final do ano terei os 12 meses, com o último sempre em cima !!!
Obrigado.
.

Option Explicit

Sub CopiaRange()
Dim sh As Shape
    Application.ScreenUpdating = False
    
    'Seleciona e coia range desejada
    Range("A1:AS91").Select
    Selection.Copy
    
    'Seleciona planilha para colar dados copiados
    Sheets("acumulado").Select
    Rows("1:1").Select
    
    'Insere as linhas copiadas, assim a ultima copia fica sempre na primeira linha
    Selection.Insert Shift:=xlDown
    
    '"Apaga" as formulas, mantendo apenas os dados
    Range("A1:AS91").Select
    Selection.Copy
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                :=False, Transpose:=False
    Range("A1").Select
    
    Application.CutCopyMode = False
    
    'Apaga o botão de macro na planilha acumulado
    With Sheets("Acumulado")
        For Each sh In .Shapes
            If sh.Name Like "Button*" Then sh.Delete
        Next
    End With
    
    '"Volta" à planilha inicial
    Sheets(1).Select
    Range("A1").Select
End Sub
 
Postado : 27/01/2015 10:22 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Copa, eu reescrevi seu código, mas em termos de rodar, não vi nada errado que não funcionaria no 2000. Infelizmente não tenho o 2000 pra testar aqui...
Segue o novo código, mais limpo que faz a mesma coisa:

Option Explicit

Sub CopiaRange()
Dim sh As Shape

    Application.ScreenUpdating = False
    'Copia range desejada
    Sheets(1).Range("A1:AS91").Copy
    
    With Sheets("acumulado")
        'Cola os dados copiados
        .Rows("1:1").Insert Shift:=xlDown
        Application.CutCopyMode = False
        
        '"Apaga" as formulas, mantendo apenas os resultados
        With .Range("A1:AS91")
            .Value = .Value
        End With
        
        'Apaga o botão de macro na planilha acumulado
        For Each sh In .Shapes
            If sh.Name Like "Button*" Then sh.Delete
        Next
        
    End With
    
    '"Volta" à planilha inicial
    Sheets(1).Range("A1").Select
    
End Sub
 
Postado : 27/01/2015 10:51 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

.
Valeu Fernando!!! ... Mas agora deu erro aqui: .Rows("1:1").Insert Shift:=xlDown ... (depurar)
.

 
Postado : 27/01/2015 11:33 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Eu sem o 2k não consigo ajudar mais.... Vou ver se um amigo meu tem... dps te falo!

 
Postado : 27/01/2015 11:39 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

.
Tranquilo Fernando, já ajudou, o código ficou bem mais limpo!! ... Daqui a pouco passa mais alguém por aqui!!! ... (primeira vez que vejo isto, uma macro funcionar perfeitamente no 2003 e dar pau no 2000!!!!)

 
Postado : 27/01/2015 11:43 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

.
Para ajudar na solução do erro apresentado acima, gravei uma macro aqui no 2000 (do trabalho), ou seja copiei A1:B29 da Plan1 e colei (valores e formatos) na Plan2 !!! ... Ficou assim (abaixo), só não sei adaptar ao código do Fernando acima!!!
.
------------------------------------------------------------------
Sub Macro2()
'
' Macro2 Macro
' Macro gravada em 27/01/2015 por 099230620337
'

'
Range("A1:B29").Select
Selection.Copy
Sheets("Plan2").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
Sheets("Plan1").Select
Range("A1").Select
Application.CutCopyMode = False
End Sub

 
Postado : 27/01/2015 2:33 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

.
Fernando, talvez seja mais fácil assim, e elimina esse erro!!! ... Ao invés de inserir sempre em cima, tem como ajustar seu código para que a cópia do mês seguinte inserida sempre na última linha vazia da Aba acumulado??
.

 
Postado : 28/01/2015 12:04 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

.
Alguém dá uma luz??
.

 
Postado : 29/01/2015 3:01 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Assim talvez:

Sub CopiaRange()
Dim sh As Shape

    Application.ScreenUpdating = False
        'Copia range desejada
        Sheets(1).Range("A1:AS91").Copy
       
        With Sheets("acumulado")
            .Cells(.Cells(Cells.Rows.Count, "A").End(xlUp).Row, 1).Select
            'Cola os dados copiados
             Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                         :=False, Transpose:=False
            '.Rows("1:1").Insert Shift:=xlDown
            Application.CutCopyMode = False
           
            '"Apaga" as formulas, mantendo apenas os resultados
            With .Range("A1:AS91")
                .Value = .Value
            End With
           
            'Apaga o botão de macro na planilha acumulado
            For Each sh In .Shapes
                If sh.Name Like "Button*" Then sh.Delete
            Next
           
        End With
       
    '"Volta" à planilha inicial
    Sheets(1).Range("A1").Select
       
End Sub
 
Postado : 29/01/2015 6:33 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

.
Renaldo, valeu!!! ... Mas ...
.
Agora deu erro aqui: .Cells(.Cells(Cells.Rows.Count, "A").End(xlUp).Row, 1).Select ... (depurar) !!!
.

 
Postado : 30/01/2015 8:39 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Quem sabe assim:

Sub CopiaRange()
Dim sh As Shape
Dim uLin As Long
    Application.ScreenUpdating = False
uLin = Sheets("acumulado").Cells(Cells.Rows.Count, "A").End(xlUp).Row + 1
        'Copia range desejada
        Sheets(1).Range("A1:AS91").Copy Destination:=Sheets("acumulado").Range("A" & uLin)
       
        With Sheets("acumulado")
            Application.CutCopyMode = False
           
            '"Apaga" as formulas, mantendo apenas os resultados
            With .Range("A1:AS91")
                .Value = .Value
            End With
           
            'Apaga o botão de macro na planilha acumulado
            For Each sh In .Shapes
                If sh.Name Like "Button*" Then sh.Delete
            Next
           
        End With
       
    '"Volta" à planilha inicial
    Sheets(1).Range("A1").Select
       
End Sub
 
Postado : 30/01/2015 9:36 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

.
Reinaldo, valeu pela atenção ... mas ...
.
Na primeira execução, o código copiou, mas como deve ter colado tudo (e não valores) os resultados ficaram #N/D
.
Na segunda execução, já deu erro aqui: Sheets(1).Range("A1:AS91").Copy Destination:=Sheets("acumulado").Range("A" & uLin)
.
??

 
Postado : 30/01/2015 9:53 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Talvez voce precise detalhar os passos que efetua, testei a rotina proposta pelo Fernando e a que alterei, e ambas são funcionas nos Offices XP(2002)/2003/2007/2010, apenas não consegui testar no 2000 pois não tenho essa versão.Mas o VBA até VB7 não houve grandes alterações e pelo modelo que você gravou, os comando são os mesmos; então deveria funcionar. Resta apenas os procedimentos, que podem interferir na correta execução
Veja o modelo anexo, planilha criada no XP

 
Postado : 30/01/2015 11:51 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

.
Reinando, o código que eu tinha e o que o Fernando postou funcionam perfeitamente no meu 2003 de casa ... o problema é com o 2000 aqui do trabalho!!!
.
Neste arquivo que vc postou os botões inserir e adicionar não deram nem sinal de vida, aí inseri novos botões e vinculei às macros e funcionou, só que a macro deu o mesmo erro aqui: .Rows("1:1").Insert Shift:=xlDown !!!
.

 
Postado : 30/01/2015 12:13 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mistério????? Se eu conseguir uma versão do 2000 vou testar

 
Postado : 30/01/2015 12:35 pm
Página 1 / 2