Página 1 de 1

função não consegue alterar o valor da célula

Enviado: 14 Set 2016 às 18:54
por baraozemo
bom dia,

eu tenho uma planilha no excel 2010 e que tem vários alertas, eu coloco uma regra e chamo a função,
porém estou com problema porque a função não consegue gravar de volta o valor "1"
que é a condição para que o alerta seja "desativado" (senão fica dando mensagem toda hora).

exemplo de como eu chamo a função
NA PLANILHA
=Alarme(B1;">100")

alguém poderia me ajudar?

link para download da planilha de exemplo
https://drive.google.com/open?id=0B45Hg ... EhBUE5jalk
Código: Selecionar todos
Function Alarme(Célula, Condição)
On Error GoTo ErrHandler
If ActiveCell.Offset(0, 2).Value = "1" Then Exit Function
Dim acao As String, expressao As String
acao = Mid(Condição, 1, 5)
expressao = Mid(Condição, 6, Len(Condição) - 5)
If Evaluate(Célula.Value & expressao) Then
   Application.Speech.Speak ("alerta. " & acao & expressao)
ActiveCell.Offset(0, 2).Select
ActiveCell.Offset(0, 2).Range("A1").Value = 1                  <====aqui  não está funcionando

Alarme = True
Exit Function
End If
ErrHandler:
Alarme = False
End Function

função não consegue alterar o valor da célula

Enviado: 14 Set 2016 às 20:07
por DJunqueira
Vc tem de desarmar a condição (B1<100) ou a função vai dar alarme sempre q a planilha fizer um cálculo.

Re: função não consegue alterar o valor da célula

Enviado: 14 Set 2016 às 21:40
por baraozemo
sim, por isso eu necessito de devolver para a planilha duas células a direita de onde a função é chamada e colocar
o valor desta célula = 1 ,
ActiveCell.Offset(0, 2).Range("A1").Value = 1 <====aqui não está funcionando

com isso a função não é executada uma segunda vez.
If ActiveCell.Offset(0, 2).Value = "1" Then Exit Function
pois este comando compara se a célula está com valor =1 e dá um EXIT logo no início da função.

o meu problema é que o comando abaixo não está funcionando e não atualiza a célula para dizer
que já rodou a função.
ActiveCell.Offset(0, 2).Range("A1").Value = 1 <====aqui não está funcionando

função não consegue alterar o valor da célula

Enviado: 14 Set 2016 às 21:53
por DJunqueira
Experimente colocar o código abaixo no início da sua função.
Alarme = False

função não consegue alterar o valor da célula

Enviado: 14 Set 2016 às 22:31
por andreitrp
DJunqueira, se puder olhar mensagens provadas, agradecido, desculpem invadir o tópico sem contribuir mas nao tem outra forma de contato aqui.

Re: função não consegue alterar o valor da célula

Enviado: 15 Set 2016 às 15:36
por baraozemo
coloquei no título o download da planilha para quem possa baixar e tentar ajudar.

função não consegue alterar o valor da célula

Enviado: 15 Set 2016 às 20:25
por baraozemo
Segue o link de download da planilha de exemplo que eu preciso corrigir:

https://drive.google.com/open?id=0B45Hg ... EhBUE5jalk

função não consegue alterar o valor da célula

Enviado: 18 Set 2016 às 11:50
por baraozemo
alguem poderia ajudar?

Re: função não consegue alterar o valor da célula

Enviado: 18 Set 2016 às 21:06
por RodrigoRMC
Boa noite,

Li seu código e o mesmo tem alguns problemas, o offset deve ser utilizado de outro modo que não vale a pena explicar aqui pois não é o intuito do post, e também não pode alterar valor dentro de uma célula, fiz alguns testes e temos algo funcional, podemos usar desse modo:

no VBA, no evento change da Plan1
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim nContador As Long
    
    nContador = 8
    Do Until Sheets("Plan1").Range("A" & nContador).Value = ""
        
        If MensagemEmitida(Sheets("Plan1").Range("A" & nContador).Value, _
                           Sheets("Plan1").Range("B" & nContador).Value, _
                           Sheets("Plan1").Range("C" & nContador).Value, _
                           Sheets("Plan1").Range("D" & nContador).Value, _
                           Sheets("Plan1").Range("F" & nContador).Value, _
                           nContador) = 1 Then
            
            Sheets("Plan1").Range("F" & nContador).Value = 1
            
        End If
        
        nContador = nContador + 1
    Loop
    
End Sub
E a função no módulo1:
Código: Selecionar todos
Option Explicit

Public Function MensagemEmitida(ByVal sAcao As String, _
                                ByVal dValorInicial As Double, _
                                ByVal sCondicao As String, _
                                ByVal dValorComparado As Double, _
                                ByVal nStatus As Integer, _
                                ByVal nLinha As Long)
    
    On Error GoTo ErrorHandler
    
    If nStatus = 1 Then
        Exit Function
        
    ElseIf Evaluate(Str(dValorInicial) & sCondicao & Str(dValorComparado)) Then
        Application.Speech.Speak ("Alerta, a ação " & sAcao & " é " & sCondicao & " " & dValorComparado)
        MensagemEmitida = 1
        Exit Function
    
    End If

    Exit Function

ErrorHandler:
    MsgBox Err.Description

End Function

Veja se resolve o seu problema !!

RodrigoRMC