Saltar al contenido

Redimensionar altura de celda para que quepa todo el texto del textbox/inkedit de un formulario.


Recommended Posts

publicado

Hola amigos.

Les adjunto mi trabajo.

Al pulsar el botón de la Hoja1 se abre un formulario que contiene un inkedit con bastante texto.

Al pulsar sobre el botón del Formulario "Pasar a la celda F2", ese texto pasa a la celda F2, cuyos atributos ya he modificado por macro para que se ajuste a la altura del texto de que debe contener.

Todo funciona bien, excepto que la celda llega a alcanzar su altura máxima permitida por las limitaciones de Excel, por lo que hay una cantidad de texto del formulario que no se ve en la celda.

No quiero tocar el ancho de la celda, porque luego la imprimiré y tiene que tener esa anchura. Así que me gustaría conseguir realizar una macro que fusione de manera vertical tantas filas como sea necesario y las ajuste en altura para albergar todo el texto del formulario (que puede cambiar de tamaño).

He intentado combinar la celda F2 con la F3, por macro, y ajustarlas a su altura máxima, pero me lanza un error .

¿Alguien me puede ayudar?

Muchas gracias.

Redimensionar altura celda para que quepa todo el texto.xlsm

publicado

Hola

Te mando mi propuesta.

Antes de pasar la macro

image.thumb.png.c64d4c1579cbfa8cc08867850292bac0.png

Después de pulsar el botón "Pasar a Celda F2"

image.thumb.png.d260de985bab8ca4f5104e5bc2f1972c.png

Cambio en el código

Quote

Private Sub CommandButton3_Click()

    With Sheets("Hoja1")
        '.Range("F2").EntireRow.AutoFit
        .Range("F2") = InkEdit1.Text
        .Range("F2:F4").Merge
        .Range("F2:F4").RowHeight = 409
    End With


End Sub

Saludos

 

publicado
Hace 38 minutos , Frank2021 dijo:

Hola

Te mando mi propuesta.

Antes de pasar la macro

image.thumb.png.c64d4c1579cbfa8cc08867850292bac0.png

Después de pulsar el botón "Pasar a Celda F2"

image.thumb.png.d260de985bab8ca4f5104e5bc2f1972c.png

Cambio en el código

Saludos

 

Espectacular, funciona perfectamente ??????

 

¿Podrías explicarme un poco las líneas :

        .Range("F2:F4").Merge
        .Range("F2:F4").RowHeight = 409 ?

 

Muchas gracias.

publicado

Hola,

 .Range("F2:F4").Merge -> Combina las celdas F2,F3 y F4

 .Range("F2:F4").RowHeight = 409 -> Establece el alto de las filas 2,3 y 4 a 409 puntos. El número 409  es la cantidad máxima que puede alcanzar el alto de la fila en Excel medida en puntos.

Más información sobre "Especificaciones y límtes de Excel" en Especificaciones y límites de Excel (microsoft.com)

Saludos

publicado
Hace 17 minutos , Frank2021 dijo:

Hola,

 .Range("F2:F4").Merge -> Combina las celdas F2,F3 y F4

 .Range("F2:F4").RowHeight = 409 -> Establece el alto de las filas 2,3 y 4 a 409 puntos. El número 409  es la cantidad máxima que puede alcanzar el alto de la fila en Excel medida en puntos.

Más información sobre "Especificaciones y límtes de Excel" en Especificaciones y límites de Excel (microsoft.com)

Saludos

Muchas gracias.

Has solucionado mi problema, pero mi gozo en un pozo: al intentar imprimir el resultado final, me lo hace cada fila en una página diferente ?

Hay alguna manera de solucionarlo, haciendo que me lo imprima seguido y lo que no quepa, en otro folio... pero todo seguido? Mira el resultado:

 

Los tres folios.jpg

publicado
Hace 2 horas, Frank2021 dijo:

Hola,

Seleciona las celdas a imprimir, en este caso F2,F3 y F4.

Luego vas al menú Archivo -> Imprimir y lo configuras así:

image.thumb.png.e8c3a2400953562e3a32eba89cff24ba.png

Saludos

¿Y se puede hacer por código (macro)? Es para poner un botón que imprima directamente.

publicado

Hola,

Sí, se puede.

Añade un botón Imprimir en la hoja. Llamalo "btnImprimir" y en el evento Click añades el siguiente código:

Quote

Private Sub btnImprimir_Click()

    Range("F2:F4").Select
    With ActiveSheet.PageSetup
        .LeftMargin = Application.InchesToPoints(0.7)
        .RightMargin = Application.InchesToPoints(0.7)
        .TopMargin = Application.InchesToPoints(0.7)
        .BottomMargin = Application.InchesToPoints(0.7)
        .HeaderMargin = Application.InchesToPoints(0.3)
        .FooterMargin = Application.InchesToPoints(0.3)
        .PrintHeadings = False
        .PrintGridlines = False
        .Orientation = xlPortrait
        .PaperSize = xlPaperA4
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With
    
   'Falta instrucción <-----------

End Sub

Quedaría así:

image.thumb.png.ac075737b86b48c8339af73c5c330a6a.png

En el código enviado falta por poner una instrucción.

Para que tú la investigues

Saludos

 

publicado
En 10/12/2021 at 8:48 , Frank2021 dijo:

En el código enviado falta por poner una instrucción.

Muchas gracias. He puesto el siguiente código que faltaba, y funciona perfectamente:

    Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:="PDFGuardado" & ".pdf", _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True

 

De todas maneras se imprime muy pequeñito... debe de haber otra manera. Me estoy volviendo loco y no consigo hacer el texto imprimido más grade. Que rabia me da.

publicado
Hace 17 minutos , Frank2021 dijo:

Hola,

muy bien la instrucción que escribiste.

Delante de esa, pon esta

Worksheets("Hoja1").PageSetup.Zoom = 75

A ver qué tal

Saludos

Mejora bastante... pero me gustaría conseguir imprimir o guardar a tamaño real (100%) pero sin los saltos tan grandes que deja: empiezo a pensar que quizás no se pueda hacer ?

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

    • 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 
    • Podrías compartir tu solucion
  • 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.