programing

Excel 2007 VBA에서 Excel 워크시트의 맨 위 행을 프로그램 방식으로 고정하려면 어떻게 해야 합니까?

closeapi 2023. 4. 11. 22:02
반응형

Excel 2007 VBA에서 Excel 워크시트의 맨 위 행을 프로그램 방식으로 고정하려면 어떻게 해야 합니까?

VBA에서 엑셀 워크시트의 맨 윗줄을 프로그래밍 방식으로 고정하려고 합니다.최종 목표는 다음과 같은 효과를 내는 것입니다.View > Freeze Panes > Freeze Top Row명령을 사용하면 워크시트의 맨 위 행이 정지되고 사용자가 데이터를 스크롤하는 동안에도 워크시트의 맨 위 행을 볼 수 있습니다.

Rows("2:2").Select
ActiveWindow.FreezePanes = True

다른 효과를 얻으려면 수동으로 수행하는 것과 같은 방법으로 다른 범위를 선택합니다."Freeze Top Row"는 Excel 2007(이후)의 새로운 숏컷일 뿐이며 이전 버전의 Excel에 비해 추가된 기능은 없습니다.

Tomalak은 이미 정답을 알려줬지만, 대부분의 경우 사용자 인터페이스에서 특정 작업을 수행하기 위해 필요한 VBA 코드를 알고 싶을 때는 매크로를 기록하는 것이 좋습니다.

이 경우 리본의 현상제 탭에서 매크로 기록을 클릭하고 맨 위 행을 고정시킨 다음 기록을 중지합니다.Excel에는 다음 매크로가 기록됩니다.이 매크로도 이 작업을 수행합니다.

With ActiveWindow
    .SplitColumn = 0
    .SplitRow = 1
End With
ActiveWindow.FreezePanes = True

기록된 매크로의 문제는 삽입 액션의 문제와 동일합니다.Excel은 헤더 정보를 찾을 수 있는 실제 맨 위 행이 아닌 맨 행을 고정하도록 선택합니다.

이 경우 매크로의 목적은 실제 상단 행을 고정하는 것입니다.#405592 행을 표시할 때 (파일을 열 때 행을 고정하는 것을 잊어버렸기 때문에) 열 머리글을 확인해야 할 경우 맨 위로 스크롤하고 맨 위 행을 고정시킨 후 다시 #405592 행으로 돌아갑니다.저는 이게 바보 같은 행동이라고 생각하기 때문에매크로로 수정하고 싶은데녹음된 매크로는 똑같은 바보 같은 행동을 하고 있어요

Mac OS X Lion용 Office 2011을 사용하고 있습니다.

업데이트(2분 후):

여기서 해결책을 찾았습니다.http://www.ozgrid.com/forum/showthread.php?t=19692

Dim r As Range 
Set r = ActiveCell 
Range("A2").Select 
With ActiveWindow 
    .FreezePanes = False 
    .ScrollRow = 1 
    .ScrollColumn = 1 
    .FreezePanes = True 
    .ScrollRow = r.Row 
End With 
r.Select 

그냥 같은 문제에 부딪히면...어떤 이유에서인지 freezepanes 명령어는 화면 중앙에 십자형 포인터를 표시했을 뿐입니다.알고 보니 ScreenUpdating이 꺼졌네요!다음 코드로 해결:

Application.ScreenUpdating = True
Cells(2, 1).Select
ActiveWindow.FreezePanes = True

이제 잘 작동합니다.

이 질문을 Excel 자체 VBA 이외의 사용 영역으로 확장하려면 ActiveWindow 속성을 Excel의 자녀로 지정해야 합니다.응용 프로그램오브젝트

Access에서 Excel 워크북을 작성하는 예:

Excel 사용.다른 Office 어플리케이션의 VBA 프로젝트에서 어플리케이션 오브젝트를 사용하려면 Microsoft Excel 15.0 오브젝트 라이브러리(또는 동등한 버전)를 추가해야 합니다.

Option Explicit

Sub xls_Build__Report()
    Dim xlApp As Excel.Application, ws As Worksheet, wb As Workbook
    Dim fn As String

    Set xlApp = CreateObject("Excel.Application")
    xlApp.DisplayAlerts = False
    xlApp.Visible = True

    Set wb = xlApp.Workbooks.Add
    With wb
        .Sheets(1).Name = "Report"
        With .Sheets("Report")

            'report generation here

        End With

        'This is where the Freeze Pane is dealt with
        'Freezes top row
        With xlApp.ActiveWindow
            .SplitColumn = 0
            .SplitRow = 1
            .FreezePanes = True
        End With

        fn = CurrentProject.Path & "\Reports\Report_" & Format(Date, "yyyymmdd") & ".xlsx"
        If CBool(Len(Dir(fn, vbNormal))) Then Kill fn
        .SaveAs FileName:=fn, FileFormat:=xlOpenXMLWorkbook
    End With

Close_and_Quit:
    wb.Close False
    xlApp.Quit
End Sub

핵심 프로세스는 실제로 이전에 제출한 답변의 반복일 뿐이지만, Excel 자체 VBA에 속하지 않을 경우 Active Window에 대처하는 방법을 시연하는 것이 중요하다고 생각했습니다.이 코드는 VBA이지만 다른 언어 및 플랫폼으로 직접 변환할 수 있어야 합니다.

Rows("2:2").Select
ActiveWindow.FreezePanes = True

이것은 맨 위 열을 고정하는 가장 쉬운 방법입니다.FreezePanes선택한 셀의 왼쪽 상단 모서리가 고정됩니다.예를 들어 C10을 강조 표시하면 열 B와 C(행 9와 10) 사이에 고정됩니다.따라서 행 2를 강조 표시하면 행 1과 행 2의 맨 위 행 사이에 실제로 고정됩니다.

,,.SplitColumn ★★★★★★★★★★★★★★★★★」.SplitRow얼음을 풀면 유리창이 갈라집니다.이건 제가 좋아하는 방식이 아닙니다.

언급URL : https://stackoverflow.com/questions/3232920/how-can-i-programmatically-freeze-the-top-row-of-an-excel-worksheet-in-excel-200

반응형