1
resposta

Erro Estouro

Pessoal bom dia.

Eu tenho o código abaixo e sempre que eu executo, ele me retorna o erro:

Erro em tempo de execução '6': Estouto

Porém ele funciona e eu consigo enviar os e-mails para os destinatários.

Sabem me dizer por qual motivo ele ocorre e como eu posso resolve-lo.

Sub alerta_validade_contratos_GEJMJ()

    Dim ilinhas As Integer, idias As Integer

    With contratosGEJMJ

        For ilinhas = 2 To .UsedRange.Rows.Count

            idias = .Cells(ilinhas, 12).Value - VBA.Date()

            If idias <= 90 Then Call envio_email(.Cells(ilinhas, 5).Text, idias, .Cells(ilinhas, 1).Text, .Cells(ilinhas, 3).Text)

            If idias <= 90 Then Call envio_email(.Cells(ilinhas, 6).Text, idias, .Cells(ilinhas, 1).Text, .Cells(ilinhas, 3).Text)

        Next ilinhas

    End With

End Sub

Sub envio_email(ByVal pEmail As String, ByVal pDias As Integer, _ ByVal pContrato As String, ByVal pFornecedor As String)

Dim appOutlook As Object
Dim olMail As Object
Dim msgEmail As String: msgEmail = ""

msgEmail = msgEmail & "Faltam " & pDias & " dias para o vencimento do contrato " & pContrato & " do fornecedor " _
           & pFornecedor & "."

On Error Resume Next
Set appOutlook = GetObject(, "Outlook.Application")
If appOutlook Is Nothing Then
    Set appOutlook = CreateObject("Outlook.Application")
End If
On Error GoTo 0
Set olMail = appOutlook.CreateItem(0)
With olMail
    .To = pEmail
    .Subject = "ALERTA - Vencimento do Contrato " & pContrato & " do Fornecedor " _
           & pFornecedor & ""
    .body = msgEmail
    .send
End With

End Sub

1 resposta

Olá Rafael Tudo bem com você???

Este erro ocorre quando você tenta fazer uma atribuição que excede as limitações do destino da atribuição. Esse erro tem as seguintes causas e soluções:

  • O resultado de uma atribuição, um cálculo ou uma conversão de tipo de dados é muito grande para ser representado dentro do intervalo de valores permitidos para esse tipo de variável.
  • Atribua o valor a uma variável de um tipo que possa conter um intervalo de valores maior.
  • Uma atribuição para uma propriedade excede o valor máximo que a propriedade pode aceitar.

Verifique se a atribuição é adequada ao intervalo da propriedade para a qual ela é feita. Você tenta usar um número em um cálculo, e o número é imposto como um inteiro, mas o resultado é maior do que um inteiro. Por exemplo:

Dim x As Long 
      x = 2000 * 365   ' Error: Overflow

Para contornar a situação, digite o número da seguinte forma:

Dim x As Long 
      x = 2000 * 365   ' Error: Overflow

Para contornar a situação, digite o número da seguinte forma:

Dim x As Long 
      x = CLng(2000) * 365

Essa instrução foi retirada da documentação técnica da Microsoft que você pode acompanhar neste LINK

Você está com problemas em alguma das duas variáveis

ilinhas As Integer, idias As Integer

Tente utilizar outro formato que suporte um tamanho maior, como Long e provavelmente seu problema será resolvido =)

Segue a lista:

Tipo de dados Espaço de Armazenamento Intervalo

  • Boolean 2 bytes True ou False

  • Byte 1 byte 0 a 255

  • Collection Desconhecido Desconhecido

  • Currency (inteiro dimensionado) 8 bytes -922.337.203.685.477,5808 a 922.337.203.685.477,5807

  • Date 8 bytes 1 de janeiro de 100 a 31 de dezembro de 9999

  • Decimal 14 bytes +/-79.228.162.514.264.337.593.543.950.335 sem vírgula decimal

    +/-7,9228162514264337593543950335 com 28 valores à direita da vírgula decimal

    O menor número diferente de zero é +/-0,0000000000000000000000000001

  • Dictionary Desconhecido Desconhecido

  • Double (ponto flutuante de precisão dupla) 8 bytes -1,79769313486231E308 a -4,94065645841247E-324 para valores negativos

    4,94065645841247E-324 a 1,79769313486232E308 para valores positivos

  • Integer 2 bytes -32.768 a 32.767

  • Long (Inteiro Long) 4 bytes -2.147.483.648 a 2.147.483.647

  • LongLong (Inteiro LongLong) 8 bytes -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807

    Válido somente em plataformas de 64 bits. LongPtr (Inteiro Long em sistemas de 32 bits, inteiro LongLong em sistemas de 64 bits) 4 bytes em sistemas de 32 bits

    8 bytes em sistemas de 64 bits -2.147.483.648 a 2.147.483.647 em sistemas de 32 bits

    -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 em sistemas de 64 bits

  • Object 4 bytes Qualquer referência de Object

  • Single (ponto flutuante de precisão simples) 4 bytes -3,402823E38 a -1,401298E-45 para valores negativos

1,401298E-45 a 3,402823E38 para valores positivos

  • String (tamanho variável) 10 bytes + tamanho da cadeia de caracteres De 0 a aproximadamente 2 bilhões

  • String (tamanho fixo) Tamanho da cadeia de caracteres De 1 a aproximadamente 65.400

  • Variant (com números) 16 bytes Um valor numérico para o intervalo de uma Double

  • Variant (com caracteres) 22 bytes + tamanho da cadeia de caracteres (24 bytes em sistemas de 64 bits) Mesmo intervalo da Cadeia de caracteres de tamanho variável

  • User-defined (usando Type) Número obrigatório para os elementos O intervalo de cada elemento é igual ao intervalo de seu tipo de dados.

Referência nesse LINK

Espero ter te ajudado! Qualquer dúvida é só retornar aqui!

Bons estudos

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software