2011-05-31 107 views
0

即時嘗試檢查一個數字是否是銀行系統中的文本或數字。如果值不正確,它應該清除併發送一條錯誤消息,但是我的代碼根本無法工作......有人可以幫我嗎?這裏是代碼: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

回答

1

我認爲你應該使用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