11

使用時にOpenArgsパラメータを使用して値を送信していますDoCmd.OpenForm:

DoCmd.OpenForm "frmSetOther", acNormal, , , acFormAdd, acDialog, "value"

次にMe.OpenArgs、開いたフォーム内で使用してを取得します。元の文字列の代わりにNull値を送信することがあります。なにが問題ですか?

4

7 に答える 7

27

これは、フォームがすでに開かれている場合 (たとえば編集モードで)、開発中によく発生し、 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
于 2008-11-03T15:28:10.943 に答える
8

私はちょうどこの問題を抱えていました。レポートはすでに開いているが表示されていないため、Arg文字列は渡されませんでした。コードがでクラッシュしたときは開いたままでしたNull string error

解決策は、即時ウィンドウでレポートを閉じることでした。

Docmd.Close acReport, "myReport"

それは私のバグを修正し、argsは正しく渡されました。

于 2012-10-14T04:01:00.903 に答える
3

この「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 
于 2008-11-03T14:28:45.710 に答える
0

私は私の問題に対する答えを見つけたと思います:

私の経験では、フォームを開いた直後に OpenArgs を処理する必要があります。(リンク)

OpenArgs 値を使用する前にブレークを入れてこれを確認しましたが、null でした。しかし、ブレークを削除すると、プログラムはエラーを表示しません。これは、開発中にのみ発生する必要があります。

于 2008-11-03T13:10:51.780 に答える
0

ここで答えてください。デザイン モードであっても、フォームが既に開いている場合があります: http://www.tech-archive.net/Archive/Access/microsoft.public.access.formscoding/2007-02/msg00928.html

于 2009-05-02T06:36:12.990 に答える
0

ユーザーが完了したコントロールから取得した値ですか? openform ラインを実行する前に、フォーカスがコントロールから移動していることを確認しますか?

編集: コントロールの value プロパティは、これを行わない限り、null の可能性がある前の値と等しくなります。

于 2008-11-03T13:04:35.367 に答える