2017-02-23 1 views
0

양식에서 만든 TextBox를 서브 루틴으로 전달하여 TextBox의 내용을 검사하고 TextBox를 숫자 데이터로만 제한하려고합니다. VBA에는 오버로드가 없으므로 선택적 매개 변수를 사용하여 TextBox_Exit 이벤트의 일부로 매개 변수없이 함수를 호출하거나 해당 텍스트 상자가 독립 실행 형 호출로 매개 변수로 전달됩니다 (사실을 해결해야 함). 포커스가 현재 프레임 외부의 컨트롤로 전송되면 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 편집기를 사용하여 만든 TextBox입니다 .NullNumbers에 매개 변수를 전달하지 않으면 서브 루틴이 예상대로 정확하게 작동합니다 ..

tbLaserCutLength에 개체 브라우저 단순히 TextBox가 아닌 object/TextBox를 말하는 것입니다. 문제가 서브 루틴에 사용 된 msForms.TextBlock 유형 인 것 같습니다. 선언. 나는 TextBlock 만 시도했고 같은 결과를 얻는다. 내가 사용해야하는 또 다른 부모 클래스가 있습니까? 아니면 근본적으로 잘못된 것을하고 있습니까?

답변

1

대괄호를 제거하십시오!

OnlyNumbers (tbLaserCutLength)OnlyNumbers tbLaserCutLength이어야합니다.

대괄호를 사용하면 개체를 값으로 변환하고 해당 값을 서브 루틴으로 전달해야하지만 해당 서브 루틴은 개체를 기다리고 있습니다.

+0

@AlanH - 다른 버전의 Visual Basic간에 전환하는 경우 어려워집니다. - 몇 가지 차이점이 ** 많은 ** 유사성으로 인해 ** 벽에 널려 있습니다. – YowE3K

관련 문제