Excel VBA-检查文本框组

莫里兹

我当前的工作项目面临一个小问题。

我想实时检查多页用户表单上的2组文本框(4个带有标签“ A”和4个带有标签“ B”),如果其中一组不为空(每个单个文本框必须包含一个值)按钮应启用。

这是我到目前为止的内容:

主要代码:

Dim TextBoxes() As New ChangeCheck
Private Sub UserForm_Initialize()
Main.ZeitA_CommandButton1.Enabled = False
Dim Ctl As MSForms.Control
Dim i As Long
  i = 1
     For Each Ctl In Me.Controls
       If TypeName(Ctl) = "TextBox" Then
           ReDim Preserve TextBoxes(1 To i)
           Set TextBoxes(i).TextGroup = Ctl
           i = i + 1
        End If
Next Ctl
End Sub

类模块“ ChangeCheck”

Option Explicit
Public WithEvents TextGroup As MSForms.Textbox


Sub TextGroup_Change()
If TextGroup.Tag = "A" Then

MsgBox "Hallo"

End If
End Sub

因此,如果我更改带有标签“ A”的文本框,则会得到一个MsgBox,但如何检查带有标签“ A”的所有文本框是否都不为空?如果我用

If TextGroup.Tag = "A" And TextGroup.Value <> "" Then

每个文本框将激活或停用按钮

预先感谢您莫里茨

煎蛋卷

下面是一种可能的解决方案。

假定存在一个命名表单,UserForm1其中包含8个TextBox控件(如您所述,包含4个带有标签“ A”的控件和4个带有标签“ B”的控件)和2个CommandButton1为组“ A”和CommandButton2“ B”命名的CommandButton控件将这段代码放在UserForm1节中(一些变量名被更具指导性的IMO取代,我也使用collection而不是array,因此不需要counter变量):

Option Explicit

Private Sub UserForm_Initialize()
    Dim Ctl As MSForms.Control
    Dim ChangeCheckInstance As ChangeCheck
    Set Form = Me
    Me.CommandButton1.Enabled = False
    Me.CommandButton2.Enabled = False
    For Each Ctl In Me.Controls
        If TypeName(Ctl) = "TextBox" Then
            Set ChangeCheckInstance = New ChangeCheck
            Set ChangeCheckInstance.TextBoxCtl = Ctl
            ChangeChecks.Add ChangeCheckInstance
        End If
    Next Ctl
End Sub

项目还必须Module1在模块部分中包含以下代码:

Option Explicit

Public ChangeChecks As New Collection
Public Form As Object

Public Sub CheckTextBoxes(CallerTextBox As MSForms.TextBox)
    Dim ChangeCheckInstance As ChangeCheck
    Dim NotEmpty As Boolean
    NotEmpty = True
    For Each ChangeCheckInstance In ChangeChecks
        With ChangeCheckInstance.TextBoxCtl
            If (.Text = "") And (.Tag = CallerTextBox.Tag) Then
                NotEmpty = False
                Exit For
            End If
        End With
    Next
    Select Case CallerTextBox.Tag
    Case "A"
        Form.CommandButton1.Enabled = NotEmpty
    Case "B"
        Form.CommandButton2.Enabled = NotEmpty
    End Select
End Sub

以及您ChangeCheck在类模块部分中的类定义:

Option Explicit

Public WithEvents TextBoxCtl As MSForms.TextBox

Sub TextBoxCtl_Change()
    CheckTextBoxes TextBoxCtl
End Sub

如您所见,所有check操作均在中实现Public Sub CheckTextBoxes,该操作CallerTextBox从更改后的类实例传递的参数中获取必要的数据,并从全局变量:ChangeChecks包含所有复选框的集合Form中引用UserForm1

编辑:

如果您不想拥有全局变量(这不是您所知的最佳实践),另一种方法是在类中封装检查方法和必要的数据。因此,您无需保留Module1在模块部分,而UserForm1在表单部分中的代码将如下所示:

Option Explicit

Private Sub UserForm_Initialize()
    Dim Ctl As MSForms.Control
    Dim ChangeChecks As New Collection
    Dim ChangeCheckInstance As ChangeCheck
    Me.CommandButton1.Enabled = False
    Me.CommandButton2.Enabled = False
    For Each Ctl In Me.Controls
        If TypeName(Ctl) = "TextBox" Then
            Set ChangeCheckInstance = New ChangeCheck
            Set ChangeCheckInstance.TextBoxCtl = Ctl
            Set ChangeCheckInstance.ChangeChecks = ChangeChecks
            Set ChangeCheckInstance.Form = Me
            ChangeChecks.Add ChangeCheckInstance
        End If
    Next Ctl
End Sub

并且您ChangeCheck在“类模块”部分中的类定义将如下所示:

Option Explicit

Public WithEvents TextBoxCtl As MSForms.TextBox
Public ChangeChecks As Collection
Public Form As Object

Sub TextBoxCtl_Change()
    Dim ChangeCheckInstance As ChangeCheck
    Dim NotEmpty As Boolean
    NotEmpty = True
    For Each ChangeCheckInstance In ChangeChecks
        With ChangeCheckInstance.TextBoxCtl
            If (.Text = "") And (.Tag = TextBoxCtl.Tag) Then
                NotEmpty = False
                Exit For
            End If
        End With
    Next
    Select Case TextBoxCtl.Tag
    Case "A"
        Form.CommandButton1.Enabled = NotEmpty
    Case "B"
        Form.CommandButton2.Enabled = NotEmpty
    End Select
End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

文本框限制错误Excel VBA

来自分类Dev

VBA Excel-文本框验证

来自分类Dev

文本框日期格式Excel VBA

来自分类Dev

VBA Excel:如果更改了文本框,则添加第二组命令

来自分类Dev

VBA Excel-单击按钮后检查多个文本框的有效性

来自分类Dev

使用VBA检查excel中是否存在命名的文本框

来自分类Dev

出现msg框后清除VBA Excel文本框

来自分类Dev

用于填充组合框的 Excel VBA 文本框

来自分类Dev

基于文本框输入的VBA Excel If语句

来自分类Dev

Excel VBA麻烦填写Web文本框

来自分类Dev

Excel VBA:如何使旋转按钮控制多个文本框?

来自分类Dev

Excel VBA,空文本框和CInt

来自分类Dev

Excel VBA文本框时间验证为[h]:mm

来自分类Dev

在图VBA Excel中的节点下方添加文本框

来自分类Dev

基于文本框输入的VBA Excel If语句

来自分类Dev

Excel VBA获取完整的文本框值

来自分类Dev

使用Excel VBA在文本框中创建公式

来自分类Dev

Excel VBA验证文本框中的特定格式

来自分类Dev

Excel VBA-使“文本框”输入为可选

来自分类Dev

在VBA Excel中格式化文本框

来自分类Dev

验证用户表单上的文本框条目(Excel VBA)

来自分类Dev

Excel组文本框和图片

来自分类Dev

Excel VBA 从 Excel 复制范围并将其粘贴到 Word 标题文本框

来自分类Dev

Excel VBA:根据文本框中设置的值在列表框中搜索值

来自分类Dev

Excel VBA:根据文本框中设置的值在列表框中搜索值

来自分类Dev

如何在Excel中使用VBA将文本插入(工作表)文本框?

来自分类Dev

VBA Excel:通过用户表单上的文本框指定导入文本文件的路径

来自分类Dev

文本框值的Excel VBA代码取决于使用命名范围的下拉列表值

来自分类Dev

如何使用VBA在Excel中的图形中检测是否有文本框?

Related 相关文章

  1. 1

    文本框限制错误Excel VBA

  2. 2

    VBA Excel-文本框验证

  3. 3

    文本框日期格式Excel VBA

  4. 4

    VBA Excel:如果更改了文本框,则添加第二组命令

  5. 5

    VBA Excel-单击按钮后检查多个文本框的有效性

  6. 6

    使用VBA检查excel中是否存在命名的文本框

  7. 7

    出现msg框后清除VBA Excel文本框

  8. 8

    用于填充组合框的 Excel VBA 文本框

  9. 9

    基于文本框输入的VBA Excel If语句

  10. 10

    Excel VBA麻烦填写Web文本框

  11. 11

    Excel VBA:如何使旋转按钮控制多个文本框?

  12. 12

    Excel VBA,空文本框和CInt

  13. 13

    Excel VBA文本框时间验证为[h]:mm

  14. 14

    在图VBA Excel中的节点下方添加文本框

  15. 15

    基于文本框输入的VBA Excel If语句

  16. 16

    Excel VBA获取完整的文本框值

  17. 17

    使用Excel VBA在文本框中创建公式

  18. 18

    Excel VBA验证文本框中的特定格式

  19. 19

    Excel VBA-使“文本框”输入为可选

  20. 20

    在VBA Excel中格式化文本框

  21. 21

    验证用户表单上的文本框条目(Excel VBA)

  22. 22

    Excel组文本框和图片

  23. 23

    Excel VBA 从 Excel 复制范围并将其粘贴到 Word 标题文本框

  24. 24

    Excel VBA:根据文本框中设置的值在列表框中搜索值

  25. 25

    Excel VBA:根据文本框中设置的值在列表框中搜索值

  26. 26

    如何在Excel中使用VBA将文本插入(工作表)文本框?

  27. 27

    VBA Excel:通过用户表单上的文本框指定导入文本文件的路径

  28. 28

    文本框值的Excel VBA代码取决于使用命名范围的下拉列表值

  29. 29

    如何使用VBA在Excel中的图形中检测是否有文本框?

热门标签

归档