Jump to content

Archived

This topic is now archived and is closed to further replies.

SALAVERRINO

MACRO PARA EXTRAER INFORMACION DE OTRO ARCHIVO

Recommended Posts

Buenas tardes a los integrantes de este foro, en ocasión quisiera pedir su ayuda en esta macro, en la cual se trabaja con 2 archivos como son:

1. ESTRUCTURA PLANILLAS GUANO.xlsm y su hoja PLANILLA

2. SORT.xslm y su hoja INGRESO

lo que se requiere es que cuando se ejecuta dicha macro no quisiera que se aperture el archivo SORT solo que jale la información de la hoja INGRESO, ya que estos archivos se trabajan mes a mes, en diferentes carpetas.

Sub Codigos()
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("PLANILLA")
    Set l2 = Workbooks("SORT.xlsm")
    Set h2 = l2.Sheets("INGRESO")
    '
    For i = 4 To h1.Range("A" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "A") = "COD" Then
            h1.Cells(i, "K") = ""
            cad = ""
            Set r = h2.Columns("A")
            Set b = r.Find(Cells(i, "B"), lookat:=xlWhole)
            If Not b Is Nothing Then
                celda = b.Address
                Do
                    'detalle
                    cad = cad & h2.Cells(b.Row, "K") & "; "
                    Set b = r.FindNext(b)
                Loop While Not b Is Nothing And b.Address <> celda
            End If
            If cad <> "" Then
                cad = Left(cad, Len(cad) - 2)
                h1.Cells(i, "K") = cad
            End If
        End If
    Next
    MsgBox "Fin"
End Sub

A la espera de su respuesta quedo siempre agradecido por su colaboración.

Share this post


Link to post
Share on other sites

con el libro fuente cerrado, NO puedes usar instrucciones del tipo: [.Cells].Find(... ni otras similares, por lo que tendrás que recurrir a las maquinarias de consulta a bases de datos, para lo cual es requisito saber (exactamente) en que rango buscar y la primera fila deberá tener TITULOS de identificación

si cualquier duda (o información adicional)... comentas ?

saludos,

hector.

Share this post


Link to post
Share on other sites

hola Hector Miguel, creo que para mejor detalle y comprensión de lo que pretendo realizar adjunto los archivos, ademas quisiera trabajar dicho archivo ESTRUCTURA PLANILLA GUANO, con la opción PROTEGER HOJA, la clave para DESPROTEGER HOJA la clave es A (mayúscula), ya que con la opción PROTEGER LA HOJA se quiebra la macro. O quizás con mas conocimiento que tienes amigo, podrías darle unas mejora a la macro.

Agradezco la colaboración brindada.

nota: el archivo lo tengo comprimido y pesa 472 Kb, pero no me permite subir, ya que el tamaño total máximo de este foro dice 0.1 Mb,, o si tuvieras algún email personal o otro medio de como subir dicho archivo.

Share this post


Link to post
Share on other sites

tienes dos opciones:

  1. el libro "de ejemplo" NO tiene por que ser "el completo", basta con unos cuantos registros representativos de la situación a resolver y un arreglo de datos "fiel" a la estructura original
  2. si no puedes recortar datos de manera que el adjunto sea mas "ligero", prueba adjuntando el libro mas "pesadito" (pero comprimido) en otra consulta en el otro foro que también acostumbras

saludos,

hector.

Share this post


Link to post
Share on other sites

hola amigo Hector, pude reducir capacidad de los archivos, la cual ahora si me permitió subirlos y como describía en mi mensaje anterior, lo que pretendo realizar es, que cuando ejecuto la macro del archivo ESTRUCTURA PLANILLA GUANO con su hoja PLANILLA, permite extraer los datos del archivo SORT.xlsx con su hoja INGRESO, sin necesidad de abrirse dicho archivo SORT.xlsls, como se aprecia en esta macro, la cual debe estar abierto el archivo SORT.xlsx para su ejecución.

Sub Codigos()
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("PLANILLA")
    Set l2 = Workbooks("SORT.xlsx")
    Set h2 = l2.Sheets("INGRESO")
    '
    For i = 4 To h1.Range("A" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "A") = "COD" Then
            h1.Cells(i, "K") = ""
            cad = ""
            Set r = h2.Columns("A")
            Set b = r.Find(Cells(i, "B"), lookat:=xlWhole)
            If Not b Is Nothing Then
                celda = b.Address
                Do
                    'detalle
                    cad = cad & h2.Cells(b.Row, "K") & "; "
                    Set b = r.FindNext(b)
                Loop While Not b Is Nothing And b.Address <> celda
            End If
            If cad <> "" Then
                cad = Left(cad, Len(cad) - 2)
                h1.Cells(i, "K") = cad
            End If
        End If
    Next
    MsgBox "Fin"
End Sub

Tambien quiero indicar que dicho archivo ESTRUCTURA PLANILLA GUANO, esta con la opción PROTEGER HOJA (por seguridad de formulas) la clave para DESPROTEGER LA HOJA, es "A" (mayúscula), ya que con la opción PROTEGER LA HOJA se quiebra la macro. O quizás con mas conocimiento que tienes amigo, podrías darle una mejora a la macro.

Agradezco la colaboración brindada.

ESTRUCTURA PLANILLAS GUANO.xlsm

SORT.xlsx

Share this post


Link to post
Share on other sites
tengo dos noticias para ti, solo para variar... una buena y la otra... (bueno, no es que sea mala o no buena, simplemente...)
 
la buena: es posible obtener datos de un libro SIN abrirlo (en una instancia de excel)
 
la otra: el motor de consulta a bases de datos necesita que le eches una manita (me explico):
- la columna A de la hoja "ingreso" en el libro "sort.xlsx" tiene una mezcla de tipos de datos (texto y números)
- forzando esos datos con una alineación a la derecha, puedes "engañar" a la vista mas NO a las aplicaciones
- una columna con tipo de datos mezclados ocasiona que "el motor" excluya a unos (o los numéricos o los de texto)
- OJO: hay algunos "títulos" duplicados en esa misma hoja (espero que no cambies su distribución para que no interfieran con el proceso)
 
paso1: normalizar los datos de la columna "A" (Cod) +/- como sigue (todas las celdas con formato texto):
- abre tu libro sort.xlsx, selecciona en la hoja "ingreso" el rango con datos en la columna A
- abre el editor de VBA (atajo: Alt + F11), muestra la ventana de inmediato (atajo: ctrl + G)
- copia/pega (o escribe) lo siguiente (y pulsas {enter} para ejecutarlo), luego guardas y cierras
selection.numberformat = "@"
 
paso2: cambiar el código asignado al botón en la hoja "planilla" de tu libro "estructura planillas guano.xlsm"
- descarga el adjunto (*.zip) > lo descomprimes y obtienes un *.bas
- abre tu libro "estructura planillas guano.xlsm"
- ELIMINA el módulo donde tienes la macro "Codigos()" (si tienes otras macros, elimina SOLO la macro "Codigos()")
- IMPORTA el *.bas en el proyecto de VBA de tu libro "estructura planillas guano.xlsm"
 
paso3: ANTES de ejecutar el código, asegúrate de "la ruta" donde se va a buscar el archivo "sort.xlsx"
- en el ejemplo se asume que estará en el mismo directorio que el libro con la macro
- si trabajas con unidades en red (?) asegúrate de usar una ruta bajo las convenciones UNC
 
saludos,
hector.

getClosedWbData.zip

Share this post


Link to post
Share on other sites

Buenas noches Hector Miguel, la macro que haz desarrollado esta trabajando como se requería, ahora bien, la misma rutina o instrucción pretendo trasladar a este otro archivo con el nombre ESTRUCTURA PLANILLAS con las misma característica del archivo ESTRUCTURA PLANILLA GUANO, con la diferencia de que el archivo ESTRUCTURA PLANILLAS  no esta protegida la hoja, por lo que estoy quitando algunas instrucciones como podrás ver en la imágenes que adjunto y al ejecutar dicha macro me emite el siguiente error.

1. En la imagen 1, se encuentra la macro desarrollado por tú persona, y estoy remarcando las instrucciones que no utilizo.

2. En la imagen 2, es mi archivo SORT TRAB.xlsm que es igual al otro archivo SORT.xlsm, con la deferencia que esta empieza en la columna b1 y los valores a extraer están en la columna L.

3. En la imagen 3, es error que emite al ejecutar dicha macro.

A la espera de tú observación y me indiques en que estoy fallando, al pretender hacer los cambios para este nuevo archivo, por lo que quedo de ti amigo, por toda la ayuda y la colaboración desinteresada en compartir tus conocimientos.

Un abrazo amigo Hector.

imagen 1.pngimagen 2.pngimagen 3.png

Share this post


Link to post
Share on other sites
Hace 14 horas, SALAVERRINO dijo:

que estoy fallando, al pretender hacer los cambios para este nuevo archivo

figura 1:

  • el unprotect y protect es correcto que los elimines (si la hoja donde se trabaja NO está protegida)
  • cambiar [a1] por [b1] implica cambiar también la columna correspondiente en la parte de Cells(Rows.Count, <col>)

figura 2:

  • no debes tener problema siempre y cuando el título de "GRUPO" no se encuentre repetido ANTES de la columna L
  • (ya te lo había comentado en el mensaje anterior)

figura 3:

  • la falla se origina por el celda.Offset(... y debe corregirse al corregir la falla de la figura 1

saludos,

hector.

Share this post


Link to post
Share on other sites

Buenas noches amigo Hector, por mas que le busco la falla en la macro desarrollada, no puedo acertar, por lo que estoy dejando casi igual que el archivo sort.xlsx, como (TITULOS) en la celda A1 hasta la columna "L" donde dice GRUPO y siempre me emite el error de la imagen 3.

Ademas amigo Hector, ya seria mucho pedir en que me ayudes a corregir dichas fallas (adjunto archivos si tu respuesta sea afirmativo). Esperando tu respuesta para esta ayuda, quedo de ti, caso contrario daría por cerrar el tema como solucionado.

Gracias un abrazo.

 

imagen 5.png

SORT TRAB.xlsx

ESTRUCTURA PLANILLAS.xlsm

Share this post


Link to post
Share on other sites
Hace 33 minutos , SALAVERRINO dijo:

estoy dejando casi igual que el archivo sort.xlsx, como (TITULOS) en la celda A1 hasta

  1. reproduje (según tu imagen) el código propuesto originalmente eliminando lo referente a la protección de la hoja y el cambio de nombre en el libro "sort"
  2. en el libro "sort.xls?" (ahora "sort trab.xls?") NO IMPORTA si los datos inician en la columna A o en la columna B, el código se basa en los títulos (ojo nuevamente con los títulos duplicados y/o los títulos con . (punto), podrían estorbar a las maquinarias de consulta
  3. en la hoja de trabajo (en el libro "estructura planillas" lo único que se modifica es en cual columna se buscan los datos: la palabra "COD" (ahora) en la columna B, por lo tanto...

en el (nuevo) código lo único a modificar es la parte de "for each celda in ..."

  • de esto: For Each celda In Range([a1], Cells(Rows.Count, 1).End(xlUp)).SpecialCells(2, 2)
  • a esto: For Each celda In Range([b1], Cells(Rows.Count, 2).End(xlUp)).SpecialCells(2, 2)

tal como te lo comentaba en el mensaje anterior...

Hace 10 horas, Héctor Miguel dijo:

figura 1:

  • el unprotect y protect es correcto que los elimines (si la hoja donde se trabaja NO está protegida)
  • cambiar [a1] por [b1] implica cambiar también la columna correspondiente en la parte de Cells(Rows.Count, <col>)

si cualquier duda (o información adicional)... comentas ?

saludos,

hector.

Share this post


Link to post
Share on other sites

Hola Hector, de acuerdo a tu observación sobre el libro "estructura planilla", variando la ubicación en donde el motor de búsqueda de la macro que se ubica en la columna B con la palabra COD y cambiando la instrucción en la rutina "for each celda in ..."

  • de esto: For Each celda In Range([a1], Cells(Rows.Count, 1).End(xlUp)).SpecialCells(2, 2)

nueva rutina.

  • a esto: For Each celda In Range([b1], Cells(Rows.Count, 2).End(xlUp)).SpecialCells(2, 2)

y al ejecutar la rutina siempre me emite el error de la imagen 3, pero si abro el archivo "sort trab.xlsm", ahí se ejecuta la rutina sin ninguna problema.

A diferencia de la macro "getClosedWbData.bas",  donde lo ubique como rutina original, te puedo decir que con que abra el archivo o no, la rutina si se ejecuta sin ningún problema alguno. 

Esperando tú comentario respecto al problema, quedo muy agradecido por todo tu apoyo y colaboración.

Nota: me acabo de percatar de un detalle cuando ejecuto el archivo "estructura planilla.xlsm" con la macro "getClosedWbData.bas", como se aprecia en la imagen 6 (rectángulo color negro), dicha rutina de ejecuta sin ningún problema con el archivo sort trab.xlsx  - cerrado, pero al cambiar el archivo por la extension ".xlsm", se rompe la rutina, de acuerdo a la imagen 3.

imagen 6.png

y esta misma macro "getClosedWbData.bas" dentro del archivo "estructura planilla guano", como plantilla original, se ejecuta sin ningún problema ya sea abierto o cerrado el archivo sort.xlsm, Por lo tanto no encuentro cual es el problema.

Share this post


Link to post
Share on other sites
  1. ahora tengo dos de tus archivos con las diferentes extensiones ("sort trab.xlsm" y "sort trab.xlsx") y para evitar cualquier posible confusion para el código, le cambié el nombre al 2° a "trab sort.xlsx"
  2. la macro (modificada según mensaje anterior) corre perfecta con cualquier EXTension
  3. quizá convenga confirmar la ubicación (exacta) de los archivos, ambos debieran estar en la misma ruta/carpeta que la planilla de concentración y/o algún caracter distinto de más o de menos en alguno de los nombres ?

saludos,

hector.

Share this post


Link to post
Share on other sites

Buenas noches amigo Hector, después de tanto lidiar, en el porque no extraía la información, te debo comentar que los parámetros indicados por tú persona estaban en lo correcto,sino que mi error estaba que no había echo:

paso 1: normalizar los datos de la columna "A" (Cod) +/- como sigue (todas las celdas con formato texto):
- abre tu libro sort trab.xlsm, selecciona en la hoja "ingreso" el rango con datos en la columna A
- abre el editor de VBA (atajo: Alt + F11), muestra la ventana de inmediato (atajo: ctrl + G)
- copia/pega (o escribe) lo siguiente (y pulsas {enter} para ejecutarlo), luego guardas y cierras
selection.numberformat = "@"

como indicaste en un inicio y ese fue uno de mi gran error, por lo que ahora ya esta ejecutándose todo sin ningún problema en tantos los archivos "estructura planilla guano", como "estructura planilla". por lo que ahora si amigo daría como:

TEMA SOLUCIONADO.

Share this post


Link to post
Share on other sites

Hola ... Estuve leyendo todo el post... Y es algo que me gustaría poder implementar en una aplicación que he estado desarrollando para la cual si Abro los archivos de donde se extrae y se guarda información mediante un tercer archivo controlador.... Es posible entonces utilizar esta rutina para tanto leer como modificar información de diferentes archivos sin abrirlos? Esto me sería de gran utilidad porque entonces el archivo controlador lo puedo tener en varias máquinas y utilizar al mismo tiempo los archivos con las bases de datos...

Share this post


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

INFORMACIÓN BÁSICA SOBRE PROTECCIÓN DE DATOS

Responsable: Sergio Andrés Celemín

Finalidad: Moderar y responder comentarios de usuarios. Recuerda que la información que facilites es pública, y los datos que incluyas los leerá cualquier visitante de esta web, así como el avatar que poseas.

Legitimación: Consentimiento del interesado.

Destinatarios: Hetzner Online GmbH.

Derechos: Puedes ejercitar en cualquier momento tus derechos de acceso,
rectificación, supresión, oposición y demás derechos legalmente establecidos a
través del email sergio@ayudaexcel.com.

Información adicional: Encontrarás más información en la política de privacidad.




×
×
  • Create New...

Important Information

Privacy Policy