Access - Exportas a varios archivos de excel

   
Vista:

Exportas a varios archivos de excel

Publicado por Pegasus (19 intervenciones) el 07/12/2011 07:48:15
Buenos dias. Tengo una duda importante que me trae de cabeza.
Tengo una tabla con todas las llamadas que efectuan las personas de telemarketing en el mes. En ella figuran los datos de cada llamada (persona que realiza la llamada, numero marcado, fecha, hora y duracion). Necesito crear un excel por cada una de elllas con las llamadas que realizo. Hasta la fecha lo hacia manualmente. Filtraba cada persona y copiaba el resultado en un excel y le ponia el nombre de la persona.
El problema es que ya hay mucha gente trabajando y me paso un dia entero realizando esta tarea.
Hay alguna manera de que al exportar a excel cree un archivo por cada trabajador con sus llamadas independiente y no uno con todos???
No se programar y tendria que ser con los asistentes de access.
Gracias de antemano por vuestra ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Neckkito

Exportas a varios archivos de excel

Publicado por Neckkito (1104 intervenciones) el 07/12/2011 09:46:19
Hola!

Necesitas utilizar código para hacer lo que pides, pues con los asistentes no "basta" para conseguirlo.

Ya me dirás si quieres que te lo explique, aunque en ese caso necesitaría saber:
- Qué versión de Access utilizas
- El nombre de la tabla donde recoges la información
- El nombre exacto de los campos de esa tabla, con el tipo de datos que son (texto, número, etc.)

Ya me dirás cosas.

Un saludo,

Neckkito (...http://neckkito.eu5.org...)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exportas a varios archivos de excel

Publicado por pegasus (19 intervenciones) el 07/12/2011 10:02:09
Gracias por tu respuesta.
La version de access es 2007.
El nombre de la tabla "CDRS MES"
Los campos son:
"Cliente" Texto
"Origen" Texto (son numeros de telefono pero los trato como texto
"Destino" Texto "
"Pais Destino" Texto
"Fecha llamada" Fecha/Hora Fecha Corta
"Hora llamada" Fecha/Hora Hora larga
"Duracion" Numero Entero Largo
"Coste" Moneda (este campo no quiero exportarlo)
"Venta" Moneda Euro con 4 decimales
"Tipo Destino" Texto

Espero tus noticias. Lo tengo que hacer hoy y no me quiero pasar todo el dia con esto. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito

Exportas a varios archivos de excel

Publicado por Neckkito (1104 intervenciones) el 07/12/2011 12:17:16
Hola!

Me parece perfecta la información que me indicas pero tengo una pregunta. ¿Dónde está el campo que identifica la persona que realiza la llamada?

Me dices que <<En ella figuran los datos de cada llamada (persona que realiza la llamada...>>, pero no veo en los campos de la tabla el campo que identifique a esa "persona que realiza la llamada".

Bueno. Ya me explicarás.

Un saludo,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exportas a varios archivos de excel

Publicado por pegasus (19 intervenciones) el 07/12/2011 12:40:15
El campo por el que quiero realizar los diferentes archivos, es el de "Cliente". Las personas de telemarketing es como si fueran autonomos, que cobran segun las llamadas realizadas, por eso se definieron como cliente.
Quizas se definio mal pero ya me acostumbre a llamarlos asi y por no cambiar ..... asi se quedo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito

Exportas a varios archivos de excel

Publicado por Neckkito (1104 intervenciones) el 07/12/2011 14:03:25
Hola!

Lo que tienes que hacer es lo siguiente:

1.- Crea un formulario en blanco.
2.- Añádele un botón de comando
3.- Saca las propiedades de ese botón de comando y te vas a la pestaña Eventos -> Al hacer click. Verás que hay un pequeño botón de puntos suspensivos. Si haces click sobre él te aparece una nueva ventana. Ahí le dices que quieres generar código.
4.- Se te abrirá el editor de VB con dos líneas por defecto (Private Sub… y End Sub). Esas líneas no debes tocarlas. En medio de ellas escribes el siguiente código:

Private Sub…
'Definimos las variables
Dim rutaExcel As String, nomExcel As String
Dim sqlOper As String, sqlExcel As String
Dim miQuery As QueryDef
Dim vOper As String
Dim rstOper As Recordset

'Inicializamos la variable rutaExcel
rutaExcel = "c:\rutaCarpetas\"

'Creamos la consulta de operadoras
sqlOper = "SELECT [CDRS MES].Cliente FROM [CDRS MES] GROUP BY [CDRS MES].Cliente"

'Creamos el recordset para las operadoras
Set rstOper = CurrentDb.OpenRecordset(sqlOper)
'Nos movemos al primer registro
rstOper.MoveFirst
'Iniciamos el proceso
Do Until rstOper.EOF
'Cogemos el nombre de la operadora. Aprovechamos para crear el nombre del Excel
vOper = rstOper.Fields(0).Value
nomExcel = rutaExcel & vOper & ".xlsx"
'Creamos la consulta con los datos de un excel
sqlExcel = "SELECT [CDRS MES].Cliente, [CDRS MES].Origen, [CDRS MES].Destino,"
sqlExcel = sqlExcel & " [CDRS MES].[Pais Destino], [CDRS MES].[Fecha llamada],"
sqlExcel = sqlExcel & " [CDRS MES].[Hora llamada],[CDRS MES].Duracion,"
sqlExcel = sqlExcel & " [CDRS MES].Coste, [CDRS MES].Venta, [CDRS MES].[Tipo Destino]"
sqlExcel = sqlExcel & " FROM [CDRS MES]"
sqlExcel = sqlExcel & " WHERE [CDRS MES].Cliente='" & vOper & "'"
'Creamos la consulta y realizamos la exportación de los datos
Set miQuery = CurrentDb.CreateQueryDef("CTemp", sqlExcel)
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel7, "CTemp", nomExcel, True
'Borramos la consulta temporal
CurrentDb.QueryDefs.Delete "CTemp"
'Nos movemos a la siguiente operadora
rstOper.MoveNext
Loop
'Lanzamos el mensaje de que todo ha ido bien
MsgBox "Exportación finalizada correctamente", vbInformation, "OK"
'Cerramos conexiones y liberamos memoria
rstOper.Close
Set rstOper = Nothing
End Sub


5. Ten en cuenta que debes cambiar el valor de la variable rutaExcel = "c:\rutaCarpetas\"
Es decir, debes cambiar la ruta “c:\rutaCarpetas\” por la tuya (debes mantener las comillas y la última barra inclinada).

Pues eso. Pruébalo y si te sale algún problema me comentas.

Un saludo,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exportas a varios archivos de excel

Publicado por pegasus (19 intervenciones) el 07/12/2011 20:48:33
Buenas.

Hice lo que me indicas pero me da un error de compilacion. Tambien pone que no se ha definido el tipo definido por el usuario. Y muestra el codigo que me mandaste con lo que te subrayo marcado en azul. Te pongo solo el principio.

Private Sub Comando25_Click()

'Definimos las variables
Dim rutaExcel As String, nomExcel As String
Dim sqlOper As String, sqlExcel As String
Dim miQuery As QueryDef
Dim vOper As String
Dim rstOper As Recordset

'Inicializamos la variable rutaExcel .....................................etc

Lo que no me quedo claro es si aparte del Private Sub Comando25_Click() que pone automaticamente al entrar en el Visual Basic, tengo que poner
...
Private Sub... como empieza lo que me envias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito

Exportas a varios archivos de excel

Publicado por Neckkito (1104 intervenciones) el 08/12/2011 15:32:50
Hola!

Este error te sale porque te falta registrar una referencia. Te explico lo que debes hacer:

1.- Abre tu BD
2.- Pulsa la combinación de teclas ALT+F11. Se te abrirá el VBE
3.- Te vas a menu -> Herramientas -> Referencias...
4.- En la ventana que se te abre buscas una referencia que se llama "Microsoft DAO 3.6 Object Library". Marcas su check y aceptas.

En teoría ahora debería funcionarte el código.

Yo pongo siempre Private Sub... porque no sé el nombre del botón que se crea (en tu caso, Comando25). No tienes que repetir esa línea: sólo puede haber un inicio de procedimiento (un Private Sub) y un solo fin de procedimiento (End Sub).

Más cosas...

El código que te pasé lo escribí de cabeza. He preparado una miniBD para testear lo que te explicaba y he visto unas cosillas que deberías cambiar. Te explico:
- En la línea que pone <nomExcel = rutaExcel & vOper & ".xlsx"> deberías cambiar ".xlsx" por ".xls"; es decir, guarda los Excel en formato 2003 para que el propio Excel pueda reconocerlos (de la otra manera a mí me daba error de apertura de Excel).
- En la línea que pone <DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel7, "CTemp", nomExcel, True> cambia acSpreadsheetTypeExcel7 por acSpreadsheetTypeExcel8; es mejor este tipo de constante para este supuesto.

Te dejo aquí el link a la BD que he preparado para que veas cómo funciona. Verás que el código está un poco diferente porque sólo lo he preparado para tres campos, además de que está en un módulo, pero la idea del código es, básicamente, la misma que la que te escribí en un mensaje anterior.

Para que te funcione debes crear una carpeta llamada <Temp> en C:, puesto que la ruta de exportación es "C:\Temp\"

Si quieres te la puedes bajar aquí: http://www.filebig.net/files/Cjaj3ysesq

Ya me dirás qué tal. Un saludo,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exportas a varios archivos de excel

Publicado por pegasus (19 intervenciones) el 08/12/2011 21:17:34
Buenas noches.
Segui tus instrucciones y el error anterior ya no sale. Ahora me dice
"Se ha producido el error 13 en tiempo de ejecucion:
No coinciden los tipos"
Al dar al depudador, me sale señalado en amarillo la frase que marco:

'Creamos el recordset para las operadoras
Set rstOper = CurrentDb.OpenRecordset(sqlOper)
'Nos movemos al primer registro
rstOper.MoveFirst
'Iniciamos el proceso
Do Until rstOper.EOF
'Cogemos el nombre de la operadora. Aprovechamos para crear el nombre del Excel
vOper = rstOper.Fields(0).Value
nomExcel = rutaExcel & vOper & ".xls"

Siento darte tantas molestias, pero como no tengo ni idea de codigo no se si lo que sale es facil de arreglar o no.
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito

Exportas a varios archivos de excel

Publicado por Neckkito (1104 intervenciones) el 09/12/2011 09:01:34
Hola!

Caramba, cómo se resiste! Intenta cambiar esto en el código:

Donde pone: <Dim rstOper As Recordset> escribe <Dim rstOper As DAO.Recordset>

Si con esto no te funciona haz una cosa, si te parece bien: comprime una copia de tu BD (le puedes eliminar registros de las tablas si tienes información confidencial) en zip o rar y me la pasas a mi correo electrónico, que es neckkito@yahoo.es

Yo le echaré un vistazo.

La verdad es que me extraña que, utilizando Access 2007, te dé este tipo de errores, pero... "con Access hemos topado!" Je, je...

A ver si a la tercera va la vencida ;)

Un saludo,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exportas a varios archivos de excel

Publicado por pegasus (19 intervenciones) el 09/12/2011 09:51:37
Muy buenas.

Es una pasada, en segundos tengo todos los archivos de excel. No sabes cuanto te lo agradezco.

Solo una cosa, los arcivos que crea tu codigo, no mantienen el formato original y un campo que no queria exportarlo, si lo exporta. Me explico:
- el campo hora lo pone como fecha y un ancho de columna inferior al suyo por lo que sale #### (esto mismo le pasa a la fecha, que no se ve)
- El campo venta solo saca 2 decimales y necesitaria que fueran 4 y si es posible con el simbolo del euro
- Los campos de Destino y Cliente al ser largos los recorta y solo se ve el principio
- El campo coste sale y no queria exportarlo.

En el nombre del cada archivo se puede incluir el mes de las llamadas ?, osea Yo los hago en Diciembre pero las llamadas son de noviembre.

Tampoco quiero abusar, si es complicarte la vida, ya los arreglo Yo cada mes, con lo que me hiciste me ahorras un monton de tiempo.

Muchisimas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito

Exportas a varios archivos de excel

Publicado por Neckkito (1104 intervenciones) el 09/12/2011 11:26:45
Hola!

Me alegro que por fin te haya funcionado! Ya empezaba a preocuparme ;)

Vamos a ir por partes:

- El tema de los formatos en Excel complicaría mucho el código, y tampoco puedo darte garantías de que funcionara bien sin testearlo in situ. Ahí sí que tengo mis dudas de cómo podría ayudarte. Quizá lo más práctico sería crearte una macro de Excel (para todos los libros de excel) y programarla con una combinación de teclas. Así sólo tendrías que abrir el Excel y pulsar la combinación, y la macro te haría el trabajo por ti. El problema está en que Excel tiene unos formatos "por defecto" (por ejemplo, entiende que el formato moneda debe ser con dos decimales).

De todas maneras, puestos a complicar las cosas, puedes probar lo siguiente:

La línea que pone <nomExcel = rutaExcel & vOper & ".xls"> cámbiala a <nomExcel = rutaExcel & vOper & ".xlsx">

La línea que pone:
<DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel7, "CTemp", nomExcel, True>

cámbiala por esta otra:

<DoCmd.OutputTo acOutputQuery, "CTemp", "ExcelWorkbook(*.xlsx)", nomExcel, False>

A ver si de esta manera se te arregla alguna cosilla de los formatos.


- Si no quieres el campo coste cambia la línea:
<sqlExcel = sqlExcel & " [CDRS MES].Coste, [CDRS MES].Venta, [CDRS MES].[Tipo Destino]">
por esta otra:
<sqlExcel = sqlExcel & " [CDRS MES].Venta, [CDRS MES].[Tipo Destino]">

- Por el tema del nombre de archivo te propongo algo que es un poco manual, pero efectivo. Te pongo cómo debería ser indicándote sólo el bloque del código donde iría, sin copiarte todo el código. Te lo marco en negrita:

Private Sub ...
'Definimos las variables
Dim mesLlamada As String
Dim rutaExcel As String, nomExcel As String

---
'Inicializamos la variable rutaExcel
rutaExcel = "c:\rutaCarpetas\"

'Solicitamos el mes de la llamada
mesLlamada = InputBox ("¿Mes llamada?","MES")


'Creamos la consulta de operadoras
----

'Cogemos el nombre de la operadora. Aprovechamos para crear el nombre del Excel
vOper = rstOper.Fields(0).Value
nomExcel = rutaExcel & mesLlamada & "-" & vOper & ".xls"

(Ojo, si has hecho la prueba que te comentaba al principio la extensión debe ser ".xlsx")

Ya me dirás si se te han ido bien estos cambios.

Un saludo,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exportas a varios archivos de excel

Publicado por pegasus (19 intervenciones) el 10/12/2011 10:50:03
Buenos dias.

No sabes cuanto te lo agradezco, funciona todo perfectamente y me crea los archivos con los formatos OK (excepto los 2 decimales en vez de 4) pero me vale a la perfeccion.

Me esta empezando a picar lo de programar en VB, veo que se pueden hacer un monton de cosas que sin el no podria. Sabes de algun sitio en internet donde se pueda empezar a aprender ??? o es mejor una academia.

Muchisimas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito

Exportas a varios archivos de excel

Publicado por Neckkito (1104 intervenciones) el 10/12/2011 19:10:01
Hola!

Con tu permiso voy a hacerme un poco de propaganda y te puedo comentar que si entras en mi web (http://neckkito.eu5.org) verás:
- En la sección "pre-access" y "post-access" cosas que es interesante saber de Access en general.
- En la sección "objetos" unas explicaciones sobre los objetos de Access (tablas, formularios, informes, consultas, etc.). Hay muchas cosas que se pueden hacer sin tener que recurrir a código.
- En la sección ejemplos... qué te voy a contar!
Y si te registras ahí encontarás tanto un manual de Access 2007 (relativamente básico) y un curso de VBA para Access. Tanto el manual como el curso VBA están todavía en construcción (cada capítulo lleva muchísimo tiempo de preparación), pero ya hay colgados unos cuantos capítulos que creo que dan para un buen rato de "prácticas".

Yo no sé de dónde eres pero aquí, en Mallorca (España), de donde soy yo, no creo que haya ninguna academia que te dé Access con VB. Mucho Excel, mucho Word y mucho PowerPoint. Access un poco menos,. Pero que se metan con VB... todavía no sé de ninguna.

Ojo. El manual de la web no es la "panacea", en el sentido de que no se ve todo (eso sería la enciclopedia británica más que un manual), pero creo que te da unas buenas bases (o eso es la idea) para ir entendiendo las cosas y te permite entender otros ejemplos, ver cómo funcionan, poderlos adaptar a lo que tú necesitas, etc. Y cuando la ayuda de Access te habla del "método DoCmd" al menos sabrás de qué te están hablando.

Y bueno, cualquier cosa que necesites... pues ya sabes.

Un gran saludo,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exportas a varios archivos de excel

Publicado por pegasus (19 intervenciones) el 19/12/2011 12:54:25
Buenas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exportas a varios archivos de excel

Publicado por pegasus (19 intervenciones) el 19/12/2011 12:56:13
Perdona por no contestar antes pero estube fuera. Ya tengo en favoritos tu web y empezare a darle un vistazo.

Muchisimas gracias por todo.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exportas a varios archivos de excel

Publicado por IPC (1 intervención) el 27/12/2011 16:46:38
Hola,

Pues pego el codigo y me sale en amarillo:

Set rstOper = CurrentDb.OpenRecordset("C_Inform_x_Artíc_10y11_1")

y no puedo avanzar.

Tengo el Código señalado y queda así y nada, no puedo avanzar:

---------------------------------------
Private Sub Comando42_Click()
Dim miQuery As QueryDef
Dim vOper As String
Dim rstOper As DAO.Recordset

rutaExcel = "C:\Documents and Settings\dieger\Escritorio\"

sqlOper = "SELECT [C_Inform_x_Artíc_10y11_1].CÓD ART FROM [C_Inform_x_Artíc_10y11_1] GROUP BY [C_Inform_x_Artíc_10y11_1].CÓD ART"

Set rstOper = CurrentDb.OpenRecordset("C_Inform_x_Artíc_10y11_1")

rstOper.MoveFirst
Do Until rstOper.EOF
vOper = rstOper.Fields(0).Value
nomExcel = rutaExcel & vOper & "111.xlsx"

sqlExcel = "SELECT [C_Inform_x_Artíc_10y11_1].CÓD ART, [C_Inform_x_Artíc_10y11_1].ARTÍCULO, [C_Inform_x_Artíc_10y11_1].MES,"
sqlExcel = sqlExcel & " [C_Inform_x_Artíc_10y11_1].[NumProveedor], [C_Inform_x_Artíc_10y11_1].[NomProveedor],"
sqlExcel = sqlExcel & " [C_Inform_x_Artíc_10y11_1].[Uds Mes],[C_Inform_x_Artíc_10y11_1].Total Mes,"
sqlExcel = sqlExcel & " [C_Inform_x_Artíc_10y11_1].Precio Mes,"
sqlExcel = sqlExcel & " FROM [C_Inform_x_Artíc_10y11_1]"
sqlExcel = sqlExcel & " WHERE [C_Inform_x_Artíc_10y11_1].CÓD ART='" & vOper & "'"

Set miQuery = CurrentDb.CreateQueryDef("CTemp", sqlExcel)
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel7, "CTemp", nomExcel, True

CurrentDb.QueryDefs.Delete "CTemp"

rstOper.MoveNext
Loop

MsgBox "Exportación finalizada correctamente", vbInformation, "OK"

rstOper.Close
Set rstOper = Nothing
End Sub

---------------------------------------
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito

Exportas a varios archivos de excel

Publicado por Neckkito (1104 intervenciones) el 27/12/2011 16:57:44
Hola!
¿Tienes activada la referencia DAO?
Es decir,
- Abre tu BD
- Pulsa la combinación de teclas ALT+F11
- Se te abrirá el VBE. Te vas a menú Herramientas->Referencias
- Buscas la referencia "Microsoft DAO 3.6 Object Library"
- Marcas su check y aceptas

A ver si así se te soluciona el error.

Un saludo,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exportas a varios archivos de excel

Publicado por Dito (1 intervención) el 03/07/2013 01:47:29
Hola tengo una pregunta , en cuanto a este tema es posible obtener de nuevo el archivo de ejemplo que publicaste, es que aparece el enlace roto "Si quieres te la puedes bajar aquí: http://www.filebig.net/files/Cjaj3ysesq", es muy importante pera mi ya que me han solicitado algo similar.

mil gracias por tu apoyo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exportas a varios archivos de excel

Publicado por daniel (1 intervención) el 09/04/2012 18:37:13
Hola buenos dias, esta muy interesante tu codigo, pero quisiera preguntarte como hago con este codigo si yo quiero ubicar los datos en alguna celda especifica, por ejemplo CLIENTE en la cel a5
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar