マニアックですが、Accessにて、フォームに入れた【任意の件数】分だけ、レコード出力したい時にVBAとSQLを組み合わせて、クエリの中身を変更するサンプルです。
補足ですが、Access SQLではLIMITが使えません。
なので、SELECTの後に TOP 50 といった数を入れて、
その分だけ抽出するという書き方になります。
毎回書き換えれば良いのですが、作成者と利用者が分かれているなど、
フォーム側でコントロールしたかったので作成しました。
よろしければご活用ください。
Private Sub Sample()
Dim QDF As QueryDef
Dim RecLimit As String
Dim TargetTableName As String
Dim TargetQueryName As String
Dim TargetFormName As String
Dim TargetShapeName As String
Dim SqlString As String
'設定項目
TargetTableName = "T_order_3"
TargetFormName = "フォーム1"
TargetShapeName = "limit_num"
TargetQueryName = "STEP2"
'フォームの値の判定 NULLの場合は1000
If IsNumeric(Forms(TargetFormName).Controls(TargetShapeName).Value) Then
RecLimit = "TOP " & Forms(TargetFormName).Controls(TargetShapeName).Value
Else
RecLimit = "TOP 1000"
End If
'一旦テーブル削除
DoCmd.RunSQL "DELETE * FROM " & TargetTableName
SqlString = "INSERT INTO " & TargetTableName & " SELECT " & RecLimit & " * FROM STEP1;"
'該当のクエリの変更(数)
Set QDF = CurrentDb.QueryDefs(TargetQueryName)
QDF.SQL = SqlString
'クエリの実行
DoCmd.OpenQuery TargetQueryName, acViewNormal, acReadOnly
'テーブルを開く
DoCmd.OpenTable TargetTableName, acViewNormal, acEdit
End Sub