在我的表单中,我有8个文本字段,它们用连续的数字命名(tbx_MyID 1 至tbx_MyID 8 )。我想遍历所有8个文本字段,以根据文本字段的值创建新记录。因此,我试图将文本字段名称存储在变量中,并通过此变量来处理文本字段。这只会产生一个错误,说明该对象不存在。
Private Sub btn_Enter_Click()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("tbl")
Dim x As Integer
x = 1
While x < 9
Dim y As String
y = "tbx_MyID" & x
rs.AddNew
rs.Fields("ID") = Me!y.Value
x = x+1
Wend
rs.Update
rs.Close
Set rs = Nothing
db.Close
End Sub
答案 0 :(得分:2)
替换rs.Fields("ID") = Me!y.Value
与rs.Fields("ID") = Me.Controls("tbx_MyID" & x)
它将起作用,因为基础控件类型(文本框)的默认属性是“文本”属性。
有很多方法可以动态引用表单上的控件。为文本框声明一个变量,获取对其的引用,然后专门引用Text属性,可能会更清楚:
Dim ctl As TextBox
Dim x As Integer
x = 1
While x < 9
ctl = Me.Controls("tbx_MyID" & x)
rs.AddNew
rs.Fields("ID") = ctl.Text
x = x+1
Wend
答案 1 :(得分:2)
如前所述,您需要访问表单的Controls属性。
另外,您可能希望将文本框前缀和文本框的数量存储在常量中,以使代码更具可读性。
最后,even Microsoft suggests将While...Wend
循环替换为Do...Loop
构造。因此更新后的代码可能如下所示:
Option Explicit Private Const TEXT_BOX_PREFIX As String = "tbx_MyID" Private Const TEXT_BOX_COUNT As Integer = 8 Private Sub Command18_Click() Dim x As Integer Dim txtBox As Access.TextBox For x = 1 To TEXT_BOX_COUNT Set txtBox = Me.Controls(TEXT_BOX_PREFIX & x) Debug.Print txtBox.Value ' put your code to add/update records here. Next x End Sub
如果您要澄清问题以表明文本框与新记录的关系如何,我可以更新答案以解决这一部分。