使用時にOpenArgs
パラメータを使用して値を送信していますDoCmd.OpenForm
:
DoCmd.OpenForm "frmSetOther", acNormal, , , acFormAdd, acDialog, "value"
次にMe.OpenArgs
、開いたフォーム内で使用して値を取得します。元の文字列の代わりにNull値を送信することがあります。なにが問題ですか?
これは、フォームがすでに開かれている場合 (たとえば編集モードで)、開発中によく発生し、 docmd.OpenForm 関数を呼び出します。この場合、フォームは通常 (ビュー) モードに配置され、OnOpen および OnLoad イベントが発生しますが、docmd.OpenForm に渡した内容に関係なく、OpenArgs プロパティは null に設定されます。
解決策は、docmd.OpenForm でフォームを呼び出す前にフォームを閉じることです。ただし、私が使用したい回避策があります。OnOpen イベントで me.OpenArgs が null かどうかを確認し、null の場合はデバッグ値に置き換えます。
if not isnull(me.OpenArgs) then
myvalue = me.OpenArgs
else
msgbox "Debug mode"
myValue = "foo"
endif
私はちょうどこの問題を抱えていました。レポートはすでに開いているが表示されていないため、Arg
文字列は渡されませんでした。コードがでクラッシュしたときは開いたままでしたNull string error
。
解決策は、即時ウィンドウでレポートを閉じることでした。
Docmd.Close acReport, "myReport"
それは私のバグを修正し、argsは正しく渡されました。
この「openArgs」引数に代わる非常に興味深い方法は、currentProject.allforms("myFormName") オブジェクトの .properties コレクションを使用することです。フォームに値を渡す必要がある場合 (たとえば、別のコントロールや別のフォームから継承されたフィルターなど)、フォームに対応するプロパティを追加し、値をこのプロパティに追加するだけです。
例:
addPropertyToForm "formFilter","Tbl_myTable.myField LIKE 'A*'",myFormName
呼び出された関数は、オブジェクトの「formFilter」プロパティの値を更新しようとします。プロパティが存在しない場合 (エラー 2455 が発生)、エラー管理コードに新しいプロパティとして追加されます。
Function addPropertyToForm(_
x_propertyName as string, _
x_value As Variant, _
x_formName As String)
As Boolean
On Error GoTo errManager
CurrentProject.AllForms(x_formName).Properties(x_propertyName).Value = x_value
addPropertyToForm = True
On Error GoTo 0
Exit Function
errManager:
If Err.Number = 2455 Then
CurrentProject.AllForms(x_formName).Properties.Add x_propertyName, Nz(x_value)
Resume Next
Else
msgbox err.number & ". The property " & x_propertyName & "was not created"
End If
End Function
私は私の問題に対する答えを見つけたと思います:
私の経験では、フォームを開いた直後に OpenArgs を処理する必要があります。(リンク)
OpenArgs 値を使用する前にブレークを入れてこれを確認しましたが、null でした。しかし、ブレークを削除すると、プログラムはエラーを表示しません。これは、開発中にのみ発生する必要があります。
ここで答えてください。デザイン モードであっても、フォームが既に開いている場合があります: http://www.tech-archive.net/Archive/Access/microsoft.public.access.formscoding/2007-02/msg00928.html
ユーザーが完了したコントロールから取得した値ですか? openform ラインを実行する前に、フォーカスがコントロールから移動していることを確認しますか?
編集: コントロールの value プロパティは、これを行わない限り、null の可能性がある前の値と等しくなります。