none
IF que ao chegar na linha 2814 da erro. RRS feed

  • Pergunta

  • Fiz a macro abaixo, mas quando chega na linha de 2814 ele da erro.
    Alguém tem alguma ideia para solucionar este problema? Será que se substituir o If por Case ou outro resolve?
    Ela funciona do jeitinho que eu quero, até o momento em que dá erro.
    Abaixo dessa linha não dá erro e funciona perfeitamente





    Sub Situação()
    Application.ScreenUpdating = False
    If ActiveCell.Value = "" Then 
    Range("B3").Select 
    ElseIf ActiveCell.Value < Format(Date, "dd / mm / yyyy") Then 
    ActiveCell.Offset(0, 9).Range("A1").Select 
    ActiveCell.FormulaR1C1 = "Vencido" 
    Range("V1").Value = Range("V1") + 1 
    ActiveCell.Offset(1, -9).Range("A1").Select 
    Situação 
    Else 
    ActiveCell.Offset(1, 0).Range("A1").Select 
    Situação 
    End If
    Application.ScreenUpdating = True
    End Sub
    quinta-feira, 27 de outubro de 2011 15:56

Todas as Respostas

  • Esse código está muito estranho ... estás a fazer um função recursiva para quê? Isso pode dar erros (dependendo da utilização e do contexto)

    Porque não utilizar um ciclo?


    Jorge Paulino
    Visual Basic em Português
    http://www.jorgepaulino.com/

    quinta-feira, 27 de outubro de 2011 19:50
  • Pq não sei, esta é a forma que sei fazer e funciona bem, mas acho que o excel deve ter algum sistema de proteção que quando chega nessa linha ela para e dá erro,.

    Não sou programador e não tenho fundamentos. Aprendi a fazer muito coisa na "unha".

    SE achar que é necessário lhe explico a lógica utilizada.

    Sabe, o que eu queria saber é por que ele funciona até a referida linha, se é alguma restrição do excel, porque não tem motivo ele funcionar até referida linha perfeitamente e acusar erro nesse momento.

    quinta-feira, 27 de outubro de 2011 20:53
  • É preciso entender a lógica para saber onde se pode melhorar e como esse erro acontece.

    E que erro dá? Qual a mensagem?


    Jorge Paulino
    Visual Basic em Português
    http://www.jorgepaulino.com/

    quinta-feira, 27 de outubro de 2011 21:14
  • Aparece:

    erro em tempo de execução '-2147417848(80010108)'

    O método 'Range' do objeto 'Range' falhou

    Após ele acusa erro na linha

    ActiveCell.Offset(1, 0).Range("A1").Select 

     

     

     

    Sub Situação() ' antes de iniciar esta rotina a célula onde está a data atual é  'selecionada.
    Application.ScreenUpdating = False
    If ActiveCell.Value = "" Then  ' Se a célula ativa estiver em branco ele finaliza selecionando
    Range("B3").Select  'célula B3
    ElseIf ActiveCell.Value < Format(Date, "dd / mm / yyyy") Then  ' Se a célula não estiver em branco ela tem uma data e aqui é  'para que seja comparada a data constante da célula com a  'data atual. Se a data atual for maior que a indicada na 'referida célula.
    ActiveCell.Offset(0, 9).Range("A1").Select  'seleciona 9 casas a direita da selecionada.
    ActiveCell.FormulaR1C1 = "Vencido"  ' escreve "vencido" em referida célula
    Range("V1").Value = Range("V1") + 1  'Adiciona +1 ao contador que fica na célula V1
    ActiveCell.Offset(1, -9).Range("A1").Select  ' desce uma linha e seleciona 9 células a esquerda (mesma 'coluna onde estão as datas a serem comparadas, só que na 'linha de baixo)
    Situação  'reinicia o ciclo
    Else 
    ActiveCell.Offset(1, 0).Range("A1").Select       'aqui é para o caso de a célula não estar em branco, mas a 'data atual ser superior à célula com a data indicada. Aqui 'apenas desce uma linha na mesma coluna, sem escrever  '"Vencido" em qualquer célula
    Situação  'Reinicia o ciclo até que a célula  selecionada esteja em 'branco, momento em que será selecionada a célula B3, como 'especificado no início do ciclo.
    End If
    Application.ScreenUpdating = True
    End Sub


    quinta-feira, 27 de outubro de 2011 21:33