Notifications
Clear all

Erro de compilação

8 Posts
2 Usuários
0 Reactions
1,129 Visualizações
(@vonzuben)
Posts: 549
Honorable Member
Topic starter
 

Como encaixo

PasteSpecial Paste:=xlPasteValues

na linha abaixo ?

rgArea.Copy Worksheets("Plan2").Range(rgArea.Address)

Obrigado !

 
Postado : 25/05/2018 10:04 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Copiar e colar especial não podem ser feitas na mesma operação. Tem que ser em duas linhas: uma a cópia e outra a colagem especial

rgArea.Copy
Worksheets("Plan2").Range(rgArea.Address).PasteSpecial xlPasteValues

Vonzuben, quando possível, evite criar muitos tópicos sobre a continuação do mesmo assunto. Percebi que este e os outros dois tópicos são referentes a este mesmo problema. Bastava ter respondido em réplica ao questionamento anterior que a reposta viria lá mesmo.

Mover dados
PasteSpecial

 
Postado : 25/05/2018 11:42 am
(@vonzuben)
Posts: 549
Honorable Member
Topic starter
 

Não entendi pq sem Paste pode ser feito na mesma linha e como ter que ter quebra de linha

 
Postado : 25/05/2018 1:14 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

O método Copy é um. O método PasteSpecial é outro. São dois "comandos" diferentes que agem sobre o objeto Range, por isso têm de estar em linhas diferentes (ou separados por dois-pontos : )

rgOrigem.Copy Destination:= rgOndeVouColar

O método Copy aceita como parâmetro apenas o destino (intervalo - opcional), ou seja, onde os dados serão colados. Se for omitido copia só pra área de transferência. Ele não aceita parâmetros especiais de colagem, por isso a colagem especial deve ser feita na próxima etapa.

 
Postado : 25/05/2018 1:58 pm
(@vonzuben)
Posts: 549
Honorable Member
Topic starter
 

Tentei transferir para linha 1 pelo código modelo 2 ( Vi que desse modo deixa a macro mais rápido ) mas não funcionou

Modelo 1 acontece erro
Modelo 2 não copia celula D

     'Modelo 1
        'Rng.Copy
        'Worksheets("Plan2").Range(RngOne.Address).PasteSpecial xlPasteValues
    
      'Modelo 2
        RngOne.Value = Worksheets("Plan1").Range(Rng.Address).Value

segue a planilha

 
Postado : 25/05/2018 7:13 pm
(@vonzuben)
Posts: 549
Honorable Member
Topic starter
 

Acabei resolvendo dos 2 modos

Não queria copiar os valores da celulas C, pq desse modo substituiria a sequencia de números da coluna C, mas acabei deixando a Range("A1:B1,D1") assim, Range("A1:D1")
e coloquei

Sheets("Plan2").Range("C1").FormulaLocal = "=LIN()-0"

assim se copiar, tipo o número 4 e colocar na linha 1, altera para o número para 1

 
Postado : 25/05/2018 9:04 pm
(@vonzuben)
Posts: 549
Honorable Member
Topic starter
 

Tem um problema ( não adjacente ) incluir uma coluna E com formula que não pode ser copiado

OBS: A formula também não pode ser copiado, pq a Coluna E da Plan2 terá um valor para acrescentar na formula

Copiar assim é fácil Ex: A2:F2, mas assim A2:D2, F2 terei que fazer a cópia 2 vezes, ou seja, cópia A2:D2 e depois outra cópia da F2

Fazer sem 2 cópias tem como ?

Segue a planilha como está

 
Postado : 26/05/2018 7:48 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Vonzuben, bom dia
[list=1]

  • A String concatenada que define o endereço não-adjacente do range está incorreta: a vírgula deve estar dentro da String, não fora (alterado).[/*:m:ey690ji7]
  • "A2:C2,D2,F2" podia ficar reduzido a "A2:D2,F2" visto que D é adjacente a C. (alterado)[/*:m:ey690ji7]
  • Como é somente a coluna E que é diferente, ao invés de ficar fazendo loops em intervalos não adjacentes, que tal se vc simplesmente copiasse/colasse ou atribuísse o valor do intervalo inteiro Ax:Fx depois só corrigisse o valor/fórmula da coluna E? Simplificaria seu código e poderia ficar mais rápido também. (não alterado, fica como sugestão)[/*:m:ey690ji7]
  • Caso vc ainda assim queira fazer o loop pelas áreas, sugiro fazer conforme as linhas alteradas:[/*:m:ey690ji7][/list:o:ey690ji7]
  • Private Sub Worksheet_Change(ByVal Target As Range)
       Application.EnableEvents = False
       Application.ScreenUpdating = False
       Dim Rng As Range
       Dim RngOne As Range
       Dim i As Long     '**Alteração
       Linha = Target.Row
         Set RngOne = Worksheets("Plan2").Range("A2:D2,F2") '**Alteração
         If Range("G" & Linha).Value = "MOVER" Then
           Set Rng = Worksheets("Plan1").Range("A" & Linha & ":" & "D" & Linha & ",F" & Linha) '**Alteração
           For i = 1 To Rng.Areas.Count '**Alteração
             RngOne.Areas(i).Value = Rng.Areas(i).Value  '**Alteração principal
             Sheets("Plan2").Range("C2").FormulaLocal = "=LIN()-1"
           Next i '**Alteração
         End If
       Application.CutCopyMode = False
       Application.ScreenUpdating = True
       Application.EnableEvents = True
       Set RngOne = Nothing: Set Rng = Nothing '*****Alteração
    End Sub
    

     
    Postado : 28/05/2018 7:12 am