About Me

A minha foto
JRod - PORTUGAL
Microsoft [MVP] - Excel (10º ano consecutivo)
Ver o meu perfil completo
Com tecnologia do Blogger.

Seguidores

Estatisticas

Free Blog Counter

eXTReMe Tracker
2006-11-01
Se tivermos uma tabela na Sheet2, como no exemplo:



e pretendermos copiar o conteúdo das colunas B e C, por linha para a Sheet1, como no exemplo:



podemos correr o risco de perdermos a formatação inicial na Sheet1, no que diz respeito ao valor, se utilizarmos o seguinte Código:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Set rng1 = ActiveCell      'Clicar duplamente sempre numa célula da coluna A,
                               'para que a função Offset() possa indicar o número da célula pretendida
    Set rng2 = rng1.Offset(0, 1)
    Set rng3 = rng1.Offset(0, 2)

    rng2.Copy Destination:=Worksheets("Sheet1").[B3:D3]    ' Range, porque são merged cells
    rng3.Copy Destination:=Worksheets("Sheet1").[E3]  'altera a formatação no destino - é valor

    Range("A1").Select    ' Esta selecção de A1, é apenas para desactivar a ActiveCell
End Sub



Aqui, o resultado seria o seguinte:



Então, para que o resultado seja o desejado, isto é, sem perder a formatação original no destino:






teremos que aperfeiçoar o Código:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Set rng1 = ActiveCell      'Clicar duplamente sempre numa célula da coluna A,
                               'para que a função Offset() possa indicar o número da célula pretendida
    Set rng2 = rng1.Offset(0, 1)
    Set rng3 = rng1.Offset(0, 2)

    rng2.Copy Destination:=Worksheets("Sheet1").[B3:D3]    ' Range, porque são merged cells
    rng3.Copy
    Worksheets("Sheet1").[E3].PasteSpecial (xlValues)
'não altera a formatação no destino apesar de ser valor
    
    [A1].Select    ' Esta selecção de A1, é apenas para desactivar a ActiveCell
End Sub


NOTA: O Código VBA deve ser inserido na Sheet2, clicando com o botão direito do rato no tabulador (para aceder ao Editor de VBA) e escolhendo: