Saltar al contenido

Macro para Guardar con mismo Formato


Recommended Posts

publicado

Hola a Todos, consulta, tengo este archivo adjunto, el cual tiene un botom para guardar en una ruta especifica, pero al momento d eguardar lo hace, pero sin el formato original, como podria hacer para que se mantenga el formato de todas las celdas tal cual? Muchas Gracias,

Fact Model 2.xls

publicado

Hola dff1403

A ver si modificando la linea 16 del código se soluciona el tema.

En esta linea se pegan los valores:

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

La Cambias por esta ,donde se pega todo:

Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks _

publicado

Hola Ama, esta de acuerdo, muchas gracias, pero otro favor mas, no capta las celdas C37:I38 en las cuales esta la formula =CONVIERTENUMLETRA(L45) asi como de las celdas A1:L1, no tienen el mismo tamañan por eso al guardar el boton no se puede ver, hay alguna forma para que la copia sea exacta inclyendo lo que les indico? Muchas Gracias de nuevo.

publicado

Hola dff1403

El valor de la celda "C37:I38" depende de una función creada en un módulo ,por este motivo si este módulo no se añade al libro de destino la función no funciona.

Una opción es copiar solo ,el valor de esta celda.Pero si se realizan cambios en el libro ,este valor no será actualizado por la falta de la función.

Respecto al tamaño del rango ,lo puedes modificar con estas lineas:.

Esta para modificar el alto de la fila.

Range("A1:L1").RowHeight = 25

Esta para modificar el ancho de columna.

Range("A1:L1").ColumnWidth = 25

Lo adaptas a tu archivo.

publicado

Hola Ana, Muchas gracias, claro esa opción de copiar los valores como seria para que pueda salir el valor en letras y las fórmulas de sumatoria que trae el archivo? Saludos

publicado

Hola dff 1403

Este es el código con alguna linea mas y su función explicada.Es para poner el valor de la celda "C37" en el libro nuevo.

Sub GuardarComo()

Dim Letras As String 'Variable para recoger el valor de la celda C37
Letras = Range("C37") 'A la variable se le asigna el valor de la celda C37

Columns("A:C").Select
Selection.Copy
Workbooks.Add
Columns("A:A").Select
ActiveSheet.Paste
Range("A1:L45").Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("L2").Select
Application.CutCopyMode = False
With Selection.Validation
.Delete
.Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
:=xlBetween
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = "Seleccione día"
.ErrorMessage = ""
.ShowInput = False
.ShowError = False
End With
Range("C37") = Letras 'A la celda C37 del libro nuevo se le pone el valor de la variable
NombreArchivo = "C:\Users\DANIELFF\Desktop\FACTURA\Factura "
'idea del Usuario arperez
NArchivo = Format(Range("L2").Value, ";@")
ActiveWorkbook.SaveAs NombreArchivo & NArchivo, , , , , , , , , , , False
ActiveWindow.Close
End Sub[/CODE]

publicado

Hola Ama, gracias, pero donde coloco los codigos:

Range("A1:L1").RowHeight = 25

Range("A1:L1").ColumnWidth = 25

En la nueva modificacion que hiciste?

Gracias

publicado

Estimado Ama, disculpa la molestia pero... 1)._ como puedo hacer para que tambien al momento de guardar mantenga el formato pero de las medidas de la hoja que por lado son 0.5.......2)_. tambien cuando guardo, se guarda con el nombre de la celda L2 (que esta perfecto) pero, dime seria posible tambien me apoyes para que a parte de guardarse con esta celda tambien se guarde con la C5, por ejemplo: 001-001509 Nestle Peru S.A.

publicado

Hola dff1403

Si lo que quieres es copiar el archivo con otro nombre puedes utilizar este código:

Sub CopiaArch()

Dim Ruta, NbrArch As String

Ruta = "C:\Users\DANIELFF\Desktop\FACTURA\Factura"

NbrArch = Format(Range("L2").Value, ";@") & " " & Range("C5") & ".xls"

ActiveWorkbook.SaveAs Ruta & NbrArch, , , , , , , , , , , False

ActiveWindow.Close

End Sub

La ruta donde quieres guardar el archivo la adaptas a tu nescesidad.

El nombre del archivo esta concatenado(nº de factura y nombre)

La extensión del archivo guardado es ".xls" (con esta extensión se puede abrir en versiones anteriores a excel 2007)

Comenta si te sirve.

publicado

Muchas Gracias, ahora lo probaré, pero... Donde puedo copiar el código? Con referencia al tamaño de la hoja a 0.5 por lado al momento de guardar es posible? Claro saludos

publicado

Hola Ama,

Consulta, donde pongo el codigo:

Sub CopiaArch()

Dim Ruta, NbrArch As String

Ruta = "C:\Users\Daniel\Desktop\EXCELS"

NbrArch = Format(Range("L2").Value, ";@") & " " & Range("C5") & ".xls"

ActiveWorkbook.SaveAs Ruta & NbrArch, , , , , , , , , , , False

ActiveWindow.Close

End Sub

publicado

Hola dff1403

En el archivo adjunto he puesto el código en el módulo2 (para abrirlo pulsa Alt+F11 ,esto abre el editor de Vba ,y en el editor doble clik sobre el modulo2).

Cuando abras el código tienes que modificar la linea que contiene la ruta donde se guarda el libro.(Pones la ruta que quieras)

En el código está marcada la linea a modificar y un ejemplo de como poner la ruta.

Copiar libro.xls

publicado

Espectacularrrrrrr!!!!!, muchisimas Graacias, me ha servido al maximo!!!!!, con referencia al tamaño de la hoja a 0.5 por lado al momento de guardar es posible? seria saludos, muchisimas Gracias Nuevamente!

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.