programing

각 워크시트 루프에 대한 Excel VBA

abcjava 2023. 6. 10. 07:55
반응형

각 워크시트 루프에 대한 Excel VBA

기본적으로 워크북의 각 시트를 살펴본 다음 열 너비를 업데이트하는 코드 작업을 수행하고 있습니다.다음은 제가 작성한 코드입니다. 오류가 발생하지는 않지만 실제로는 아무 것도 작동하지 않습니다.어떤 도움이든 대단히 감사합니다!

 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

코드를 약간 수정합니다.

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

메모,resizingColumns루틴에서는 범위가 속하는 모수 - 워크시트를 사용합니다.

기본적으로, 사용할 때Range("O:O")ActiveSheet에서 범위가 지정된 코드 연산자를 사용해야 합니다.With ws진술하고 나서.Range("O:O").

또한 글로벌 변수를 사용할 필요가 없습니다(다른 곳에서 사용하지 않는 한).

다음 코드를 사용해 보십시오.

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

추가 열을 원하는 경우 변경합니다.1 to 15로.1 to X어디에X원하는 열의 열 인덱스이며, 원하는 열 크기를 추가합니다.StrSize.

예를 들어, 당신이 원한다면,P:P폭이 …인25그냥 추가;25로.StrSize그리고 변화ColIter...로.ColIter = 1 to 16.

이게 도움이 되길 바랍니다.

아래와 같이 범위 문에 워크시트 식별자를 입력해야 합니다.

 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

위에서 제안한 대로 모든 범위 앞에 "ws."를 추가하는 대신 "ws.activate"를 통화 앞에 추가할 수 있습니다.

작업할 워크시트로 이동합니다.

언급URL : https://stackoverflow.com/questions/21918166/excel-vba-for-each-worksheet-loop

반응형