使用VBA设置Access Form的Control值

时间:2012-09-19 17:23:41

标签: ms-access ms-access-2010

我需要将Access 2007项目移动到Access 2010.除了我的VBA代码之外,大部分内容都工作得很好。

此特定VBA代码从PDF表单加载值,然后将这些值分配给表单控件。这允许用户手动输入他们的数据,或者让其他人(他们无法访问托管Access数据库的网络)填写表单并让某人为他们导入。

当我运行代码时,它会在Access 2010中挂起以下代码:

If Title <> "" Then
        Me!Title = Title 
End If

我得到的错误信息是:

  

运行时错误'2448':

     

您无法为此对象指定值。

以下是一些更多的背景代码,如果有帮助的话:

Dim AcroApp As Acrobat.CAcroApp
    Dim theForm As Acrobat.CAcroPDDoc
    Dim jso As Object
    'Declare variables by Tab used in Form view
    'Tab 1
    Dim Title, First_Name, Middle_Name, Last_Name, Maiden_Name As String

...

'Form Load
    Set AcroApp = CreateObject("AcroExch.App")
    Set theForm = CreateObject("AcroExch.PDDoc")
    theForm.Open (FileName.Value)
    Set jso = theForm.GetJSObject

...

'Tab 1 Data Load
    Title = jso.getField("Title").Value

...

'Data Display
    MsgBox "Values read from PDF:" & vbCrLf & vbCrLf & "Title:" & Title & vbCrLf & _

...

        'Tab 1 Data Populate
    If Title <> "" Then
        Me!Title = Title
    End If

在上面的代码中,表单中的值正确显示在“消息”框中。所以我知道变量正在填充正确的值。另外,我在VBA编辑器中引用了Adobe Acrobat 10.0类型库。同样,这个代码在Access 2007下运行得很好。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

错误消息告诉您无法为Me!Title分配任何内容。在这种情况下,Me!Title是只读的。

但是Me!Title是什么?在调试模式下,请参阅立即窗口中的内容:

Debug.Print TypeName(Me!Title)

同样在调试模式下,确认您无法将字符串值分配给Me!Title

Me!Title = "foo"

您似乎有多个名为“标题”的内容。您Dim变体标题。还有Me!Title ......也许还有其他人?

可能有助于避免混淆,给他们不同的名字。例如, 如果Me!Title是文本框,则可以将其重命名为txtTitle。您可以将变量变量命名为varTitle

我认为您还应该检查对象浏览器和/或联机帮助,以查看Access 2010对象模型是否包含可能在此处干扰的名为Title的任何内容。