もりしんさん、こんにちは。
以下は[クエリA]と[クエリB]のそれぞれのレコードを昇順に読み、[連番]の若い方から順番にそれぞれのレポートを印刷します。
[クエリA][クエリB]それぞれに数値型の[連番]フィールドを持ち、[連番]で昇順に並んでいるとします。
また、[クエリA][クエリB]の[連番]は重複しないとします。
[レポートA]は[クエリA]をレコードソースとし、[レポートB]は[クエリB]をレコードソースにしており、それぞれのレポートに[連番]テキストボックスを設置し、レポートの[連番]はそれぞれのクエリの[連番]と連結しているとします。
※テストする時は10レコード以内の少ないレコードでお試しください。
ツール > 参照設定 で「Microsoft AciveX Data Objects 6.1 Library」にチェックを入れて下さい。
<追記>
Access2016で作ったのでAccess2010だと「Microsoft AciveX Data Objects 2.X Library」かも。
また、Access2010の環境は無いのでテスト出来ないです。
上手く動かなかったらごめんなさい。
Private Sub 印刷_Click()
On Error GoTo MSG1
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim ds As ADODB.Recordset
Dim WkRepName As String
Dim WkNo As Long
Dim FlgA As Integer
Dim FlgB As Integer
Dim ans As Integer
ans = MsgBox("印刷を開始します。よろしいですか?", vbYesNo + vbQuestion, "印刷")
If ans = vbNo Then
Exit Sub
End If
FlgA = False
FlgB = False
Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset
rs.Open "クエリA", cn, adOpenForwardOnly, adLockReadOnly
If rs.EOF Then
FlgA = True
End If
Set ds = New ADODB.Recordset
ds.Open "クエリB", cn, adOpenForwardOnly, adLockReadOnly
If ds.EOF Then
FlgB = True
End If
Do While FlgA = False And FlgB = False
If rs![連番] < ds![連番] Then
WkRepName = "レポートA"
WkNo = rs![連番]
DoCmd.OpenReport WkRepName, acViewNormal, , "[連番]=" & WkNo
'Debug.Print "WkRepName:" & WkRepName & " WkNo:" & WkNo
rs.MoveNext
If rs.EOF Then
FlgA = True
End If
Else
WkRepName = "レポートB"
WkNo = ds![連番]
DoCmd.OpenReport WkRepName, acViewNormal, , "[連番]=" & WkNo
'Debug.Print "WkRepName:" & WkRepName & " WkNo:" & WkNo
ds.MoveNext
If ds.EOF Then
FlgB = True
End If
End If
Loop
If FlgA = False Then
Do While rs.EOF = False
WkRepName = "レポートA"
WkNo = rs![連番]
DoCmd.OpenReport WkRepName, acViewNormal, , "[連番]=" & WkNo
'Debug.Print "WkRepName:" & WkRepName & " WkNo:" & WkNo
rs.MoveNext
If rs.EOF Then
GoTo End_Rtn
End If
Loop
End If
If FlgB = False Then
Do While ds.EOF = False
WkRepName = "レポートB"
WkNo = ds![連番]
DoCmd.OpenReport WkRepName, acViewNormal, , "[連番]=" & WkNo
'Debug.Print "WkRepName:" & WkRepName & " WkNo:" & WkNo
ds.MoveNext
If ds.EOF Then
GoTo End_Rtn
End If
Loop
End If
End_Rtn:
ds.Close: Set ds = Nothing
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
Exit Sub
MSG1:
Call MsgBox(Err.Number & ":" & vbCr & Err.Description & vbCr & vbCr & "エラーが発生しました。", vbCritical, "エラー")
GoTo End_Rtn
End Sub