** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - exportar tablas de Access a Excel
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

exportar tablas de Access a Excel

 Responder Responder
Autor
Mensaje
carlosd Ver desplegable
Habitual
Habitual


Unido: 18/Febrero/2023
Localización: cuba
Estado: Sin conexión
Puntos: 67
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita carlosd Cita  ResponderRespuesta Enlace directo a este mensaje Tema: exportar tablas de Access a Excel
    Enviado: 18/Febrero/2023 a las 15:33

Soy aprendiz de hacer base de datos, hice una base de datos que se usa en varios lugares, ella exporta tablas en Excel que son importadas en un consolidador, detecté que hubo alguien que modificó unas tablas manualmente para dar por concluida la información y ello dio diferencia, quiero exportarlas con contraseña y no se como hacerlo, son dos tipos de exportaciones y se las detallo para mejor comprensión

esto es adaptado a mis necesidades desde ejemplos que encontré en la web

primera

Private Sub cmdExportar_Click()

Dim rstNombrePrograma As DAO.Recordset, _

    rstTituloTema As DAO.Recordset, _

    qdf As DAO.QueryDef, _

    strSQL As String, _

    strHoja As String, _

    strArchivo As String, _

    strTitulo As String, _

    Campo As DAO.Field, _

    lngColumna As Long, _

    i As Long, _

    xls As Object 'Excel.Application

    

' declaración de constantes de Excel para así evitar hacer referencia a este

Const xlWBATWorksheet = -4167

Const xlAutomatic = -4105

Const xlSolid = 1

Const xlThemeColorDark1 = 1

Const xlToRight = -4161

Const xlNormal = -4143


On Error GoTo cmdExportar_Click_TratamientoErrores


' abro un recordset con los pedidos y otro con los comerciales

strSQL = "SELECT NombrePrograma"

strSQL = strSQL & " FROM ProgramasEmitidos"

strSQL = strSQL & " GROUP BY NombrePrograma"


' creo una instancia a Excel

Set xls = CreateObject("Excel.Application")

xls.Visible = True


' creo un libro con una sola hoja

xls.Workbooks.Add xlWBATWorksheet

strHoja = xls.ActiveSheet.Name


Set rstNombrePrograma = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)


' recorro el recordset de los comerciales

If Not (rstNombrePrograma.EOF And rstNombrePrograma.BOF) Then

   Do

      ' en esta ocasión voy a utilizar una consulta de parámetros y construyo una sentencia SQL para cada comercial

      strSQL = "SELECT TituloTema, NombreAutor, NombreInterprete, Sonatas, Fecha, Calculo, Local, Plantilla "

      strSQL = strSQL & "FROM ProgramasEmitidos"

      strSQL = strSQL & " WHERE NombrePrograma = Parametro1"

      Set qdf = CurrentDb.CreateQueryDef("", strSQL)


      ' doy valor a los parámetros sin preocuparme de los tipos de datos

      qdf.Parameters("Parametro1") = rstNombrePrograma!NombrePrograma

      ' añado una hoja por cada comercial

      Set rstTituloTema = qdf.OpenRecordset

      xls.ActiveWorkBook.Sheets.Add Before:=xls.Worksheets(xls.Worksheets.Count)

      xls.ActiveSheet.Name = rstNombrePrograma!NombrePrograma

      

      ' cabecera de columnas

      With xls

         lngColumna = 1

         For Each Campo In rstTituloTema.Fields

            strTitulo = ""

            ' como yo suelo utilizar en el nombre de campo varias palabras sin espacios y empezando cada una

            ' de ellas por mayúscula, para separarlas y mostrar las cabeceras correctas, inserto un espacio

            ' delante de cada mayúscula (que no sea la de inicio)

            For i = 1 To Len(Campo.Name)

               strTitulo = strTitulo & Mid(Campo.Name, i, 1)

               If i < Len(Campo.Name) Then

                  If EsMayuscula(Mid(Campo.Name, i + 1, 1)) Then strTitulo = strTitulo & " "

               End If

            Next i

            .ActiveSheet.Cells(1, lngColumna) = strTitulo

            lngColumna = lngColumna + 1

         Next Campo

         .Range("A1").Select

         .Range(.Selection, .Selection.End(xlToRight)).Select

         .Selection.Font.Bold = True

         With .Selection.Interior

             .Pattern = xlSolid

             .ColorIndex = 15

         End With

      End With


      ' escribo los datos en la hoja

      If Not (rstTituloTema.EOF And rstTituloTema.BOF) Then

         xls.ActiveSheet.Cells(2, 1).CopyFromRecordset rstTituloTema

      End If

      ' ajusto el tamaño de las columnas

      xls.Columns("A:G").EntireColumn.AutoFit

      rstNombrePrograma.MoveNext

   Loop Until rstNombrePrograma.EOF

End If


' elimino la hoja vacía

' evito que me pregunte si estoy seguro

xls.Application.DisplayAlerts = False

xls.ActiveWorkBook.Worksheets(strHoja).Delete


' pregunto el nombre del archivo a guardar

strArchivo = "D:\SG RADIO RCH\EXPORTACIONES\11 Derecho Autor Obras Completas R Chaparra.xls"

' lo guardo con el nombre indicado y formato xls (97-2003)

If Not Nz(strArchivo, "") = "" Then

   xls.ActiveWorkBook.SaveAs FileName:=strArchivo, FileFormat:=xlNormal

Else

   ' si se ha cancelado y por tanto no se ha dado nombre al archivo,

   ' "engaño" a Excel haciendole "pensar" que ya está guardado, de ese modo no me preguntará si quiero guardar

   xls.ActiveWorkBook.Saved = True

End If

xls.Application.DisplayAlerts = True

cmdExportar_Click_Salir:

   ' cierro todo

   On Error Resume Next

   xls.Quit

   Set xls = Nothing

   Set qdf = Nothing

   CierraRecordsetDAO rstNombrePrograma

   CierraRecordsetDAO rstTituloTema

   On Error GoTo 0

   Exit Sub

   

cmdExportar_Click_TratamientoErrores:

   MsgBox "Error " & Err & " en proc.: cmdExportar_Click de Documento VBA: Form_frmFrmIniInformes (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"

   Resume cmdExportar_Click_Salir

Resume Next

End Sub        ' cmdExportar



Editado por carlosd - 19/Febrero/2023 a las 23:43
Arriba
01loko Ver desplegable
Colaborador
Colaborador


Unido: 17/Agosto/2017
Localización: Santander
Estado: Sin conexión
Puntos: 807
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita 01loko Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 19/Febrero/2023 a las 09:09
Debes abrir cada fichero generado mediante automatización, protegerla y volver a cerrar.



Recordar de que soy nuevo y estoy aprendiendo.
Arriba
carlosd Ver desplegable
Habitual
Habitual


Unido: 18/Febrero/2023
Localización: cuba
Estado: Sin conexión
Puntos: 67
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita carlosd Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 19/Febrero/2023 a las 15:48
pusieras, y perdona, ser más explicito o ayudarme con un ejemplo, soy aprendiz como decía en mi primer mensaje
Arriba
carlosd Ver desplegable
Habitual
Habitual


Unido: 18/Febrero/2023
Localización: cuba
Estado: Sin conexión
Puntos: 67
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita carlosd Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 19/Febrero/2023 a las 23:41
bueno, esta parte de mi pregunta que dice "segunda" ya la resolví y la eliminé del mensaje inicial, lo que necesito es que la que dice primera, donde esas instrucciones crean un libro nuevo cada vez que se ejecuta, al guardar ese libro lo haga con una contraseña predeterminada desde vba. Si alguien pudiera ayudarme

Editado por carlosd - 19/Febrero/2023 a las 23:44
Arriba
joanka Ver desplegable
Habitual
Habitual


Unido: 07/Abril/2021
Localización: Lleida
Estado: Sin conexión
Puntos: 144
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita joanka Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 20/Febrero/2023 a las 10:21
Hola,

Investiga

With miHoja

.Protect "Password"

end with

o .Unprotect "Password"
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable