是否可以将字符串转换为对象引用?

时间:2013-05-20 14:26:01

标签: ms-access ms-access-2007 access-vba

我正在尝试在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

此练习的目的是将日历的值(Me.Calendar0.Value)传递给子表单上的字段(Forms!strForm!strSubForm!strField)。我只是无法弄清楚如何以VBA接受它的方式编写它。我得到一个“对象变量或没有设置块变量”错误。

2 个答案:

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

答案 1 :(得分:2)

你有......

Dim frm As Form

...但稍后您尝试使用frm而不先将其设置为表单实例。这就是为什么你得到关于未设置的对象变量的错误。

但还有另一个问题可能在等着你。表单可以包含子表单控件,该控件的名称可能与其包含的表单的名称不同。确保您使用的是子表单 control 的名称。

如果strSubForm是子窗体控件,那么这应该有用......

Forms(strForm).Controls(strSubForm).Form.Controls(strField) = Me.Calendar0.Value