Olá Korn, tudo bem? Desculpe a demora é q tava dificíl mas acho q cheguei numa solução razoável para o seu problema... tomara q consiga fazer o q vc quer...
O q eu fiz foi fazer um código q monta um filtro para q o relatório no access q vc montou abra já filtrado, digamos assim. A idéia é baseada na escolha de páginas q temos no word ou no adobe... Vc faz assim para imprimir: 1;4;10-16;20;22;25-30;33
certo? Se vc quer imprimir as páginas 1, 4, da 10 a 16, 20, 22, 25 a 30 e 33 vc coloca essa expressão:1;4;10-16;20;22;25-30;33 certo?
Bom segue o código q faz este filtro e q inclusive abre o seu relatório no access
Text1 é uma texbox
Consideremos Text1 como passagem dos parâmetros ok? Como vc digitasse 1;4;10-16;20;22;25-30;33 dentro desta caixa de texto
************************************************************
'Declaração das variáveis
Dim i As Integer, j As Integer, intSQL As Integer
Dim s As String, strSQL As String, strCampo As String
Dim s2() As String, strParteSQL() As String
Dim ObjectAccess As Object
'Este código vc coloca num botão por exemplo
Text1 = Trim(Text1)
If Text1 = "" Then Exit Sub
For i = 1 To Len(Text1)
If Mid(Text1, i, 1) < Chr(48) Or Mid(Text1, i, 1) > Chr(57) Then
If Mid(Text1, i, 1) <> ";" And Mid(Text1, i, 1) <> "-" Or _
Right(Text1, 1) = ";" Or Right(Text1, 1) = "-" Then
MsgBox "Existem caracteres inválidos", vbCritical, "Erro no filtro"
Exit Sub
End If
End If
Next
For i = 1 To Len(Text1)
If Mid(Text1, i, 1) = ";" Then j = j + 1
Next
ReDim s2(j) As String
j = 0
For i = Len(Text1) To 1 Step -1
If Mid(Text1, i, 1) <> ";" Then
s = Mid(Text1, i, 1) & s
If i - 1 = 0 Then s2(j) = s
Else
s2(j) = s
s = ""
j = j + 1
End If
Next
For i = 0 To j 'Conta a qtde de intervalos existentes na expressão, exemplo de intervalo: 6-8
If InStr(s2(i), "-") > 0 Then intSQL = intSQL + 1
Next
ReDim strParteSQL(intSQL - 1) As String
intSQL = 0
For i = 0 To j 'Monta a sentença BETWEEN
If InStr(s2(i), "-") > 0 Then
strParteSQL(intSQL) = " BETWEEN " & Left(s2(i), InStr(s2(i), "-") - 1) & _
" AND " & Right(s2(i), InStr(StrReverse(s2(i)), "-") - 1)
intSQL = intSQL + 1
End If
Next
intSQL = intSQL - 1
campo = InputBox("Digite o nome do campo a ser filtrado", "Filtro")
strSQL = campo & " "
For i = 0 To intSQL 'Formação dos BETWEEN'S
If i = intSQL Then strSQL = strSQL & strParteSQL(i)
If i < intSQL Then strSQL = strSQL & strParteSQL(i) & " OR " & campo & " "
Next
For i = 0 To j 'Formação dos campos avulsos: campo = numero
If InStr(s2(i), "-") = 0 Then
strSQL = strSQL & " OR " & campo & " = " & s2(i)
End If
Next
'abrindo o relatório
Set ObjectAccess = CreateObject("access.application")
With ObjectAccess
.opencurrentdatabase filepath:="c:caminho_do_banco.mdb" 'caminho do banco
.Visible = True
.DoCmd.OpenReport "NomedoRelaorio", acViewPreview, , strSQL, acWindowNormal
.Closecurrentdatabase
End With
Set ObjectAccess = Nothing
************************************************************
Vc pode fazer uma expressão de filtro de até 32.768 caracteres se eu não me engano... acho q dá né?

O único problema é q mesmo eu pedindo para abrir o relatório em modo de visualização ele já está imprimindo... mas o filtro está funcionando!! Menos mal né?
Ah, no access coloque como origem do registro a tabela dos dados q serão filtrados ok??
qq problema é só postar
t+