vba格式错误代码

vba格式错误代码

问题描述:

嘿,首先感谢所有人回答我的其他问题。我对Excel VBA极其新颖,有些事情我只是挂上了电话。我有一个用户表单(没有嵌入工作表),我有几个字段是货币(金额等),如果有人输入一个字母,它们在命令按钮后出错,他们失去了所有信息。我需要错误代码,以便我可以在msgbox中告诉他们不应将字符放在货币字段中。我不需要特定于这些字段,但我不希望它们在命中按钮将数据转储到电子表格时丢失数据。vba格式错误代码

我该如何让他们看到错误信息,点击确定按钮,让我马上回到屏幕而不会丢失他们已经读取的数据?基本上给他们机会纠正他们的错误,但不必重新输入50场?

感谢

+2

欢迎来到Stack Overflow。我注意到你没有接受任何你的问题的答案。如果你找到答案有用,你应该接受它(点击勾号)。如果你仍然不接受任何答案,最终人们会停止回答 – 2011-05-12 23:46:53

不能具体不实际的代码,但添加错误处理程序代码:

Sub SomeRoutine() 
    Dim stuff 

    On Error GoTo EH 

    ' Code 

Exit Sub 
EH: 
    ' Any errors with come here 
    If Err.Number = <specific errors to trap> Then 
     MsgBox "Oops..." 

     'As a debug tools, put a Resume here, 
     ' but be sure to put a break on it, 
     ' and don't leav it in the finished code 
     Resume 
    End If 
End Sub 
+0

感谢您的帮助。这不是我正在寻找的东西(我知道 - 当我不提供代码时很难分辨),但是我确实从您的示例中学到了很多东西。 – bdubb 2011-05-13 01:26:56

+0

对不起,我写了更多,但我没有用它的时间。我不得不删除恢复片,因为它仍然允许不正确的数据移动到电子表格。但就像我说过的,我用你的榜样学到了很多东西......比我在网上或书中写得更多。所以我很欣赏时间和例子。 – bdubb 2011-05-13 01:34:41

据我所知,你希望用户输入数字的数字只有到文本盒子 - 对吗?这是我通常做的。

在全球模块添加以下功能:

Function IFF(c, t, f) 
    Dim v 
    If c Then v = t Else v = f 
    IFF = v 
End Function 

然后在你的textbox_change事件中添加如下:

Private Sub txtAmount_Change() 
    txtAmount.Text = IFF(IsNumeric(txtAmounto.Text), Val(txtAmount.Text), 0) 
End Sub 

在框中这将基本上把0只要用户输入一个无效的号码。

希望这有助于

+0

该方案的良好答案,但不是实际的_question_。 – RolandTumble 2011-05-13 20:05:50

一个稍微不同的看法就比由克里斯·尼尔森给出

Sub SomeRoutine 
On Error GoTo ErrHandler 'doesn't matter where you put it 
          'as long as it's before the code you want to protect 

'Dim Stuff 

    'Do Stuff 

ExitRoutine: 'Note the colon(:), which makes this a label 
    'Any cleanup that you _always_ want 
    Exit Sub 

ErrHandler: 
    Select Case Err.Number 
     Case <some error you want to handle specially> 
      'special handling 
     Case Else 
      'default handling, which may include: 
      Resume ExitRoutine 
    End Select 
    Resume 
End Sub 

需要注意的是,去年Resume永远得到正常处理击(如果你已经错误处理程序正确编写错误处理案例),但是当您在Break模式下进行调试时,可以让它将其设置为“Next Statement”。这是一个简单的方法,看究竟哪个语句抛出错误。