Loginという名前のログインフォームを作成し、ユーザー名をtxtEmployeeテキストボックスに入力しました。MSAccessの別のフォームの2ページ目に同じものを表示する必要があります。
DoCmd.OpenForm
を使用すると、最後のパラメーターとして任意の値を渡すことができます。この値は、新しいフォームで Me.OpenArgs
:
' Invoked by some Button on the first form '
Sub GoToSecondPage()
DoCmd.OpenForm "MySecondPage", acNormal, , , , , txtEmployee.Value
End Sub
' Second form '
Sub Form_Open(Cancel As Integer)
If Not IsNull(Me.OpenArgs) Then
lblShowEmployeeName.Value = Me.OpenArgs
End If
End Sub
(コード例はテストされていません。)
区切り文字列をOpenArgsパラメーターとして渡すことができます。
DoCmd.OpenForm FormName:="miscForm", OpenArgs:=paramstring
DoCmd.OpenFormにパラメーターとして渡されたパイプ区切り文字列を処理するためのルーチンは次のとおりです。
Dim Pstring As Variant
If Len(Me.OpenArgs) > 0 Then
Pstring = Split(Me.OpenArgs, "|")
var1 = Pstring(0)
<etc..>
End If
個人的には、フォームを開くときに公開引数を渡します。たとえば、フォームAから次のように記述します
DoCmd.OpenForm "frmB", , , , , acDialog,”Badger”
そして、フォームBのOnOpenイベントで、このように送信したものをキャプチャできます。
Me.txtSomething=Me.OpenArgs
ただし、渡すことができるのは1つだけです。開いている引数にパイプ区切り文字列を渡してから、それを分割します。
いくつかのアイデア...
ログインユーザー名フィールドでAfterUpdateイベントを使用してグローバル変数に名前を書き込み、2番目のページのフィールドにOnLoadイベントを入力します。
または、フォームのログを常に開いたままにする場合は、フィールドのデフォルト値を= [Forms]![LogInForm]![UserName]に直接設定できます。
最初のフォームの実行後に保存するグローバル変数を保存および/または取得するパブリック関数を作成してみませんか?これにより、1つ以上のフォームで使用できるだけでなく、クエリ内の条件としても使用できます(たとえば、保存したユーザー名に一致するレコードを返すため)。
これは「偽の」セキュリティであることに同意しますが、ニーズに応じて十分な場合もあります。環境文字列usernameをユーザーテーブルのエントリに一致させる前に、これを実装しました。
ところで、私はこの機能をセキュリティではなくパーソナライズと呼んでいます。
ちょっとした考え。