【问题标题】:Excel UserForm textbox not updating when ControlSource cell changes当 ControlSource 单元格更改时 Excel 用户窗体文本框不更新
【发布时间】:2012-05-10 01:23:56
【问题描述】:

我有一个带有各种文本框的用户表单,这些文本框的 ControlSource 属性设置为 Sheet1 中的单元格。还有一个命令按钮。

单击命令按钮可从 SQL Server 数据库中检索数据并填充 Sheet1。但是,除非我关闭用户表单并重新打开它,否则文本框不会刷新。我已尝试将 UserForm1.Repain 作为 CommandButton Click 事件的最后一行,但它仍然无法正常工作。

【问题讨论】:

  • 只是猜测,但您是否尝试过重新分配 ControlSource 属性? IE。删除它,然后重新应用它。 #MightWork
  • 这行得通,但我有一百多个文本框绑定到不同的单元格,我不想在代码中全部更新。

标签: excel vba userform


【解决方案1】:

好的,在我之前的评论的基础上,您可以执行以下操作来自动重新加载表单上每个文本框的 ControlSource

Dim ctl As Control

For Each ctl In Me.Controls
    If TypeOf ctl Is MSForms.TextBox Then
        ctl.ControlSource = ctl.ControlSource
    End If
Next ctl

Set ctl = Nothing

【讨论】:

    【解决方案2】:

    我不太明白...试图复制您的问题,但我没有问题。我使用了以下代码

    Private Sub CommandBut_Click()
    Dim cnn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim sqls As String
    Dim myRec As Integer
    Set rs = New ADODB.Recordset
    Set cnn = New ADODB.Connection
    
    cnn.ConnectionString = "UID=***;PWD=***;DSN=***;"
    
    sqls = "select data1, data2 from someRandomTable where data1 = '" & textbox1 & '" and data2 = '" & textbox2 & '"
    rs.Open sqls, cnn.ConnectionString, adOpenStatic
    
     Dim z As Integer
    z = 1
    If rs.RecordCount > 0 Then
       rs.MoveFirst
    
      Do While Not rs.EOF
      Cells(z, 1).Value = rs.Fields(0).Value
              Cells(z, 2).Value = rs.Fields(1).Value
                  z = z + 1
            End With
        rs.MoveNext
      Loop
      Else
      MsgBox "nothing found", vbCritical
    End If
    Set rs = Nothing
    Set cnn = Nothing
    End Sub
    

    我已将 TextBox1,2 的 ControlSourceProperty 设置为 sheet1!A1 和 B1。

    CommandBut_Click 将读取文本框的值,然后用 SQL 覆盖它,它确实会更新 textbox1 和 2 的值。

    【讨论】:

    • 我的代码将数据正确返回到工作表。我遇到的问题是在用户窗体中向用户显示它。这是我用于显示的代码: txtSurname.ControlSource = "Sheet1!B2" txtTitle.ControlSource = "Sheet1!C2" txtFirstForename.ControlSource = "Sheet1!D2" txtOtherForenames.ControlSource = "Sheet1!E2" 等等(超过 100 个文本框)。在设计时设置 ControlSource 属性应该不需要这样做,但它似乎不起作用。
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2023-03-07
    • 2011-04-11
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多