erinaldo 9/12/2015, 18:36
Ola, pessoal esta resolvido o meu problema, estou postando o código abaixo, pois ainda acho que pode servir para outras pessoas, esse código imprimi todos os orçamentos pendentes no formulário continuo!!!! eu optei somente gerar o PDF.. e Armazenar em uma pasta especifica...
Resolução: o loop era executado no subformulário, porem quando gerava o relatório so abria o primeiro registro do form,
ai eu coloquei dentro do loop .requery para eliminar o registro que ja havia sido gerado e deu certo...
fica ai a dica.... obrigado a todos...
- Código:
On Error GoTo TratareiErro
Dim strArquivo As String
Dim strLocal As String
Dim objAnexo As Object
Dim strCaminho As String
'Variável para referenciar o banco de dados
Dim Db As DAO.Database
'Variável para referenciar o conjunto de registros
Dim Rs As DAO.Recordset
'Variável que armazenará o n° total de registros a serem percorridos no loop
Dim Contador As Long
'Variável que armazenará a contagem de registros a cada passada do loop
Dim ContaOProgresso As Long
'Instancio o objeto banco de dados
'Set Db = OpenDatabase(CurrentProject.Path & "\banco\Back-End.accdb")
Set Db = CurrentDb()
'Instancio o recordset, ou seja, o conjunto de registros da tabela
'Set Rs = Db.OpenRecordset("tbl_orcamento")
Set Rs = Me.sub_lista_orcamento.Form.RecordsetClone
'Movimento no recordset até o ultimo registro para precisar o número de registros no recordset
Rs.MoveLast
'Alimento a variável Contador com o total de registros no conjunto de dados, que é o recordset
Contador = Rs.RecordCount
'Movo para o primeiro registro do recordset
Rs.MoveFirst
'Utilizo o SysCmd para executar uma barra de progresso para indicar a que pé encontrará o processamento
SysCmd acSysCmdInitMeter, "Realizando as alterações, aguarde...", Contador
'Inicio o loop que irá do primeiro registro ao ultimo
'Veja que já sabemos a quantidade a ser percorrida na variável Contador
For ContaOProgresso = 1 To Rs.RecordCount
'Atualizo as informações da barra de progresso
'Mostrará a evolução de 1 a cada valor passado do Contador
SysCmd acSysCmdUpdateMeter, ContaOProgresso
'Abro a edição na linha que estou passando
Rs.Edit
Rs!enviado = True
'DoCmd.OpenReport "relatorio_print", acPreview
strArquivo = Forms!frm_nao_enviados!sub_lista_orcamento!cliente & "_Numero_OC_" & Me.sub_lista_orcamento!numero_orcamento & ".pdf"
strLocal = "C:\Users\Vendas\Documents\ORÇAMENTO PDF\2015\" & strArquivo
DoCmd.OutputTo acOutputReport, "relatorio_print", acFormatPDF, strLocal
DoCmd.Close acReport, "relatorio_print"
'Atualizo o registro
Rs.Update
Me.sub_lista_orcamento.Requery
'E vou para o próximo
Rs.MoveNext
'Aqui acontece o loop, ou seja, retorno lá pra cima novamente
'apartir do For ContaOProgresso eu faço mesmo procedimento que fiz na linha de registro anterior.
Next ContaOProgresso
'Quando o For ContaOProgresso = 1 chegar ao total do Contador, o loop terá chegado ao seu final.
'Não resta mais nada a não ser fechar o recordset
Rs.Close
'E também o banco
Db.Close
'Remover a barra de progresso
SysCmd acSysCmdRemoveMeter
'E informar uma mensagem dizendo o número de registros percorridos
MsgBox "OK, Total de: " & Contador & " Orçamentos Gerados PDF", vbInformation, "Concluído"
Exit_TratareiErro:
Exit Sub
'Se algo impedir o funcionamento do código, emite uma mensagem informando ao usuário qual o erro
TratareiErro:
MsgBox "Ocorreu uma falha neste processamento." _
& vbCrLf & "Trata-se do erro n°: " & Err.Number _
& vbCrLf & "Descrição: " & Err.Description, vbCritical, "Erro inesperado"
Exit Sub