Vba 如何为按键事件制作sub?
我正在用宏编写excel。我有一个带有文本框的userform,其中有几个只用于按数字的函数 如何将select案例放在程序或函数上 然后在我需要的任何按键事件中调用它(在本例中,quantity1 quantity2、price1和price2,但买方中没有)? 我尝试制作一个使用与事件相同参数的sub,例如:Vba 如何为按键事件制作sub?,vba,excel,Vba,Excel,我正在用宏编写excel。我有一个带有文本框的userform,其中有几个只用于按数字的函数 如何将select案例放在程序或函数上 然后在我需要的任何按键事件中调用它(在本例中,quantity1 quantity2、price1和price2,但买方中没有)? 我尝试制作一个使用与事件相同参数的sub,例如: Sub Only_Numbers(ByVal KeyAscii As MSForms.ReturnInteger) 下面是我为您创建的一个快速示例 假设您的用户表单如下所示 现在
Sub Only_Numbers(ByVal KeyAscii As MSForms.ReturnInteger)
下面是我为您创建的一个快速示例 假设您的用户表单如下所示 现在将其放在类模块中
Public WithEvents TextBoxEvents As MSForms.TextBox
Private Sub TextBoxEvents_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case Asc("0") To Asc("9")
Case Else
KeyAscii = 0
End Select
End Sub
屏幕截图
并将其放入userform中
Dim myTBs() As New Class1
Private Sub UserForm_Initialize()
Dim i As Integer, objControl As Control
For Each objControl In Me.Controls
If TypeOf objControl Is MSForms.TextBox Then
i = i + 1
ReDim Preserve myTBs(1 To i)
Set myTBs(i).TextBoxEvents = objControl
End If
Next objControl
Set objControl = Nothing
End Sub
屏幕截图
现在尝试在任何文本框中输入text/numbers
:
编辑
@悉达多哇!真棒的回答!几乎是这样,但我要求userform上的某些文本框(不是全部)可以有此限制。我想如果我这样做的话,设置myTBs(I).TextBoxEvents=quantity1(考虑到quantity1是一个文本框)应该会起作用6分钟前的fjatp
如果objControl的类型为MSForms.TextBox,则
选择Case objControl.Name
案例“TextBox1”、“TextBox3”、“TextBox4”这里是我为您创建的一个快速示例
假设您的用户表单如下所示
现在将其放在类模块中
Public WithEvents TextBoxEvents As MSForms.TextBox
Private Sub TextBoxEvents_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case Asc("0") To Asc("9")
Case Else
KeyAscii = 0
End Select
End Sub
屏幕截图
并将其放入userform中
Dim myTBs() As New Class1
Private Sub UserForm_Initialize()
Dim i As Integer, objControl As Control
For Each objControl In Me.Controls
If TypeOf objControl Is MSForms.TextBox Then
i = i + 1
ReDim Preserve myTBs(1 To i)
Set myTBs(i).TextBoxEvents = objControl
End If
Next objControl
Set objControl = Nothing
End Sub
屏幕截图
现在尝试在任何文本框中输入text/numbers
:
编辑
@悉达多哇!真棒的回答!几乎是这样,但我要求userform上的某些文本框(不是全部)可以有此限制。我想如果我这样做的话,设置myTBs(I).TextBoxEvents=quantity1(考虑到quantity1是一个文本框)应该会起作用6分钟前的fjatp
如果objControl的类型为MSForms.TextBox,则
选择Case objControl.Name
案例“TextBox1”、“TextBox3”、“TextBox4”作为对Siddharth代码的轻微修改,我使用集合而不是数组。其他一切都是一样的
Option Explicit
Dim myTBs As New Collection
Private Sub UserForm_Initialize()
Dim i As Integer, objControl As Control
Dim TB As Class1
For Each objControl In Me.Controls
If TypeOf objControl Is MSForms.TextBox Then
Set TB = New Class1
Set TB.TextBoxEvents = objControl
myTBs.Add TB
End If
Next objControl
Set objControl = Nothing
End Sub
作为对Siddharth代码的轻微修改,我使用集合而不是数组。其他一切都是一样的
Option Explicit
Dim myTBs As New Collection
Private Sub UserForm_Initialize()
Dim i As Integer, objControl As Control
Dim TB As Class1
For Each objControl In Me.Controls
If TypeOf objControl Is MSForms.TextBox Then
Set TB = New Class1
Set TB.TextBoxEvents = objControl
myTBs.Add TB
End If
Next objControl
Set objControl = Nothing
End Sub
您需要的是一个控制数组来处理\u按键
。不幸的是,我的网站正在装修中,否则我会给你指出一个完整的例子。您现在可能需要在web上搜索VBA控件阵列。您能否详细说明此表单需要执行的操作?它需要在后台运行吗?“帮助我”不是问题。请学习如何编写有效的问题。@ashleedawg是一个带有一些文本框的用户表单,您可以在其中输入值,这些值可以稍后放到表中。@fjatp-…那么我不明白您为什么不使用常规的文本框输入法?您需要的是一个控件数组来处理\u KeyPress
。不幸的是,我的网站正在装修中,否则我会给你指出一个完整的例子。您现在可能需要在web上搜索VBA控件阵列。您能否详细说明此表单需要执行的操作?它需要在后台运行吗?“帮助我”不是问题。请学习如何编写有效的问题。@ashleedawg这是一个带有一些文本框的用户表单,您可以在其中输入值,这些值可以稍后放到表中。@fjatp-…那么我不明白您为什么不使用常规的文本框输入法?我通常使用集合来执行此操作我通常使用集合来执行此操作