【问题标题】:Excel VBA Textbox click event on Userform用户窗体上的 Excel VBA 文本框单击事件
【发布时间】:2014-04-16 12:41:00
【问题描述】:

在 EXCEL 用户窗体上,我有几个文本框。由于它们是动态创建的,它们的数量可能会有所不同。

我想实现以下目标: 当用户单击任何文本框时,我想显示一个 Msgbox,但仅在此特定用户窗体上显示,并且第一次单击仅显示一次。

你能给我一个帮助我实现这一目标的文档的指针吗?

在谷歌上搜索后,我的代码如下所示:

用户表单:创建可变数量的文本框

Option Explicit

Dim oKlasseExcel() As Klasse1

Sub userform_initialize()

    Dim i As Long
    Dim k As Long

    k = InputBox("insert number")
    i = 0

    Do
        ReDim oKlasseExcel(0 To i)
        Set oKlasseExcel(i) = New Klasse1
        Set oKlasseExcel(i).objTextbox = Userform1.Controls.Add("Forms.Textbox.1", "Textbox" & CStr(i))

        With oKlasseExcel(i).objTextbox
            .Left = 30
            .Top = 75 + 25 * i
            .Width = 300
            .Height = 25
            .MultiLine = True
        End With

        i = i + 1

    Loop Until i = k

End Sub

类模块:

Option Explicit

Public WithEvents objTextbox As MSForms.TextBox

Sub objTextbox_click()
    MsgBox objTextbox.Name & ": Changeereignis ausgelöst!"
End Sub

我想我可能必须创建一个类模块,但我对此完全陌生,我想我需要一个写得很好的例子和一些解释 cmets,拜托。当我点击一个文本框时,我上面的代码什么都不做。

【问题讨论】:

  • 我不知道该怎么做。嗯……你试过了吗?我建议使用某种标志来了解在捕获点击后是否点击了文本框。请用一些代码完成问题。
  • 你是对的。我希望我编辑的帖子有帮助

标签: excel vba textbox user-input


【解决方案1】:

如果您不想创建任何额外的数据结构来捕获点击,也许您可​​以尝试更改一些 TextBox 属性,例如: 创建一个带有 WordWrap = False 的 TextBox 并在单击它后将其值更改为 True - 然后您可以区分哪些被单击或没有被单击。

【讨论】:

  • 我的想法是使用一个布尔变量,一旦用户单击文本框并在显示 msgbox 之前检查该变量,该变量设置为 true。
  • 我认为这不是一个好主意,因为文本框的数量会发生变化,这意味着布尔变量的数量不同(每个文本框一个变量) - 您是否会在每次文本框时创建一个额外的变量被创建了吗?
  • 我可以不只使用全局变量并在显示 msgbox 后进行相应设置吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2018-04-20
  • 1970-01-01
  • 1970-01-01
  • 2020-03-02
相关资源
最近更新 更多