Jump to content

Recommended Posts

Amigos, quien me ayuda ya que he intentado pero no logro conseguirlo, encontré por ahi en la red una forma de importar un excel cualquiera a un control listview, pero carga previamente los encabezados a la hoja excel activa, luego carga lo demás. Lo que me gustaría es que solo cargara los datos en el listview, sin cargarlos a la hoja excel.

Adjunto archivo por si alguien me echa una mano.

 

Nota: el archivo no es de mi autoría, solo quiero adaptarlo.

74 - Importar dados de outro arquivo xls.xlsm

Share this post


Link to post
Share on other sites

Hola,

Cambia estos datos señalados...

 

    'Limpa planilha
    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Clear

Tienes otros datos en tu archivo...

Saludos.

Share this post


Link to post
Share on other sites

Ese código selecciona la hoja y limpia los datos para cargarlos en la hoja.

Lo que pretendo es que no me cargue datos en la hoja Excel, solo los muestre en el listview. Elijo cualquier Excel, elijo la Hoja a cargar y cargo los datos al control, sin descargarlos en la hoja que esta detrás del form

Share this post


Link to post
Share on other sites

El sub carrega_listview carga los datos y los obtiene de la primera fila del Excel de la hoja plan1, luego agrega lo demás, mi idea es no depender de la hoja Excel plan1 para llenar el listview sino que utilizar directamente el form, creo que debería tomar el archivo Excel a cargar como una base de datos para determinar el encabezado de las columnas

Conta_columnas me da la primera fila. Luego título hace un bucle y me agrega la cabecera del listview, yo creo que esa es la parte del código a modificar

 

Edited by Felipe Torres

Share this post


Link to post
Share on other sites

El evento click del botón llamado “IMPORTAR GUIA" donde se selecciona la hoja también hace un bucle for y copia los datos a la hoja1. 

La idea es que no haga esto sino que los datos los cargue directo al listview

Share this post


Link to post
Share on other sites
Hace 2 horas, Felipe Torres dijo:

La idea es que no haga esto sino que los datos los cargue directo al listview

1) adjunta uno o dos de los libros que REALMENTE abres con esa aplicación

  • con los modelos que he probado, hay "cosas" que pasan "embasuradas"
  • (creo que) no está bien que vuelva a abrir libros que ya están abiertos (?)

2) comenta (exactamente) cual es el objetivo y forma de uso de esa aplicación

  • de que trata cada formulario (?)
  • que pretendes al seleccionar uno (o varios) de los elementos en cada LV (?)
  • cualquier otro detalle que te estés "dejando en el tintero" (?)

3) si no quieres que se carguen datos en la(s) hoja(s)

  • deberás usar otro tipo de técnicas o estrategias (?)

Share this post


Link to post
Share on other sites

Actualmente trabajo con una base de datos access, en donde tengo tablas vinculadas a dos libros Excel que constantemente se van actualizando, ya que los exporto de un sistema erp. 

Mi idea es hacerlo desde mi aplicación osea desde un form importar un libro que tengo en el escritorio esto sin darle la ruta de mi libro porque hay veces que se guarda con otro nombre, lo que hago es elegir el libro, elijo la Hoja a cargar, cargo los datos en el listview, de ahí selecciono todos y destildo los de la cabecera que contiene los títulos para luego con otro botón los envío a una tabla que tengo creada en access, así voy borrando los datos de la tabla y los voy reemplazando por los seleccionados del listview.  

Todo el código lo tengo, lo que me falta es lograr cargar los datos de un Excel Cualquiera y poder verlos en el listview, sin hacer uso de la hoja1.

Después selecciono los que quiero y los envío a la bd. 

 

Share this post


Link to post
Share on other sites
Hace 7 horas, Felipe Torres dijo:

... lo que me falta es lograr cargar los datos de un Excel Cualquiera y poder verlos en el listview, sin hacer uso de la hoja1.

Después selecciono los que quiero y los envío a la bd

(creo que) ya "vi" por donde llevas los tiros (?), algunas preguntas (espero que) finales:

  • cual es el máximo de hojas que pueden contener los libros que te interesan ?
  • en cada hoja, cual es el máximo de campos/columnas y registros/filas que puede haber ?
  • en los equipos donde se ejecuta tu formulario disponen (todos) del control para un ListView ?
  • si fuera el caso, se puede cambiar a controles de lista de selección múltiple con eventos ?

saludos,
hector.

Share this post


Link to post
Share on other sites

Hola Héctor, siempre importo la primera hoja, es solo una hoja con datos, y porque no la defino en el código? Porque el erp lo exporta con un nombre distinto cada vez, es por eso que debo emplear la selección de la hoja a pesar de que siempre es la primera, en eso no hay problema porque ya el código en el archivo adjunto lo hace. 

El Máximo de campos de registros es variable a veces más a veces menos, eso el código también lo carga bien. 

En todos los equipos que ejecutan la aplicación funciona el control listview ya que lo utilizo en otros forms.

Creo que en el archivo adjunto esta todo bien lo que quiero, es eso mismo, pero con la diferencia de que los datos en el procedimiento que carga los datos en el listview no los tome desde la hoja llamada plan1, como se ve lo que hace es cargar previamente los encabezados de títulos y a partir de ahí carga el listview, mi idea es que simplemente cargue directamente los datos al control, imaginemos que no hay hojas de datos detrás, que solo esta el formulario abierto y busco un Excel cualquiera, selecciono la hoja, y muestro los datos del Excel dentro del control listview. 

Lo he visto con el control datagridview en vb.net, hace eso mismo, abre un formulario, pincha un boton openfiledialog escoge un Excel, y carga los datos de excel al datagridview. 

Es eso mismo, solo que con el listview. 

Espero haberme dado a entender, gracias de antemano. 

Saludos

 

Share this post


Link to post
Share on other sites
Hace 1 hora, Felipe Torres dijo:

... siempre importo la primera hoja... el erp lo exporta con un nombre distinto cada vez... mi idea es que simplemente cargue directamente los datos al control...

acabas de simplificar bastante "la cosa" (si hubieras empezado por tus requerimientos reales ?)

los pasos son (por si quieres desarrollarlo o te esperas a las propuestas)...

1) obtienes el archivo por el método del "getopenfilename" (o el que prefieras)
2) por ADO creas un objeto "connection" y un "recordset" (por omisión se puede leer la primer hoja)
3) cargas los datos al listview desde el recordset (incluyendo los encabezados)
4) tu decides si los pases a otra BD lo haces desde el listview o desde el recordset
5) si no necesitas más el recordset, lo puedes cerrar (y la conexión) y volver a "nothing" (o al final del proceso ?)

saludos,
hector.

Share this post


Link to post
Share on other sites
En 30/6/2019 at 23:05 , Felipe Torres dijo:

... siempre importo la primera hoja... el erp lo exporta con un nombre distinto cada vez... mi idea es que simplemente cargue directamente los datos al control ...

1) descarga el adjunto (*.zip) lo descomprimes y obtienes un *.frm y un *.frx (base de un UserForm)

2) inicia excel con un libro nuevo en blanco y abre el editor de VBA

3) asegúrate de agregar una referencia a la librería: Microsoft Windows Common Controls x.0 (SPx)
- la "x" corresponde a la versión instalada del control (5 o 6)
- navega hasta c:\windows\system32 y localiza el archivo MSComCtl.ocx (tipo de archivos: OCX)

4) desde el editor de VBA, IMporta el archivo *.FRM (es el formulario con su código)

5) agrega un procedimiento para mostrar el formulario (macro, botón, figura, etc.)

ejecuta el formulario y "sigue tu sentido común" (y los comentarios en el código ?)

agrega a los procedimientos de los commandbutton (1 y 2) lo que ya aplicas para tus pases a la BD

la forma utilizada no requiere saber el nombre de la hoja donde buscar, pero si en que columnas o rango
en la muestra asume 26 campos/columnas (A a la Z) si necesitas (p.ej.) 52, indica "a:az", 78 => "a:bz" (etc.)
la carga de datos en un LV es lenta por naturaleza, quizá convenga cargar desde una matriz (en vez de un RS)
hay otras técnicas para identificar hojas y "usedrange" de libros cerrados (no creo que valga la pena por ahí ?)

el RS es rápido si lo trasladas a una hoja (quizá sea más rápido filtrar registros seleccionados en el LV ?)

no olvides guardar el libro como "habilitado para macros" (*.xlsm) o "binario" (*.xlsb)

saludos,
hector.

ListView desde RecordSet.zip

Share this post


Link to post
Share on other sites

Hola a ambos,

Subo archivo muestra... esta versión no es con recorset.

Espero te sirva.

P.D.: Hola Héctor Miguel tengo un "problemita" en el archivo, cuando elijo archivo se sale del Libro principal... y no logro que regrese... y no encuentro el por qué, podrías ayudarme en eso? o recomendarme alguna lectura o Link.

Gracias.

 

Edited by Leopoldo Blancas

Share this post


Link to post
Share on other sites
Hace 2 horas, Leopoldo Blancas dijo:

cuando elijo archivo se sale del Libro principal... y no logro que regrese... y no encuentro el por qué,

el método "Workbooks.Activate" funciona diferente a partir de la versión 2013 de office/excel que pasó de ser MDI (multi-document interfase) a SDI (single document interfase)

ahora es el SO el que administra la activación de las ventanas y como cada libro ES "una ventana", el método FALLA cuando previamente estableces un "ScreenUpdating" en False porque la ventana (activa) del libro no cumple los requerimientos de activación de windows :( (ya sabes qué hacer)

saludos,
hector.

Share this post


Link to post
Share on other sites
Hace 15 minutos , Héctor Miguel dijo:

ahora es el SO el que administra la activación de las ventanas y como cada libro ES "una ventana", el método FALLA cuando previamente estableces un "ScreenUpdating" en False porque la ventana (activa) del libro no cumple los requerimientos de activación de windows :( (ya sabes qué hacer)

Gracias, Solucionado!!!

 

Share this post


Link to post
Share on other sites

¡Guau!, @Héctor Miguel quiero darte las gracias por haberte dado el tiempo de haber creado algo para ayudarme, bajé el archivo y probé y me da error, antes de tratar de corregir el error, me dio curiosidad ver el archivo subido por @Leopoldo Blancas, el cual funciona de las mil maravillas, es justo lo que pretendía, gracias @Leopoldo Blancas, gracias a ambos, apenas tenga tiempo voy a crear un archivo con cosas interesantes que tengo para que todos puedan usarlo.

Share this post


Link to post
Share on other sites
Hace 5 horas, Felipe Torres dijo:

... bajé el archivo y probé y me da error ...

sería bueno conocer "el error" (texto y número) así como la línea que lo causa y que asegures haber establecido la referencia a la librería correspondiente (?)

Share this post


Link to post
Share on other sites

Hola Héctor Miguel,

Sin dejar pasar por alto....

A mi me salio error en esta linea:

Private Sub ListView1_ItemCheck(ByVal Item As MSComctlLib.ListItem

y el "error" dice:

Error de compilación

"No se ha definido el tipo definido por el usuario"

 

Y es por falta de la libreria:

Microsoft Windows Common Controls x.0 (SPx)

Y aunque yo uso ListView y DatePicker me salto el error... volví a cargar la librería y todo bien.

Saludos.

 

 

 

Share this post


Link to post
Share on other sites
Hace 20 minutos , Leopoldo Blancas dijo:

por falta de la libreria

es lo que supongo en el caso de @Felipe Torres, por lo que insisto en asegurar que se siguió esta parte:

En 2/7/2019 at 15:03 , Héctor Miguel dijo:

3) asegúrate de agregar una referencia a la librería: Microsoft Windows Common Controls x.0 (SPx)
- la "x" corresponde a la versión instalada del control (5 o 6)
- navega hasta c:\windows\system32 y localiza el archivo MSComCtl.ocx (tipo de archivos: OCX)

 

Share this post


Link to post
Share on other sites

Te entiendo, pero bueno yo uso Windows 10 y muchas veces se me "esconden" las librerías... no sé por qué?, como ahorita para detallarte el "error" tuve que des habilitar la librería, provoco el "error" y cuando quiero volverla a habilitar ya no esta??? y tengo que abrir mi archivo y después abrir el tuyo y ahora si ahí esta la librería... algún consejo?, En windows 7 no tengo ese problema. Los 2 de 32bits.

Saludos.

Share this post


Link to post
Share on other sites
Hace 30 minutos , Leopoldo Blancas dijo:

tuve que des habilitar la librería, provoco el "error" y cuando quiero volverla a habilitar ya no esta??? y tengo que abrir mi archivo y después abrir el tuyo y ahora si ahí esta la librería... algún consejo?

cuando en un formulario insertas un control de la librería, se agrega la referencia (pero...)

cuando importas un formulario con ese tipo de controles, la referencia a la librería se hace "a pie" siguiendo los diálogos desde:

herramientas > referencias > examinar...
mvol6b.jpg

navegar (system32) y seleccionar tipo de archivos OCX
8wld9g.jpg

seleccionar la librería > "abrir" (aceptar en el siguiente diálogo)
15z1t79.jpg

saludos,
hector.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

×
×
  • Create New...

Important Information

Privacy Policy