AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 78315657
Accepted
Danny Coleiro
Danny Coleiro
Asked: 2024-04-12 18:28:39 +0800 CST2024-04-12 18:28:39 +0800 CST 2024-04-12 18:28:39 +0800 CST

Como obter o texto da mensagem de erro enviada pelo Runtime Engine

  • 772
  1. Execute a seguinte macro.

     Sub Macro1()
         MsgBox "Hello"
     End Sub
    
  2. Quando a MsgBox aparecer, pressione as teclas Ctrl+C no teclado.

  3. Abra um arquivo do Bloco de Notas e pressione as teclas Ctrl+V no teclado.

  4. Como você pode ver, você pode copiar do MsgBox e colar no arquivo do Bloco de Notas .

  5. Agora vamos fazer o segundo cenário.

  6. Execute a seguinte macro.

     Sub Macro2()
    
         Dim myNumber As Integer
         myNumber = 20
    
         Dim yourNumber As Integer
         yourNumber = 0
    
         'In mathematics, a number can not be divided by zero. So the following code must throw an error.
         Dim resultNumber As Integer
         resultNumber = myNumber / yourNumber
    
     End Sub
    
  7. Quando a MsgBox aparecer, pressione as teclas Ctrl+C no teclado.

  8. Abra um arquivo do Bloco de Notas e pressione as teclas Ctrl+V no teclado.

  9. Como você pode ver, você NÃO consegue copiar do MsgBox e colar no arquivo do Bloco de Notas .

Minha dúvida: Como copiar mensagens de erro enviadas pelo Runtime Engine para a área de transferência do Windows conforme dou um exemplo no segundo cenário.

vba
  • 2 2 respostas
  • 32 Views

2 respostas

  • Voted
  1. Best Answer
    FaneDuru
    2024-04-12T18:45:59+08:002024-04-12T18:45:59+08:00

    Bem, você pode copiar uma mensagem de MsgBox, mas no segundo caso, não se trata de MsgBox . É uma mensagem enviada pelo compilador mencionando o número e a descrição do erro.

    Para capturar os respectivos dados você deve adaptar seu código da seguinte forma (colocá-los em uma MsgBox comum):

    Sub Macro234()
    
         Dim myNumber As Integer
         myNumber = 20
    
         Dim yourNumber As Integer
         yourNumber = 0
    
         'In mathematics, a number can not be divided by zero. So the following code must throw an error.
         Dim resultNumber As Integer
         On Error Resume Next
         resultNumber = myNumber / yourNumber
         If Err.number <> 0 Then
            MsgBox "Error number: " & Err.number & vbCrLf & " Error Description: " & Err.Description
         End If
         On Error GoTo 0
     End Sub
    

    A adaptação do código acima apenas responde à sua pergunta conforme foi formulada, mas na vida real, com necessidades reais, não consigo entender por que a necessidade de tal problema? Teoricamente, você deve usar um mecanismo de tratamento de erros capaz de resolver possíveis problemas. Você pode usar Err.Numberpara fazer com que o código atue em uma direção adequada, de acordo com ele. Por exemplo, If Err.Number = 5 then MsgBox "The denominator must be different of zero,,,": Exit sub.

    • 1
  2. FunThomas
    2024-04-12T20:40:33+08:002024-04-12T20:40:33+08:00

    A mensagem "divisão por zero" não é enviada pelo compilador , é enviada pelo mecanismo de tempo de execução do VBA . Uma mensagem do compilador (por exemplo, "Variável não encontrada", "Bloquear If sem End If") pode ser copiada com Ctrl+C, um erro de execução não (não me pergunte por quê).

    Para entender a diferença: um erro do compilador significa que a sintaxe do seu código é inválida e não pode ser executada. Isso é conhecido antes de o código ser executado. Um erro de tempo de execução é um erro que ocorre durante a execução do código e não pode ser conhecido antecipadamente: um arquivo ausente, um cálculo inválido (como divisão por 0), um estouro numérico, uma variável de objeto não inicializada e assim por diante.

    A maneira usual de detectar erros de tempo de execução é usando Error Handler . Isso é feito usando On Error...-statements. Quando ocorre um erro de tempo de execução, você pode usar o err-object para obter o número e o texto do erro.

    No seu caso, o erro não é tratado pelo seu código. O tempo de execução do VBA exibirá as informações do erro em uma caixa de mensagem especial e perguntará o que fazer (as opções relevantes são “Finalizar” e “Depurar”).

    Ao escolher “Finalizar”, o processo VBA é completamente interrompido e o contexto de programação é perdido. Todas as variáveis ​​são redefinidas, entre elas o err-object. Ao escolher "Debug", a execução é pausada na instrução que causou o erro de execução e o contexto de programação permanece. Nesse caso você simplesmente pode usar ? err.Number, err.Descriptionna janela imediata (e depois copiar as informações de lá).

    Até você responder a essa pergunta, a caixa de mensagem permanece aberta (como uma janela modal) e não há como fazer nada no Excel ou VBA até que você responda à pergunta. A única maneira seria usar ferramentas de terceiros que possam ler o conteúdo de todos os controles de todas as janelas, mas duvido que você queira fazer algo assim.

    • 1

relate perguntas

  • Pesquise e formate texto entre parênteses

  • Atribuindo formas a um grupo no PowerPoint usando VBA

  • Word VBA, mova o cursor para o início do próximo número em uma lista numerada

  • Execute uma regra do Outlook para cada conta usando macro vba

  • Extrair arquivos de um objeto OLE do Access

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle?

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Quando devo usar um std::inplace_vector em vez de um std::vector?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Martin Hope
    Aleksandr Dubinsky Por que a correspondência de padrões com o switch no InetAddress falha com 'não cobre todos os valores de entrada possíveis'? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer Quando devo usar um std::inplace_vector em vez de um std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB Por que o GCC gera código que executa condicionalmente uma implementação SIMD? 2024-02-17 06:17:14 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve