VBA isnumber istext函数问题

问题描述:

即时尝试检查一个数字是否是银行系统中的文本或数字。如果值不正确,它应该清除并发送一条错误消息,但是我的代码根本无法工作......有人可以帮我吗?这里是代码:VBA isnumber istext函数问题

Private Sub TextBox1_Change() 

    name = TextBox1 

    If Application.IsText(name) = True Then 
     IsText = True 
    Else 
     MsgBox "Insert only words" 
     Selection.name.Delete 
    End If 

End Sub 
+3

请比“我的代码根本不工作”更具体。错误发生在哪里?不要让我们猜... – 2011-05-31 13:11:53

+0

你应该在你的模块的顶部有* Option Explicit *。这将迫使你声明var的名称并确保TextBox1是你引用的实际文本框。 – ray 2011-05-31 14:28:08

+0

托管此VBA项目的应用程序是什么? TextBox来自哪个库?它是一个UserForm文本框?访问? Windows窗体?其他? – phoog 2011-05-31 14:37:38

我认为你应该使用name = TextBox1.Text来代替。这可能会给你在这条线上的错误。另外,您可能要等到用户输入完响应后,我相信每次按下某个字符时都会运行更改后的事件。 AfterUpdate将在您选中或点击文本框后运行。

真的,而不是删除响应(我不认为会起作用),您应该简单地将文本框设置为空白字符串。

Private Sub TextBox1_AfterUpdate() 
    If Not MyIsANumber(TextBox1.Text) Then 
     MsgBox ("It's Text") 
    Else 
     TextBox1.Text = "" 
    End If 
End Sub 

Function MyIsANumber(str As String) As Boolean 
    For i = 1 To Len(str) 
     If IsNumeric(Mid(str, i, 1)) Then 
      MyIsANumber = True 
      Exit Function 
     End If 
    Next 
     MyIsANumber = False 
End Function 

我确定代码可以更好地构造,但是有一些东西需要你做。在这种情况下,如果输入了一个数字,它就会擦除文本框。显然,事情需要与你想要包含数字的文本框相反。

+0

好吧,我改变了,但仍然没有工作......问题是,它根本不生成错误,代码只是不工作,如果一个数字而不是一个字,没有任何反应。我如何让它等到一切都输入? – 2011-05-31 13:26:47

+0

@Daniel看看我的编辑,看看你能否拿出这个自定义是一个数字函数。我会稍微填一下。 – jonsca 2011-05-31 14:23:14

+0

VB/VBA具有[默认属性](http://www.hitmill.com/programming/vb/defaultProp.html),尽管编码文本框的文本属性是一种很好的做法,但_name = TextBox1_不会导致错误。 – ray 2011-05-31 14:25:44