адрес объекта по переменной - PullRequest
0 голосов
/ 02 июля 2019

В моей форме есть 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

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

Как отмечалось ранее, вам необходимо получить доступ к свойству Controls формы.

Кроме того, вы, вероятно, хотите сохранить префикс текстового поля и количество текстовых полей в константах, чтобы сделать ваш код более читабельным.

Наконец, даже Microsoft предлагает заменить 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

Если вы уточните свой вопрос, чтобы указать, как конкретно текстовые поля относятся к новым записям, я могу обновить свой ответ, чтобы обратиться к этой части.

2 голосов
/ 02 июля 2019

Заменить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...