Muy buenas tardes, soy nuevo en esto de las macros pero mucho les agradecería si pudieran ayudarme con un error que tengo,
Sucede que al momento de exportar un archivo de OPUS (ingeniería de costos) a excel, lo que hace el programa OPUS es combinar muchas celdas y ajustar los anchos para que la hoja propiamente se vea bien en formato, sin embargo hay que darle un formato definido por el usuario para tener un archivo sin tantas celdas combinadas y por otro lado evitar que se pierda información dentro de alguna celda,
la sentencia que se genera cuando quiero deshacer una combinacion de 7 celdas (previamente seleccionando el rango de todas las celdas combinadas) es la siguiente:
__________________________________________________________________________
Sub Macro8()
'
' Macro8 Macro
'
'
ActiveWindow.SmallScroll Down:=-12
Range("C4:L20").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
End Sub
____________________________________________________________________________
Se observa que se repite el mismo código entre "withselection" y "End with" (para mí sin razón aparente) , hasta aquí todo bien, el codigo se graba sin problemas, el problema ocurre cuando son muchisimas celdas combinadas y la lista se hace tan larga que la barra de desplazamiento queda muy estrecha, entonces me sale:
error de combinación, procedimiento demasiado largo.
La ayuda de Officce solo me dice dividir el procedimiento porque pesa mas de 64 K, he investigado cómo hacer una sentencia que ayude pero no he tenido éxito.
Agradecería mucho su valiosa ayuda, Muchas gracias de antemano.
Adjunto | Tamaño |
---|---|
macro8.jpg | 184.28 KB |
macro9.jpg | 214.96 KB |
No sé cómo será tu procedimiento de largo, pero seguramente el error estará motivado por otra cosa.
Cuando grabas una macro se graba todo lo que haces, aunque entres en las opciones de formato de la celda y sólo cambies la alineación, se graba todo el formato de la celda, por eso aparece repetido tantas veces lo mismo, eso es en realidad lo que está haciendo Excel cada paso que das.
Ideas:
Simplifica tu código. borra todo lo que has grabado pero que no querías hacer realmente
Si tienes qeu aplicar el mismo cambio de formato con diferentes celdas, por ejemplo primero con Range("C4:L20") y luego con C84:L100) plantéate crear un procedimiento con argumentos, y que ese argumento sea el rango sobre el que quieres realizar la operación
Sub MacroConArgumento(rangoamodificar as range)
With rangoamodificar
...
end With
End Sub
luego simplemente tendrás que llamar a este procedimiento cambiando el rango sobre el que quieres actuar, por ejempo
MacroConArgumento Range("C4:L20")
viendo un poco más despacio el código, podría quedar así:
Sub Macroconargumentos(rangoamodificar As Range)
With rangoamodificar
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.UnMerge
End With
End Sub
------
Ya sé Excel, pero necesito más.