programing

ActiveWindow를 사용하지 않고 VBA를 사용하여 Excel에서 격자선을 끄는 방법

telecom 2023. 8. 8. 20:02
반응형

ActiveWindow를 사용하지 않고 VBA를 사용하여 Excel에서 격자선을 끄는 방법

Excel 2013 위에 별도의 Excel 보고서를 생성하는 VBA 매크로가 있습니다.생성된 이 Excel 보고서에서 그리드라인을 해제하려고 합니다.

이를 실현할 수 있는 유일한 코드는 다음과 같습니다.

ActiveWindow.DisplayGridlines = False

그러나 이 엑셀은 백그라운드에서 생성됩니다. 즉,

Dim appObject As New Excel.Application
appObject.Visible = False

즉, 이 보고서는 활성화된 창이 아닙니다.ActiveWindow 개체를 사용하지 않고 격자선을 끄는 다른 방법이 있습니까?

워크북에 대한 참조가 있는 경우 해당 컬렉션의 모든 Windows에 대해 반복할 수 있습니다.응용 프로그램이 표시되지 않으면 1만 표시해야 하지만 인덱스를 하드 코딩하는 것보다 안전합니다.

Private Sub ToggleGridLines(target As Workbook)
    Dim wnd As Window
    For Each wnd In target.Windows
        wnd.DisplayGridlines = False
    Next
End Sub

그러면 워크북의 활성 워크시트에 표시되는 내용이 변경됩니다. 즉, 워크시트가 창의 속성이지 워크시트가 아닌 이유가 변경됩니다.

편집:

@Tim이 공유한 링크 덕분에, 저는 제가 완전히 떨어져 있다는 것을 깨달았습니다.SheetViews수집.임의의 경우 격자선을 꺼야 합니다.Worksheet객체:

Private Sub TurnOffGridLines(target As Worksheet)
    Dim view As WorksheetView
    For Each view In target.Parent.Windows(1).SheetViews
        If view.Sheet.Name = target.Name Then
            view.DisplayGridlines = False
            Exit Sub
        End If
    Next
End Sub

ActiveWindow는 Windows 개체 컬렉션의 멤버입니다.다른 컬렉션과 마찬가지로 활성 창을 지정하는 대신 이름으로 실제 창을 참조하십시오.

Windows("My Workbook.xls").DisplayGridlines = False

우리는 "코민테른"이 제안한 대로 하거나 루프에서 적절한 코드 라인을 실행하기 위해 원하는 시트를 활성화할 수 있습니다.저는 위에 게시된 코드를 여러 가지 방법으로 시도했고 저에게 가장 적합한 스니펫을 게시합니다.

Sub GridLines(Optional target As Worksheet, Optional display As Boolean = True)

    Dim oWnd As Window
    Dim oShView As WorksheetView
    If IsMissing(target) Or target Is Nothing Then
        For Each oShView In ActiveSheet.Parent.Windows(1).SheetViews
            oShView.DisplayGridlines = display
        Next
    Else
        For Each oShView In target.Parent.Windows(1).SheetViews
            If oShView.Sheet.Name = target.Name Then
                oShView.DisplayGridlines = display
                Exit For
            End If
        Next
    End If
    Set oShView = Nothing
    Set oWnd = Nothing
End Sub

어떠한 피드백도 매우 환영합니다.

20을 사용할 수 있는데 왜 한 줄의 코드를 사용합니까?

Windows(ActiveWorkbook.Name).DisplayGridlines = False

언급URL : https://stackoverflow.com/questions/40368373/how-can-i-turn-off-gridlines-in-excel-using-vba-without-using-activewindow

반응형