Exportar a pdf de forma individual mediante vba
Buenas tardes
tengo una base la cual genera documentos en pdf a través de un formulario y una macro en VB, los genera de dos formas una por todos los registros de una tabla y la otra de forma individual siempre y cuando tengan una marca. He querido hacer modificaciones al vb para integrar una tercera opción en la cual genere de forma individual el documento ingresando un identificador, pero como no soy programado he tratado de entender el código y traspasarlo a mis necesidades, pero no me funciona, espero me puedan ayudar.
tengo 3 tablas, la primera "TblCartas" la cual tiene todos los registros, "TblCartas02" y "TblCartas03" las cuales tiene los registros con la información individual, ya que tengo 2 formularios uno para la tabla 03 y otro para la 02 ya que es distinta presentación pero la información es básicamente la misma. Dentro de la sección de código encontré la parte en la cual se generaban de forma individual:
Sub CartasMarcadas03() ' Exporta a PDF Dim SQL As String Dim Rs1 As Recordset ' Identifica las SubCuentas faltantes y agrega para estructurar la extracción. SQL = "SELECT TblCartas03.[Folio Carta],TblCartas03.MCE" SQL = SQL & " FROM TblCartas03" SQL = SQL & " WHERE TblCartas03.MCE = 'x'" ConsultaDatos SQL, Rs1 Rs1.MoveLast: Rs1.MoveFirst Dim strMensaje As String Dim IngRespuesta As Long strMensaje = ("Te dispones a generar " & Rs1.RecordCount & " archivos de cartas marcadas....deseas continuar?") IngRespuesta = MsgBox(strMensaje, vbYesNo + vbExclamation, "Aviso Importante") If IngRespuesta = 7 Then Exit Sub End If ' Obtiene el número de subcuentas faltantes Rs1.MoveFirst Do Until Rs1.EOF If Rs1.Fields(1) = "x" Then DoCmd.SetWarnings False 'Descarga información de la SubCta. TempVars!Rst = Rs1.Fields(0).Value DoCmd.SetWarnings False DoCmd.OutputTo acOutputReport, "InfCarta_Correo_03", "PDFFormat(*.pdf)", "C:\Cartas Correo\Cartas03\" & Rs1.Fields(0) & ".pdf", , , 0, acExportQualityPrint TempVars!Rst = Null End If 'Avanza registro de tabla SubCtas. Rs1.MoveNext Loop ' Libera variables de Objeto Rs1.Close Set Rs1 = Nothing End Sub Public Function ConsultaDatos(ByVal SQL As String, ByRef Rst As DAO.Recordset) ' ----------------------------------------------------------------------------------------------------------------------- ' NOTAS: + Este procedimiento ejecuta sentencias: SELECT ' ----------------------------------------------------------------------------------------------------------------------- On Error Resume Next Set Rst = CurrentDb.OpenRecordset(SQL) If Err <> 0 Then MsgBox "Se provoco un error debido a " & Err.Description Rst.Close Exit Function End If End Function
y lo modifique de esta forma:
Public Function ConsultaNSS() Dim base As DataBase Dim registro As Recordset Dim NSS As String Dim M1 As String Dim SQL As String Dim Rs1 As Recordset Dim Rs2 As Recordset Dim Rst As DAO.Recordset Regresa: NSS = "" NSS = InputBox("Escriba el NSS a 11 posiciones") If NSS = "" Then End ElseIf NSS = Null Then End ElseIf Len(NSS) = 11 Then ' Identifica las SubCuentas faltantes y agrega para estructurar la extracción, la expresión '"& &"' indica que se concatena el valor SQL = "SELECT TblCartas.[Tipo Traspaso],TblCartas.NSS" SQL = SQL & " FROM TblCartas" SQL = SQL & " WHERE TblCartas.NSS = '" & NSS & "'" ConsultaDatos SQL, Rs1 ' Rs1.MoveLast: Rs1.MoveFirst Rs1.MoveFirst DoCmd.SetWarnings False Select Case Rs1.Fields("Tipo Traspaso") Case "01", "21", "24", "38", "55", "71", "72", "73", "74" 'TipoCarta = "A02" SQL = "SELECT TblCartas02.[Folio Carta],TblCartas02.NSS" SQL = SQL & " FROM TblCartas02" SQL = SQL & " WHERE TblCartas02.NSS = '" & NSS & "'" ConsultaDatos SQL, Rs1 Rs1.MoveFirst DoCmd.SetWarnings False TempVars!Rst = Rs1.Fields(0).Value DoCmd.SetWarnings False DoCmd.OutputTo acOutputReport, "InfCarta_Correo_02", "PDFFormat(*.pdf)", "C:\Cartas Correo\Cartas02\" & Rs1.Fields(0) & ".pdf", , , 0, acExportQualityPrint TempVars!Rst = Null ' Libera variables de Objeto Rs1.Close Set Rs1 = Nothing Case "25", "51", "57" 'TipoCarta = "A03" SQL = "SELECT TblCartas03.[Folio Carta],TblCartas03.NSS" SQL = SQL & " FROM TblCartas03" SQL = SQL & " WHERE TblCartas03.NSS = '" & NSS & "'" ConsultaDatos SQL, Rs1 Rs1.MoveFirst Do Until Rs1.EOF If Rs1.Fields("NSS") = M1 Then DoCmd.SetWarnings False TempVars!Rst = Rs1.Fields(0).Value DoCmd.SetWarnings False DoCmd.OutputTo acOutputReport, "InfCarta_Correo_03", "PDFFormat(*.pdf)", "C:\Cartas Correo\Cartas03\" & Rs1.Fields(0) & ".pdf", , , 0, acExportQualityPrint TempVars!Rst = Null ' Libera variables de Objeto ' Rs1.Close ' Set Rs1 = Nothing End If End Loop Case Else MsgBox "No se encontro el registro", vbOKOnly, "" End Select Beep MsgBox "Listo", vbOKOnly, "" Else MsgBox "Captura un NSS valido", vbOKOnly, "" GoTo Regresa End If End Function
Al principio le deje los if, pero me generaba documentos individuales por el total de registros, no solo por elunico que habia ingresado, le quite los if y ya me generaba un unico documento con el registro que habia ingresado, pero despues no se que hice y me genera un documento por el total de registros de la tabla, ¿en donde esta mi error o errores?, ojala me puedan ayudar