我試圖將表單上創建的文本框傳遞給子例程,以檢查文本框的內容並將文本框限制爲數字數據。由於VBA沒有重載,我使用可選參數來調用沒有任何參數的函數作爲TextBox_Exit事件的一部分,或者作爲一個獨立的調用,並將問題中的textBox作爲參數傳遞(我不得不解決事實如果焦點轉移到當前幀之外的控件,則不會拋出TextBox_Exit事件)。作爲參數傳遞的Excel VBA表單TextBox
我遇到的問題是,當我使用此代碼:
Private Sub fLaser_Exit(ByVal Cancel As msForms.ReturnBoolean)
OnlyNumbers (tbLaserCutLength)
OnlyNumbers (tbPartWidth)
OnlyNumbers (tbPartLength)
OnlyNumbers (tbLaserBendQty)
oPart.LaserCutLength = CDec(tbLaserCutLength.Value)
oPart.SheetMetalWidth = CDec(tbPartWidth.Value)
oPart.SheetMetalLength = CDec(tbPartLength.Value)
oPart.LaserCutLength = CInt(tbLaserBendQty.Value)
UpdateCosts
End Sub
Private Sub OnlyNumbers(Optional ByRef tb As msForms.TextBox = Nothing)
On Error GoTo ErrorHandler:
If (tb Is Nothing) Then
Set ac = ActiveControl
Do While (TypeOf ac Is msForms.Frame)
Set ac = ac.ActiveControl
Loop
If TypeOf ac Is msForms.TextBox Then
With ac
If Not IsNumeric(.Value) Then
.Value = 0
End If
End With
End If
Else:
With tb
If Not IsNumeric(.Value) Then
.Value = 0
End If
End With
End If
ErrorHandler:
End Sub
的問題是與OnlyNumbers(tbLaserCutLength)調用(以及隨後的OnlyNumber調用我得到一個運行時錯誤「 424':Object required error。tbLaserCutLength是一個使用Excel VBA Form編輯器創建的文本框如果我沒有將任何參數傳遞給OnlyNumbers,子程序的工作原理與預期的完全一致
如果我在tbLaserCutLength上放置對象瀏覽器是說對象/ TextBox不只是一個TextBox。我懷疑問題是在子例程中使用msForms.TextBlock類型 宣言。我試過了TextBlock,並得到了相同的結果。我應該使用另一個父類嗎?或者,我正在做其他一些根本錯誤的事情嗎?
@AlanH - 如果您在不同版本的Visual Basic之間切換,它會變得更加困難 - 這麼多的相似之處幾乎沒有什麼區別,它們真的會把你推上牆。 – YowE3K