3

我正在尝试在访问表单打开时更改数据。此刻数据显示为 True,我想将其更改为 Yes。我已经尝试过了,但我是 vba 新手,我真的不知道我在做什么。我已经给所有文本框提供了相同的“QtTxtBox”标签,希望这会有所帮助,但它没有。以下是我到目前为止所得到的,有人可以帮助我吗?

      Dim ctlVar As Control
      For Each ctlVar In Me.Controls
        If ctlVar.ControlType = acTextBox Then
            If acTextBox.text = "True" Then
               acTextBox.text = "yes"
            End If
      End If
4

3 回答 3

6

您的问题出在您的文本框参考中。acTextBox 不是文本框。它只是一个显示控件类型是文本框的值。
因此,当您说“ If ctlVar.ControlType = acTextBox Then ”时,这是正确的。
但是当你说' If acTextBox.text = "True" Then '时,这是不正确的。您不再引用该控件。它应该是' If ctlVar.text = "True" Then '。ctlVar 是您对控件的引用。

此外,您需要在更改值之前将焦点设置在文本框上。这是您的代码应如下所示:

For Each ctlVar In Me.Controls
  If ctlVar.ControlType = acTextBox Then
      If ctlVar.Value = "True" Then
         ctlVar.Value = "yes"
      End If
End If
于 2013-05-01T14:45:02.063 回答
0

在弄清楚这些东西两天之后,这小块代码中包含了一些东西 - 甚至可能是你的问题......

Function disorder()
  For c = 0 To 9
    s = Screen.ActiveForm.Controls("" & "[" & c & "]" & "").Caption
    r = Int(9 * Rnd)
    Screen.ActiveForm.Controls("" & "[" & c & "]" & "").Caption = Screen.ActiveForm.Controls("" & "[" & r & "]" & "").Caption
    Screen.ActiveForm.Controls("" & "[" & r & "]" & "").Caption = s
  Next
End Function

为了确保焦点在我想要的表单上,我使用了表单上的默认按钮拾取的 SendKeys "{ENTER}"。在这种情况下,我有几个名为 [1] 和 [2] 等的控件,以便更容易地循环它们,但它们可以命名为任何名称。

循环遍历表单上的所有控件...

For Each c In Screen.ActiveForm.Controls
  With c
    If Caption = "" Then Caption = "New"
  End With
Next
于 2013-10-18T02:36:08.307 回答
-3

所以 - 当你构建表单时,你将文本框标题设置为 True - 对吗?好吧,如果您想在表单加载时更改它,请执行以下操作:

Private Sub Form_Load()

      acTextBox.Caption = "Yes"

End Sub
于 2013-05-01T14:08:47.777 回答