循环访问表单上的文本框并更改数据

时间:2013-05-01 11:21:59

标签: vba if-statement textbox access-vba

我正在尝试在访问表单打开时更改数据。在那一刻,数据显示为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

3 个答案:

答案 0 :(得分:4)

您的问题出在您的文本框参考中。 acTextBox不是文本框。它只是一个显示控件类型是文本框的值 所以,当你说“如果ctlVar.ControlType = acTextBox然后”时,这是正确的。
但是当你说'如果acTextBox.text =“True”然后'时,这是不正确的。您不再引用控件了。它应该是'如果ctlVar.text =“True”那么'。 ctlVar是您对控件的引用。

此外,您需要在更改值之前将焦点设置到文本框上。以下是您的代码应该是什么样的:

For Each ctlVar In Me.Controls
  If ctlVar.ControlType = acTextBox Then
      If ctlVar.Value = "True" Then
         ctlVar.Value = "yes"
      End If
End If

答案 1 :(得分: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

答案 2 :(得分:-3)

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

Private Sub Form_Load()

      acTextBox.Caption = "Yes"

End Sub