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