Saltar al contenido

Crear macro para copiar hoja y renombrar en base a lista variable


jumarcano

Recommended Posts

publicado

buenos días,

Tengo el siguiente macro. Es para copiar una hoja y dar nombre de acuerdo a una lista. Sin embargo, cuando agrego un nombre mas en la lista me da erro.

Alguien me puede ayudar?

Sub Copia()

   Dim C As Range   

   Application.ScreenUpdating = False   

   For Each C In Range("A2", Range("A" & Rows.Count).End(xlUp))

      Sheets("Molde").Copy , Sheets(Sheets.Count)

      With ActiveSheet

         .Range("A5") = ? .Name = Left(C.Offset(, 1), 31)

      End With

   Next C   

   Application.ScreenUpdating = True

End Sub

 

Ejemplo Copiar Hoja.xlsm

publicado
Hace 17 minutos , jumarcano dijo:

buenos dias,

Tengo el siguiente macro. Es para copiar una hoja y dar nombre de acuerdo a una lista. Sin embargo, cuando agrego un nombre mas en la lista me da erro.

Alguien me puede ayudar?

Sub Copia()
   Dim C As Range
   
   Application.ScreenUpdating = False
   
   For Each C In Range("A2", Range("A" & Rows.Count).End(xlUp))
      Sheets("Molde").Copy , Sheets(Sheets.Count)
      With ActiveSheet
         .Range("A5") = ? .Name = Left(C.Offset(, 1), 31)
      End With
   Next C
   
   Application.ScreenUpdating = True
End Sub

Ejemplo Copiar Hoja.xlsm 29 kB · 0 descargas

Pedon es esta la macro

Sub Copia()
Dim C As Range
'--
Application.ScreenUpdating = False
For Each C In Range("A4", Range("A" & Rows.Count).End(xlUp))
   Sheets("ModeloS").Copy , Sheets(Sheets.Count)
   With ActiveSheet
     .Range("B3") = C
     If Len(.Name) > 31 Then
        .Name = Left(C.Offset(, 1), 31)
     Else
        .Name = C
     End If
   End With
Next C
Application.ScreenUpdating = True
End Sub
 

publicado

La macro tal como la tienes solo puede ejecutarse 1 vez, también has de tener cuidado con que los nombres no se dupliquen.

Aclara un poco más el error y en que circunstancias se produce.

publicado
Hace 8 minutos , Antoni dijo:

La macro tal como la tienes solo puede ejecutarse 1 vez, también has de tener cuidado con que los nombres no se dupliquen.

Aclara un poco más el error y en que circunstancias se produce.

Gracias por tu pronta respuesta.

Exactamente ocurre una vez. Ocurre el error cuando agrego un nombre mas a la lista asi no sea duplicado. Por ejemplo tengo 20 nombres difrentes y agrego el 21 totalmente diferente y me da error

publicado
Hace 43 minutos , jumarcano dijo:

Gracias por tu pronta respuesta.

Exactamente ocurre una vez. Ocurre el error cuando agrego un nombre mas a la lista asi no sea duplicado. Por ejemplo tengo 20 nombres difrentes y agrego el 21 totalmente diferente y me da error

por eso,lo que quiero es que cuando agregue un nombre diferente en la lista cree la copia con el nombre nuevo.

Es decir que si tengo  20 nombres diferentes, pueda crear la hoja 21 con su nombre

Producto1 con su hoja Producto1
Producto2 con su hoja Producto2
Producto3 con su hoja Producto3
Producto4 con su hoja Producto4
Producto5 con su hoja Producto5
Producto6 con su hoja Producto6
Producto7 con su hoja Producto7
Producto8 con su hoja Producto8
Producto9 con su hoja Producto9
Producto10 con su hoja Producto10
Producto11 con su hoja Producto11
Producto12 con su hoja Producto12
Producto13 con su hoja Producto13
Producto14 con su hoja Producto14
Producto15 con su hoja Producto15
Producto16 con su hoja Producto16
Producto17 con su hoja Producto17
Producto18 con su hoja Producto18
Producto19 con su hoja Producto19
Producto20 con su hoja Producto20
Producto21 con su hoja Producto21
publicado

Hola @jumarcano

A la macro que tienes, le agregué una pequeña comprobación para que si el nombre de la hoja existe, no la cree nuevamente.

Dicha función es una adaptación a una enseñanza de @Antoni para suplantar las propiedades "EnableEvents" en un formulario.

Puedes probar para ver si es lo que necesitas?

Que tengas una buena jornada!

ae20190921_Ejemplo Copiar Hoja.xlsm

publicado
En 21/9/2019 at 15:38 , tierra_pampa dijo:

Hola @jumarcano

A la macro que tienes, le agregué una pequeña comprobación para que si el nombre de la hoja existe, no la cree nuevamente.

Dicha función es una adaptación a una enseñanza de @Antoni para suplantar las propiedades "EnableEvents" en un formulario.

Puedes probar para ver si es lo que necesitas?

Que tengas una buena jornada!

ae20190921_Ejemplo Copiar Hoja.xlsm 28 kB · 3 descargas

Gracias por tu excelnte respuesta. Pero me da error en el archivo que quiero adaptarlo

publicado

Por favor si 

En 21/9/2019 at 15:38 , tierra_pampa dijo:

Hola @jumarcano

A la macro que tienes, le agregué una pequeña comprobación para que si el nombre de la hoja existe, no la cree nuevamente.

Dicha función es una adaptación a una enseñanza de @Antoni para suplantar las propiedades "EnableEvents" en un formulario.

Puedes probar para ver si es lo que necesitas?

Que tengas una buena jornada!

ae20190921_Ejemplo Copiar Hoja.xlsm 28 kB · 4 descargas

Por favor, te agreceria que revisaras mi archivo. Este archivo me esta dando error usando la misma formula que me enviaste.

La vez pasada no logre subir el archivo por el fichero. Intento por mega. Espero puedas revisarlo

Gracias nuevamente por tu respuesta

https://mega.nz/#!95NFHCZY!hco2CBpYyIcdUbiiX3ZpR5qtzqjG9w0KGMZcIkrNUGc

publicado

Hola @jumarcano

Te dejo un nuevo archivo para que compruebes si es lo que necesitas.

Como los nombres de hoja eran muy largos los modifiqué a una letra y sus respectivos valores numéricos. Si no los quieres de dicha manera, avisas y lo eliminamos.

Si te ayudó la colaboración recibida, puedes agradecerlo con un click en el corazón que se encuentra en la parte inferior derecha del comentario.

Suerte!

ae20190924_post42166_Macro Argentina.xlsm

publicado
Hace 19 horas, tierra_pampa dijo:

Hola @jumarcano

Te dejo un nuevo archivo para que compruebes si es lo que necesitas.

Como los nombres de hoja eran muy largos los modifiqué a una letra y sus respectivos valores numéricos. Si no los quieres de dicha manera, avisas y lo eliminamos.

Si te ayudó la colaboración recibida, puedes agradecerlo con un click en el corazón que se encuentra en la parte inferior derecha del comentario.

Suerte!

ae20190924_post42166_Macro Argentina.xlsm 54 kB · 1 descarga

Muchas garcias. Es lo que estaba buscando. En cuanto a los nombres esta bien..... es mas facil buscar

saludos

publicado
Hace 23 horas, tierra_pampa dijo:

Hola @jumarcano

Te dejo un nuevo archivo para que compruebes si es lo que necesitas.

Como los nombres de hoja eran muy largos los modifiqué a una letra y sus respectivos valores numéricos. Si no los quieres de dicha manera, avisas y lo eliminamos.

Si te ayudó la colaboración recibida, puedes agradecerlo con un click en el corazón que se encuentra en la parte inferior derecha del comentario.

Suerte!

ae20190924_post42166_Macro Argentina.xlsm 54 kB · 4 descargas

Disculpa la molestia.

Como los nombres de hoja eran muy largos los modifiqué a una letra y sus respectivos valores numéricos. Si no los quieres de dicha manera, avisas y lo eliminamos.

Quiero eliminar el nombre corto y su valor numerico. Hice una prueba ahorita y es mejor el nombre completo. Solo tengo que buscar el nombre. Si no tengo que adivinar cual es el vendedor.

Por ejemplo

Vendedor 1 es Pedro Peres

Vendedor 2 Luisa Rosal

Entonces necesito que la hoja se llame, Pedro Peres, Luisa Roral..... ect

Gracias de antemano

ae20190924_post42166_Macro Argentina.xlsm

publicado

hola @jumarcano

Dejo un nuevo archivo para tu comprobación.

Cómo no explicaste dónde iban los nombres de los vendedores, las hojas se crearán con el nombre que ingreses en la columna "B" (como en el primer archivo que subiste al foro). Puedes poner cualquier nombre (siempre que Excel lo admita).

Cualquier problema, nos seguimos contactando por el foro.

Suerte!

ae20190926_post42166_Ejemplo Copiar Hoja_v3.xlsm

publicado
En 26/9/2019 at 20:24 , tierra_pampa dijo:

hola @jumarcano

Dejo un nuevo archivo para tu comprobación.

Cómo no explicaste dónde iban los nombres de los vendedores, las hojas se crearán con el nombre que ingreses en la columna "B" (como en el primer archivo que subiste al foro). Puedes poner cualquier nombre (siempre que Excel lo admita).

Cualquier problema, nos seguimos contactando por el foro.

Suerte!

ae20190926_post42166_Ejemplo Copiar Hoja_v3.xlsm 66 kB · 0 descargas

Tienes razon, no indique donde. Los nombre van en la columna A. Todos los vendedores tienen nombre

Entonces, necesito que se utilice la columna A

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.