Mprudencio, deu certo não.
Eu tenho uma macro aqui que é o seguinte:
Em Plan1:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Application.ScreenUpdating = False
If Not Application.Intersect(Target, Range("M4:M5")) Is Nothing Then
Call AleVBA
Else: Exit Sub
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Em Módulo1:
Sub AleVBA()
'Application.ScreenUpdating = False
Dim i, LastRow
LastRow = Range("A" & Rows.Count).End(xlUp).Row
For i = 4 To 5
If Cells(i, "M").Value <> "" Then
Cells(i, "M").Copy
Range("S" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
Cells(i, "M").ClearContents
End If
Next
Application.CutCopyMode = False
'Application.ScreenUpdating = True
End Sub
Quando eu clico em EXECUTAR ela transfere o valor de M4 e M5 para S2 e S3. Mas não é isso que eu preciso.
O que preciso é que a macro fique monitorando somente 1 célula, digamos M4. Esta célula fica variando conforme linkDDE. Daí a cada 5 segundos a macro tem que escrever em duas outras células, pode ser S2 e S3, o maior valor positivo de M4 é gravado em S2 e o maior valor negativo de M4 gravado em S3.
Por exemplo: digamos que M4 está com valor 45, S2 registra este valor 45, S3 ainda não tem nada. 5 segundos depois M4 está em 39, S2 não muda pois 39 não é maior que 45. Depois M4 vai para 47 aí sim S2 grava 47 pois foi maior que o último 45.
Aí digamos que M4 está em -12, agora S3 é quem registra este primeiro valor negativo. Aí digamos que M4 está em -8, S3 não faz nada. Depois M4 está em -18 aí sim S3 grava -18 pois é um valor negativo maior que o último.
E fica nessa sacanagem o tempo todo.
Alguém modifica a macro pra fazer desta forma ? Grato
Postado : 02/01/2017 8:17 am