2013-05-20 2 views
2

Я пытаюсь сделать что-то более общее в базе данных Access 2K7. У меня есть форма, что я передаю некоторую информацию на использование OpenArgs. Я передаю имя формы, имя подформы и имя поля, поэтому поле может быть заполнено.Можно ли превратить строку в ссылку на объект?

Я столкнулся с проблемой «перестройки» ссылки на поле. Я попытался следующие, но VBA не нравится:

Dim strForm, strField, strSubForm As String 
Dim frm As Form 

strForm = Left(Me.OpenArgs, InStr(Me.OpenArgs, "|") - 1) 
Brk1 = Mid(Me.OpenArgs, InStr(Me.OpenArgs, "|") + 1) 
strField = Left(Brk1, InStr(Brk1, "|") - 1) 
strSubForm = Mid(Brk1, InStr(Brk1, "|") + 1) 

X = "Forms!" & strForm 
Y = X & "!" & strSubForm 
Z = Y & "!" & strField 
frm(Z) = Me.Calendar0.Value 

Целью данного exercize является передать значение календаря (Me.Calendar0.Value) в поле на подчиненной (Формы ! strForm! strSubForm! strField). Я просто не могу понять, как написать это таким образом, что VBA примет его. Я получаю ошибку «Object variable или With block variable not set».

ответ

5

Лужение вокруг в редакторе VBA приводит меня подозревать, что что-то подобное может работать:

Dim sbf As SubForm 
Set frm = Forms(strForm) 
Set sbf = frm.Controls(strSubForm) 
sbf.Controls(strField).Value = me.Calendar0.Value 
Set sbf = Nothing 
Set frm = Nothing 
+0

Это было его! Благодаря! –

2

У вас есть ...

Dim frm As Form 

... но позже вы пытаетесь использовать frm без предварительной установки его в экземпляр формы. Вот почему вы получаете ошибку об измененной переменной объекта.

Но есть еще одна проблема, которая может вас укусить. Форма может содержать элемент управления подформы, и имя этого элемента управления может быть не таким же, как имя формы, которую он содержит. Убедитесь, что вы используете имя подформы control.

Если strSubForm является контроль подчиненной, это должно работать ...

Forms(strForm).Controls(strSubForm).Form.Controls(strField) = Me.Calendar0.Value 
Смежные вопросы