0

私の機能:

Public Function openRpt(strReportName As String, form as ??, subform as ??)
    On Error Resume Next
    If (Forms![form]![subform].Form.lock = False) Then
        DoCmd.RunCommand acCmdSaveRecord
    End If
    DoCmd.OpenReport strReportName, acViewPreview, "", _
        "[num]=Forms![form]![subform].Form.[num]"
End Function

subformロックされていない場合はレコードを保存し、レポートを起動します。適切なフォームを指し、引数として与えられる一致する変数を使用して切り替えたいと思いfromます。subform

  1. どのタイプの変数を使用すればよいですか?
  2. 「!」の使用の違いは何ですか? と '。' プロパティにアクセスするには? という事は承知しています '!' コントローラーと「.」にアクセスするために使用されます。テーブル レコードへのアクセスに使用されますね。
4

1 に答える 1

2

for (1):
まず、変数フォームやサブフォームを呼び出したくなるかもしれませんが、使用する名前が予約済みの名前と一致したり、近い場合にエラーが発生する可能性があることに注意してください。
また、ロックはフォームまたはサブフォームの有効なプロパティではありません。フォームが変更されたかどうかをテストする場合は、次のようにテスト.Dirty します。関数を次のようにコーディングします。

Option Explicit
Public Function openRpt(strReportName As String, frm as String, sFrm as string)
    If (Forms(frm).Form(sFrm).Form.Dirty = True) Then
        DoCmd.RunCommand acCmdSaveRecord
    End If
    DoCmd.OpenReport strReportName, acViewPreview, "", _
        "[num]=Forms(""" & frm & """).Forms(""" & sFrm & """).Form.[num]"
End Function

for (2): Microsoft ブログより

  • ドットは早期バインディングを提供し、コンパイル時に解決されます。バングは実行時に解決されます。
  • フォームの場合、基になるクエリのコントロールとフィールドは両方とも、フォームのタイプ ライブラリにあるため、ドットを介して参照できます。
  • また、フォームの場合、実行時に基になるクエリを変更すると、フォームのタイプ ライブラリの更新は実行時に発生しないため、古いクエリのフィールドへのドット参照は実行時に失敗します。
  • ドットは事前にバインドされているため、IntelliSense は既定で、強打ではなくドットで発生します。
  • dot は (アーリー バインドされているため) bang よりも高速ですが、パフォーマンスの違いが実際に問題になるほど、これらの項目を使用する十分なコードを実行する人はいません。
于 2012-12-27T17:50:39.617 に答える