Saltar al contenido

Macro que contenga en un libro otra macro


Recommended Posts

publicado

Con el permiso de todos lo integrantes de esta comunidad de expertos solicito sus valiosas ayudas por favor, se trata de una macro como menciona en el titulo tengo una carpeta llamado JULIO dentro de ella contiene un libro llama Distribuir transaciones.xlsm este libro al abrir contiene varias hojas inicio, cadenas, muestra y fechas cada una de ellas cumplen su rol importante explico en la hoja inicio está la fecha o el mes donde tengo que poner el último mes que es trabajado, además e eso hay dos celdas con la dirección de rutas donde están ubicado las carpetas y los libros, a la vez hay un botón donde esta enlazado con la macro, en la hoja cadenas contiene los nombres de los posible libros a trabajar, en la hoja muestra están los nombre de los libros que van ser analizados por la macro y por ultimo en la hoja fechas donde van ser copiados las fechas copiadas. Ahora como va funciona esta macro del libro Distribuir transaciones.xlsm puesto la ruta y el mes en la hoja inicio pulso el botón separar transacciones por cadena va buscar en la carpeta REPORTE DIARIO DE TRANSACCIONES (CONFIRMA IVL) va abrir los libros REPORTE DIARIO DE TRANSACCIONES (CONFIRMA IVL).xls y los demás libros que acompañan (menos el libro CALCULOSUPERKOMPRAS.xlsx) entonces la macro va recorrer todos esos libros y hojas y va capturar los datos del mes correspondiente ejecutado en la hoja inicio Distribuir transaciones.xlsm y va copiar esos registro y los va copiar y pegar en la hoja TRANSACCIONES del libro CALCULOSUPERKOMPRAS.xls y finalizar la macro; bueno tengo un avance donde recorre todo lo expuesto anteriormente pero no me captura los datos por eso que busco ayuda en esta prestigiosa comunidad de Excel. Espero había sido claro en explicarle mi planteamiento y espero sus valiosos ayudas por favor…muchas gracias...Ajunto la carpeta comprimido.

 

https://1drv.ms/u/s!AvFu_AJyrHaQqEmyLSUAKC3UX5V0?e=VKFqb7

 

  • Gerson Pineda changed the title to Macro que contenga en un libro otra macro
publicado

Saludos @jeaa, revisa el anexo, si entendí bien, hace lo que pides. (se ejecuta con el botón Separar Transaciones por Cadena Nuevo)

la macro, abre cada uno de los archivos de la hoja Muestra, filtra los datos por la fecha indicada (celda C3 de la hoja inicio), copia los valores a la hoja TRANSACCIONES del archivo "CALCULOSUPERKOMPRAS.xlsx" y copia las fechas en la hoja fechas del libro principal.

Suerte

Distribuir transaciones.xlsm

publicado

bigpetroman, muchas gracias funciona casi hasta el 90% solo un ultimo detalle por favor indícame de este error que a continuación te nuestro la imagen

image.png.b21ad72b54e181068b65bd1476186bad.png

cuando lo depuro me manda que del filtro es 

image.thumb.png.a52f1f76fd6e974b3aee5eb7ea1a5d72.png

por favor me indicas ese error y otro es que crea otro libro para copiar cuando debe copiar en el libro abierto disulpe...un millón de gracias

publicado

no amigo, la macro NO crea ningún libro (bueno, la macro que yo coloque), y el error de seguro te da por algún archivo que está abriendo y tenga la hoja TRANSACCIONES bloqueada o que la tabla NO inicia en la fila 7, revisa eso, con lo que tu pasaste funciona perfecto.

 

publicado

con eso mismos estoy probando yo también y me sale ese error, lo que pasa es que abre el libro CALCULO Casa Ley y ahi donde sale ese error disculpe no crea sino abre ese libro y salta el error

publicado

no se amigo, a mi me funciona bien con los archivos que pasaste, y NO veo ningún problema en la macro.

intenta abrir los archivos y quitas el filtro de la hoja TRANSACCIONES y guardas el archivo, para ver, pero eso no debería influir para nada

una pregunta, que office tienes?, y por si acaso, pon a grabar una macro, y realiza un filtro de los datos de la hoja TRANSACCIONES y seleccionas que te muestre los datos de julio.

paras la grabación de la macro y me copias eso, simplemente para ver.

 

 

publicado

Vengo usando Office 2019 me pediste grabara esta macro por favor:

    ActiveSheet.Range("$A$7:$Q$4754").AutoFilter Field:=1, Operator:= _
        xlFilterValues, Criteria2:=Array(1, "7/27/2020")
    ActiveWindow.SmallScroll Down:=66

 

publicado

creí que podía ser algo con el esa línea, pero no, es igual, así que no veo el motivo del problema, a mi me funciona correctamente.

eliminaste el filtro de ambos archivos (solo para probar).

la tabla inicia en la fila 7?

NO está protegida la hoja TRANSACCIONES ?

de resto, no veo el motivo, quita el nombre de ese archivo de la hoja Muestra, que solo te quede CALCULO Red Efectiva.xlsx, si da el mismo problema, pues me imagino que será algo del auto filtro con el excel 2019.

yo tengo el 2016 y todo ok.

me confirmas por favor, si es así, pues la otra forma es sin auto filtro, buscar los datos del mes y copiar

 

publicado

bigpetroman, quizá como usted dice es por la versión del excel a persiste a pesar de lo que e seguido las instrucciones me podria brindar otra forma, mil de gracias por la ayuda.

publicado

Muchísimas gracias, esto si funciona perfecto bigpetroman eres un crack

publicado

Muchísimas gracias, esto si funciona perfecto bigpetroman eres un crack. Una ultima consulta si pongo mas libros de Excel me podría funcionar igual o tengo que modificar alguna parte del código con esto cerramos no sabes lo agradecido que estoy por tu ayuda.

publicado

si, me refiero que si aumento mas archivos con otros nombres también lo va reconocer igual lo va leer?

 

publicado

muchísimas gracias, tema cerrado

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.