About Me
Com tecnologia do Blogger.
Seguidores
Estatisticas
2006-11-01
171: VBE - Offset, Copy Destination e PasteSpecial
4:20 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Se tivermos uma tabela na Sheet2, como no exemplo:
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:
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
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: