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
'programing' 카테고리의 다른 글
그림 제목과 축 레이블 글꼴 크기를 설정하려면 어떻게 해야 합니까? (0) | 2023.04.11 |
---|---|
특정 파일만 해동하려면 어떻게 해야 합니까? (0) | 2023.04.11 |
SQL Server에서 LIMIT를 구현하는 방법 (0) | 2023.04.11 |
Spring Boot 어플리케이션용 JUnit @BeforeClass 비정적 대응 (0) | 2023.04.06 |
[ Typescript ]에서 유형과 인터페이스의 차이점은 무엇입니까? (0) | 2023.04.06 |