About Me
Com tecnologia do Blogger.
Seguidores
Estatisticas
2007-08-12
200: VBA - A Propriedade OFFSET e o Método INTERSECT
2:28 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Num newsgroup, colocaram a seguinte questão: "Gostaria que nas células que o utilizador percorra, A1, A2, A3, onde vai depositando valores numericos, esses mesmos valores sejam automaticamente carregados para uma outra célula, que será sempre a mesma, por exemplo em C5, isto porque em C5 a cada valor percorrido na coluna A, vão sendo efectuados diversos cálculos baseados nos valores dos inputs que vão sendo feitos. Eu apenas consegui atingir este objectivo colocando um botão, que o utilizador deverá carregar, quando se posicionar em A1, A2, A3 etc, que copia os valores SEMPRE para C5. Mas isto obriga a que o utilizador carregue num botão o que não dá muito jeito".
Através do exemplo que se segue, entende-se o que é pretendido.
Supondo que a célula de input é uma das que compõem o Range A1:A10 e que a célula que vai receber igualmente o valor é C5: ao digitarmos o valor 3 em A5, C5 toma também o valor 3:
e ao digitarmos o valor 7 em A7, então C5 tomará igualmente esse valor, o mesmo se passando para as restantes células do Range A1:A10:
O Código:
Private Sub Worksheet_Change(ByVal Target As Range)
'JRod - Microsoft [MVP] - Excel
'blog: http://EXCELer.blogspot.com
'site: http://www.exceler.org
'email1: mail@exceler.org
'email2: blog.exceler@netcabo.pt
'
Const WS_RANGE As String = "A1:A10"
Dim vValor As Long
On Error GoTo ws_exit
Application.EnableEvents = False
If Not Intersect(Target, Me.Range(WS_RANGE)) Is Nothing Then
With Target
ActiveCell.Offset(-1, 0).Activate
vValor = Application.ActiveCell.Value
Range("C5") = vValor
End With
End If
ws_exit:
Application.EnableEvents = True
End Sub
Nota: O Código deve ser inserido no próprio módulo da Sheet activa.
Tópicos relacionados: