Ajustar texto celdas combinadas según celda activa

Dias atras hize esta misma pregunta o parecida y recibi respuesta de Uds donde me indicaban accediera al codigo que mas abajo inserto:
Este codigo funciona perfectamente en dicho rango pero yo necesito que lo haga a partir de la celda activa (NO SOY CAPAZ DE ADAPTARLO)
En mi caso la celda activa estaría en cualquier fila de la columna "D" y debo combinar dicha celda hasta la columna "J" y posteriormente Ajustar la celda combinada a la altura que ocupe el texto. (Con esto seria suficiente), pero si luego se bajara a la siguiente celda dentro de la columna "D" que tenga datos y repite la operación seria fabuloso.
Alguien por favor puede adaptarme este u otro código para que realice esta tarea
Gracias anticipadas
Sub AjustarTextoEnCeldasCombinadas()
'Si el rango B5:E5 de la hoja activa no esta combinado, salir sin hacer nada
If Not ActiveSheet.Range("B5:E5").MergeCells Then Exit Sub
Dim sngAnchoTotal As Single, sngAnchoCelda As Single, sngAlto As Single
Dim n As Integer
For n = 2 To 5
sngAnchoTotal = sngAnchoTotal + ActiveSheet.Cells(5, n).ColumnWidth
Next n
With ActiveSheet.Range("B5")
sngAnchoCelda = .ColumnWidth
.HorizontalAlignment = xlJustify
.VerticalAlignment = xlJustify
.MergeCells = False
.ColumnWidth = sngAnchoTotal
ActiveSheet.Rows(5).AutoFit
sngAlto = .RowHeight
End With
With ActiveSheet
.Range("B5:E5").Merge
.Columns(2).ColumnWidth = sngAnchoCelda
.Rows(5).RowHeight = sngAlto
End With
End Sub
{"lat":39.2834350433546,"lng":-2.79235124588013}

1 Respuesta

Respuesta
1
Te marco en negrita las líneas a modificar. No sé si querrás evaluar si la celda activa está combinada, interpreto que no, que ejecutarás desde la celda activa sabiendo que está combinada. Confirmá por favor.
Sub AjustarTextoEnCeldasCombinadas()
'Si el rango B5:E5 de la hoja activa no esta combinado, salir sin hacer nada
'inhabilito línea
'If Not ActiveSheet.Range("B5:E5").MergeCells Then Exit Sub
Dim sngAnchoTotal As Single, sngAnchoCelda As Single, sngAlto As Single
Dim n As Integer, fil as integer
fil = ActiveCell.Row   'guarda la fila activa

For n = 4 To 10   'col D:J
sngAnchoTotal = sngAnchoTotal + ActiveSheet.Cells(fil, n).ColumnWidth
Next n
With ActiveSheet.activecell
sngAnchoCelda = .ColumnWidth
.HorizontalAlignment = xlJustify
.VerticalAlignment = xlJustify
.MergeCells = False
.ColumnWidth = sngAnchoTotal
ActiveSheet.Rows(fil).AutoFit
sngAlto = .RowHeight
End With
With ActiveSheet
.Range("D" & fil & ":J" & fil).Merge
.Columns(4).ColumnWidth = sngAnchoCelda
.Rows(fil).RowHeight = sngAlto
End With
End Sub
Pruébala. Para filas siguientes podemos agregar un bucle o directamente la ejecutás sobre cada fila (con un atajo de teclado sería lo ideal)
Saludos
Elsa
* No te pierdas las novedades de Nbre que encontrarás en:
http://es.geocities.com/lacibelesdepunilla/manuales
Gracias querida Elsa Matilde
He cambiado conforme me indicabas pero me da error en:
With ActiveSheet.Activecell
Si le pongo un rango fijo p.e.
With Active.Sheet.Range("D5")
Funciona perfecto, ¿dónde está el truco?, seguro que es una tontería pero..
Aparte de lo anterior, leyendo tu comentario si que necesito evaluar la celda activa para que si la celda activa no esta combinada, proceder a combinarla hasta la celda "Jx" (esta seria la primera instrucción) y por ultimo me puede incorporar el bucle para que pase a la siguiente fila que contenga datos.
Gracias, mil gracias
La rutina original evaluaba si la celda estaba combinada o no. Si no lo estaba finalizada.
Ahora interpreto que en realidad necesitas que no evalúe sino que la combine si tiene datos.
Entonces esta es la ajustada. Confírmame si es lo correcto.
Recorre toda la col DE desde la activa y llega hasta un límite que tendrás que ajustar (por ahora quedó en fila 30)
Sub AjustarTextoEnCeldasCombinadas()
'Ajustada por Elsamatilde
Dim sngAnchoTotal As Single, sngAnchoCelda As Single, sngAlto As Single
Dim n As Integer, fil As Integer, fil2 As Integer
While ActiveCell.Row <= 50
If ActiveCell.value <> "" Then
fil = ActiveCell.Row 'guarda la fila activa
sngAnchoTotal = 0
For n = 4 To 10 'col D:J
sngAnchoTotal = sngAnchoTotal + ActiveSheet.Cells(fil, n).ColumnWidth
Next n
With ActiveSheet.Range("D" & fil)
sngAnchoCelda = .ColumnWidth
.HorizontalAlignment = xlJustify
.VerticalAlignment = xlJustify
.MergeCells = False
.ColumnWidth = sngAnchoTotal
ActiveSheet.Rows(fil).AutoFit
sngAlto = .RowHeight
End With
With ActiveSheet
.Range("D" & fil & ":J" & fil).Merge
.Columns(4).ColumnWidth = sngAnchoCelda
.Rows(fil).RowHeight = sngAlto
End With
End If
ActiveCell.Offset(1, 0).Select
Wend
No sabes la presión que acabo de soltar
Era un reto personal y no veas cuan feliz me siento de encontrar en Ud/Uds tan valiosa ayuda
Gracias, as, as... as
Un abrazo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas