1

構築中の Access DB があります。私の VB 教育は、Access が行うことよりも DB をカスタマイズするために必要な断片的なものなので、非常にむらがあります。押すと次のコードを実行するボタンがあります。コードは正常に動作します。問題は、VB 画面で [デバッグ] メニューの [コンパイル] に移動すると、「コンパイル エラー: プロパティの無効な使用」というエラーが表示されることです。

' 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 に答える