3

これに少し苦労して、各レコードの ID とその他の情報をリストするデータシート フォームを作成しました。これまでのところ、各 ID をハイパーリンクとして開き、それを別のフォームに渡す VBA コードを見つけました。

私が抱えている問題は、フォームをポップアップまたはモーダルウィンドウで開きたいということです。これまでのコードは次のとおりです。

Private Sub ID_Click()
    Dim varWhereClause As String
    varWhereClause = "ID = " & Me!ID
    DoCmd.OpenForm "Copy Of test", , , varWhereClause
End Sub
4

2 に答える 2

9
DoCmd.OpenForm "Copy Of test", , , varWhereClause, ,acDialog

これはポップアップとモーダルになりますが。

于 2012-11-01T10:12:31.047 に答える
4

との小さな欠点はacDialog.PopUpフォームが Access のメイン ウィンドウの外側のウィンドウとして開くことです。.Modalそのため、可能であれば使用することを好みます。

他の開いているフォームをブロックしたいだけの場合Me.Modal = Trueは、フォームの open イベントで一時的に行うこともできます。

の欠点.Modalは、待機しないことです。DoCmd.OpenForm , , , , , acDialogフォームが閉じられるまで戻りません。このような同期呼び出しは、非常に役立つ場合があります。

Access のメイン ウィンドウ内acDialog/PopUpに留まる like 呼び出しを行うには、フォーム内でちょっとしたトリックを使用できます。

Private bFormOpen As Boolean

Public Sub ShowModal()
    SetFocus ' Make the form visible

    On Error GoTo ForcedClose
    bFormOpen = True
    Do While bFormOpen ' Wait until the form is closed
        Sleep 50
        DoEvents
    Loop

ForcedClose:
    Exit Sub
End Sub

Private Sub Form_Unload(Cancel As Integer)

    bFormOpen = False

End Sub

次のようにフォームをインスタンス化できます。

Dim f As New Form_Name

f.Modal = True
Call f.ShowModal

Set f = Nothing
于 2015-04-15T18:31:15.770 に答える