worksheets workbook visual todas seleccionar que propiedades programaciĆ³n para ocultar objetos objeto microsoft metodos macro lista lenguaje las hojas hoja for espaƱol ejemplos ejemplo crear comandos codigos automaticamente activa excel vba for-loop each worksheet

workbook - worksheets count vba excel



Excel VBA para cada hoja de trabajo (4)

Estoy trabajando en el código para revisar básicamente cada hoja de mi libro de trabajo y luego actualizar los anchos de columna. A continuación se muestra el código que escribí; No recibo ningún error, pero tampoco hace nada. ¡Cualquier ayuda es muy apreciada!

Option Explicit Dim ws As Worksheet, a As Range Sub forEachWs() For Each ws In ActiveWorkbook.Worksheets Call resizingColumns Next End Sub Sub resizingColumns() Range("A:A").ColumnWidth = 20.14 Range("B:B").ColumnWidth = 9.71 Range("C:C").ColumnWidth = 35.86 Range("D:D").ColumnWidth = 30.57 Range("E:E").ColumnWidth = 23.57 Range("F:F").ColumnWidth = 21.43 Range("G:G").ColumnWidth = 18.43 Range("H:H").ColumnWidth = 23.86 Range("i:I").ColumnWidth = 27.43 Range("J:J").ColumnWidth = 36.71 Range("K:K").ColumnWidth = 30.29 Range("L:L").ColumnWidth = 31.14 Range("M:M").ColumnWidth = 31 Range("N:N").ColumnWidth = 41.14 Range("O:O").ColumnWidth = 33.86 End Sub


Debe colocar el identificador de la hoja de trabajo en sus declaraciones de rango como se muestra a continuación ...

Option Explicit Dim ws As Worksheet, a As Range Sub forEachWs() For Each ws In ActiveWorkbook.Worksheets Call resizingColumns Next End Sub Sub resizingColumns() ws.Range("A:A").ColumnWidth = 20.14 ws.Range("B:B").ColumnWidth = 9.71 ws.Range("C:C").ColumnWidth = 35.86 ws.Range("D:D").ColumnWidth = 30.57 ws.Range("E:E").ColumnWidth = 23.57 ws.Range("F:F").ColumnWidth = 21.43 ws.Range("G:G").ColumnWidth = 18.43 ws.Range("H:H").ColumnWidth = 23.86 ws.Range("i:I").ColumnWidth = 27.43 ws.Range("J:J").ColumnWidth = 36.71 ws.Range("K:K").ColumnWidth = 30.29 ws.Range("L:L").ColumnWidth = 31.14 ws.Range("M:M").ColumnWidth = 31 ws.Range("N:N").ColumnWidth = 41.14 ws.Range("O:O").ColumnWidth = 33.86 End Sub


En lugar de agregar "ws". antes de cada Rango, como se sugirió anteriormente, puede agregar "ws.activate" antes de Llamar.

Esto te llevará a la hoja de trabajo en la que quieres trabajar.


Intenta modificar ligeramente tu código:

Sub forEachWs() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets Call resizingColumns(ws) Next End Sub Sub resizingColumns(ws As Worksheet) With ws .Range("A:A").ColumnWidth = 20.14 .Range("B:B").ColumnWidth = 9.71 .Range("C:C").ColumnWidth = 35.86 .Range("D:D").ColumnWidth = 30.57 .Range("E:E").ColumnWidth = 23.57 .Range("F:F").ColumnWidth = 21.43 .Range("G:G").ColumnWidth = 18.43 .Range("H:H").ColumnWidth = 23.86 .Range("i:I").ColumnWidth = 27.43 .Range("J:J").ColumnWidth = 36.71 .Range("K:K").ColumnWidth = 30.29 .Range("L:L").ColumnWidth = 31.14 .Range("M:M").ColumnWidth = 31 .Range("N:N").ColumnWidth = 41.14 .Range("O:O").ColumnWidth = 33.86 End With End Sub

Tenga en cuenta que la rutina resizingColumns toma parametr: hoja de trabajo a la que pertenece Ranges.

Básicamente, cuando utiliza Range("O:O") : el código opera con un rango de ActiveSheet , por eso debería usar With ws y luego .Range("O:O") .

Y no hay necesidad de usar variables globales (a menos que las estés usando en otro lugar)


Prueba este código más sucinto:

Sub LoopOverEachColumn() Dim WS As Worksheet For Each WS In ThisWorkbook.Worksheets ResizeColumns WS Next WS End Sub Private Sub ResizeColumns(WS As Worksheet) Dim StrSize As String Dim ColIter As Long StrSize = "20.14;9.71;35.86;30.57;23.57;21.43;18.43;23.86;27.43;36.71;30.29;31.14;31;41.14;33.86" For ColIter = 1 To 15 WS.Columns(ColIter).ColumnWidth = Split(StrSize, ";")(ColIter - 1) Next ColIter End Sub

Si desea columnas adicionales, simplemente cambie de 1 to 15 a 1 to X donde X es el índice de columna de la columna que desea, y agregue el tamaño de columna que desee a StrSize .

Por ejemplo, si desea que P:P tenga un ancho de 25 , simplemente agregue ;25 a StrSize y cambie ColIter... a ColIter = 1 to 16 .

Espero que esto ayude.