Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何限制用户仅在Excel userform中具有相同名称模式的所有文本框/文本框中输入数字_Excel_Vba_Textbox_Userform - Fatal编程技术网

如何限制用户仅在Excel userform中具有相同名称模式的所有文本框/文本框中输入数字

如何限制用户仅在Excel userform中具有相同名称模式的所有文本框/文本框中输入数字,excel,vba,textbox,userform,Excel,Vba,Textbox,Userform,我有60个Excel用户表单中的文本框。为了限制用户只为TextBox1到TextBox50输入数字(十进制),我需要编写大量与下面相同的代码 我的问题: 1.我想创建一个类/函数,就像我不需要为TextBox1到TextBox50编写相同的代码一样。有简单的解决办法吗 2.如果我想在userform的所有文本框中限制用户的数字 Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If (KeyAscii

我有60个Excel用户表单中的文本框。为了限制用户只为TextBox1到TextBox50输入数字(十进制),我需要编写大量与下面相同的代码

我的问题:

1.我想创建一个类/函数,就像我不需要为TextBox1到TextBox50编写相同的代码一样。有简单的解决办法吗

2.如果我想在userform的所有文本框中限制用户的数字

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If (KeyAscii > 47 And KeyAscii < 58) Or KeyAscii = 46 Then
KeyAscii = KeyAscii
Else
KeyAscii = 0
End If
End Sub

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'same code
End Sub

    .......
    .......
Private Sub TextBox1\u按键(ByVal keyscii作为MSForms.ReturnInteger)
如果(KeyAscii>47和KeyAscii<58)或KeyAscii=46,则
keyscii=keyscii
其他的
KeyAscii=0
如果结束
端接头
专用子文本框2u按键(ByVal KEYSCII作为MSForms.ReturnInteger)
"同样的代码,
端接头
.......
.......

请尝试下一种方法:

  • 插入一个类模块作为事件包装类,并将其命名为“TxtBClass”,然后复制其模块中的下一个代码:
  • 请测试建议的解决方案并发送一些反馈

  • 有关如何在VBA中使用“控制数组”的问题,请参见前面的问题,这里还有一个很好的参考:请尝试我发布的解决方案。@mohsin:您没有抽出时间来测试上述解决方案吗?如果经过测试,它是否能满足您的需要?
    Option Explicit
    
    Public WithEvents txtBEvent As MSForms.TextBox
    
    
    Private Sub txtBEvent_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
      If (KeyAscii > 47 And KeyAscii < 58) Or KeyAscii = 46 Then
          KeyAscii = KeyAscii
      Else
          KeyAscii = 0
      End If
    End Sub
    
    Option Explicit
    
    Private txtB() As New TxtBClass
    
    Sub AssignTxtBoxEvent()
      Dim ws As Worksheet, k As Long, oObj As OLEObject
      
      Set ws = ActiveSheet 'use here your necessary sheet
      ReDim txtB(100) 'maximum text boxes to be processed (can be increased)
      
      For Each oObj In ws.OLEObjects
        If TypeName(oObj.Object) = "TextBox" Then
            'exclude the textboxes you need to be excluded from this common event:
            If (oObj.Name <> "TextBoxX") And (oObj.Name <> "TextBoxX") Then
                Set txtB(k).txtBEvent = oObj.Object: k = k + 1
            End If
        End If
       Next
       ReDim Preserve txtB(k - 1)
    End Sub
    
    Option Explicit
    
    Private Sub Worksheet_Activate()
        AssignTxtBoxEvent
    End Sub