我希望能够通过VBA编程方式冻结Excel工作表的顶部行。最终目标是产生与Excel 2007中 查看 > 冻结窗格 > 冻结顶部行
命令相同的效果,使工作表的顶部行被冻结,并且用户可以在滚动数据时看到工作表的顶部行。
Rows("2:2").Select
ActiveWindow.FreezePanes = True
选择不同的范围会产生不同的效果,就像您手动操作一样。"冻结顶部行"仅是Excel 2007(及以上版本)中的快捷方式,与早期版本相比没有额外的功能。
Tomalak已经给了您一个正确的答案,但我想补充说,大多数情况下,当您想知道执行特定操作所需的VBA代码时,记录宏是一个好主意。
在这种情况下,在Ribbon的“开发人员”选项卡上单击录制宏,冻结顶部行,然后停止录制。 Excel将为您记录以下宏,该宏也会完成工作:
With ActiveWindow
.SplitColumn = 0
.SplitRow = 1
End With
ActiveWindow.FreezePanes = True
With
块中。 - Dirk VollmarDim 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
我遇到了同样的问题... 由于某种原因,冻结窗格命令只会使十字线出现在屏幕中心。原来是我关闭了ScreenUpdating! 用以下代码解决:
Application.ScreenUpdating = True
Cells(2, 1).Select
ActiveWindow.FreezePanes = True
现在它很好用。
在其他Office应用程序的VBA项目中使用Excel.Application对象需要添加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
核心流程实际上只是先前提交答案的重复,但我认为演示如何处理ActiveWindow在不在Excel自己的VBA中非常重要。虽然这里的代码是VBA,但它应该可以直接转录到其他语言和平台。
Set xlApp = New Excel.Application
,或者甚至是 Dim xlApp As New Excel.Application
。 - Zev SpitzRows("2:2").Select
ActiveWindow.FreezePanes = True