1

我有一个正在构建的 Access 数据库。我的 VB 教育是我需要定制数据库的点点滴滴,而不是 Access 所做的,所以它非常参差不齐。我有一个按钮,按下时会运行以下代码。代码工作正常。问题是当我进入 VB 屏幕并在 Debug 菜单下进行 Compile 时,我收到一条错误消息,指出“编译错误:属性的无效使用”。

' Memo Line Button Script
Private Sub Memo_Line_Click()
On Error GoTo Memo_Line_Click_Err

    If Me.Dirty Then Me.Dirty = False
    Memo_Line ([Forms]![Logform]![HLCtrl]) 'error highlights ![HLCtrl]

Memo_Line_Click_Exit:
    Exit Sub

Memo_Line_Click_Err:
    MsgBox Error$
    Resume Memo_Line_Click_Exit

End Sub

Memo_Line 指的是一个公共函数。该代码在下面列出。

' Copy Offer Memo Line Data to Clipboard Button Script
Public Function Memo_Line(HLC)
On Error GoTo Memo_Line_Click_Err

    DoCmd.OpenForm "Log-Memo Line", acNormal, "", "[HL#]=" & "'" & HLC & "'", , acNormal
    Call ClipBoard_SetData([Forms]![Log-Memo Line]![Memo])
    MsgBox ([Form_Log-Memo Line].[Memo] & " --- copied to Clipboard."), vbInformation, "Clipboard Details"
    DoCmd.Close acForm, "Log-Memo Line"

Memo_Line_Click_Exit:
    Exit Function

Memo_Line_Click_Err:
    MsgBox Error$
    Resume Memo_Line_Click_Exit

End Function
4

2 回答 2

1

丢弃函数调用中的括号。

Memo_Line [Forms]![Logform]![HLCtrl]

如果Memo_Line返回一个值并且您想对该值执行某些操作,则需要括号。

MyVariable = Memo_Line([Forms]![Logform]![HLCtrl])
Debug.Print Memo_Line([Forms]![Logform]![HLCtrl])

实际上,由于Memo_Line不返回值,因此您可以将其设为子例程而不是函数。我不建议您进行这种转换,但如果您这样做,请使用以下样式之一调用它:

Memo_Line [Forms]![Logform]![HLCtrl]
Call Memo_Line([Forms]![Logform]![HLCtrl])

在示例数据库中,您的表单包含一个名为“Memo Line”的命令按钮。在某些情况下,Access 会用下划线代替空格,因此"Memo Line"变为"Memo_Line"。那里的问题是您还有一个名为"Memo_Line"的函数。不幸的是,Access 认为您指的是命令按钮而不是此代码行中的函数:

Memo_Line ([Forms]![Logform]![HLCtrl]) 'error highlights ![HLCtrl]

将命令按钮名称更改为"cmdMemo_Line"后编译的代码没有错误。

毫无疑问,由空格与下划线引起的名称冲突让您大吃一惊。我发现最好避免在控件名称和其他对象名称中使用空格:表;字段;形式; 等等

于 2013-05-23T17:48:38.930 回答
-1

尝试使用这个而不是调用函数

应用程序。运行“Memo_Line”

于 2016-08-03T03:40:29.040 回答