【问题标题】:Excel-VBA How to know which dynamically created UserForm TextBox has changed?Excel-VBA 如何知道哪个动态创建的 UserForm TextBox 发生了变化?
【发布时间】:2012-09-17 13:37:04
【问题描述】:

我有一个在执行期间创建文本框的 excel 用户窗体。代码如下;

Dim CompHandler() As New CCompHandler
Dim tb As MSForms.TextBox   
Dim count As Integer
For i in Range(something)
    If i = anotherthing Then
        Set tb = UserForm1.Controls.Add("Forms.TextBox.1", "tb" & count)
        With tb
            .Width = iTbWidth
            .Top = count * distance
            .Left = iTbLeft
            .Height = iTbHeight
            .Value = Cells(row, column)
            ReDim Preserve CompHandler(0 To count)
            Set CompHandler(count).TextBoxGroup = tb
        End With
    count = count + 1
    End If
Next i

我想将更改后的值写回相应的单元格。 我已经能够在盒子发生变化时获得新值,并在 class called CCompHandler 上使用此代码获得新值:

Option Explicit

Public WithEvents TextBoxGroup As MSForms.TextBox

Private Sub TextBoxGroup_Change()

    MsgBox TextBoxGroup

End Sub

所以.. 关于如何获取哪个文本框已更改的任何想法? 或者也许有更好的方法来做到这一点? 提前致谢

【问题讨论】:

  • CompHandler 是如何定义的? Componentes 是用户表单吗?如果不做很多猜测,我就无法测试或摆弄这个。介意给我们剩下的代码吗?
  • @DanielCook:我说得更清楚了。

标签: vba excel event-handling excel-2010


【解决方案1】:

Tag 属性通常用于这样的事情。在创建时添加如下内容:

With tb
  ...
  .Tag = i.Address
...
End With

您可以稍后访问 Tag 属性,例如:

Debug.Print tbWhoseValueHasChanged.Tag

你的代码 sn-p 有很多未定义/不清楚的变量,包括i。我假设它是上面的一个范围变量。

【讨论】:

  • 谢谢!但是我怎样才能在类处理程序中使用它呢?或者有没有更好的使用方法?
  • 你说当TextBox发生变化时你可以得到,所以在那个时候访问它的Tag属性。它是持久的。见编辑。
  • 它刚刚工作。谢谢!我觉得这只是一个愚蠢的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多