我正在尋找以編程方式從VBA凍結Excel工作表的第一行。最終目標是產生與Excel 2007中的View > Freeze Panes > Freeze Top Row
命令相同的效果,以便凍結工作表的第一行,並且即使在滾動數據時用戶也可以看到工作表的第一行。如何以編程方式凍結Excel 2007 VBA中Excel工作表的首行?
回答
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。既然我認爲這是愚蠢的行爲,我想要一個宏來糾正它,但正如我所說,錄製的宏只是模仿了同樣愚蠢的行爲。
我使用Office 2011的Mac OS X Lion的
更新(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
對於像我這樣的其他新手:我可以通過設置範圍(「A9」)而不改變其他任何東西來凍結前8行(我的報告「儀表板」所在的位置)。 – Sean 2013-10-24 23:30:54
只要按同樣的問題.. 。 出於某種原因,freezepanes命令只是導致十字線出現在屏幕的中心。它變成了我關掉ScreenUpdating的功能! 用以下代碼解決:
Application.ScreenUpdating = True
Cells(2, 1).Select
ActiveWindow.FreezePanes = True
現在它工作正常。
Rows("2:2").Select
ActiveWindow.FreezePanes = True
這是凍結第一行的最簡單方法。 FreezePanes
的規則是凍結您選擇的單元格中的左上角。例如,如果突出顯示C10,它將在列B和C之間的第9行和第10行之間凍結。因此,當突出顯示第2行時,它實際上會凍結在第1行和第2行之間,即第一行。
而且,.SplitColumn
或.SplitRow
會在您解凍窗口後拆分窗口,這不是我喜歡的方式。
要將此問題擴展到Excel 自己的VBA之外的使用領域,ActiveWindow property必須作爲Excel.Application object的子代來處理。
從Access中創建一個Excel工作簿例子:
在其他Office應用程序的VBA項目使用Excel.Application object會要求你添加的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'。 – 2016-10-10 15:28:00
- 1. 如何在Excel 2016中以多種方式凍結工作表?
- 2. 如何凍結ComboBox Excel VBA
- 3. 在vba運行時凍結excel編輯
- 4. Access 2007 vba在Excel 2007工作表中查找最後一行
- 5. VBA Office 2007創建2003 Excel工作表
- 6. 以編程方式更改Excel工作表的行高
- 7. 以編程方式在Excel 2007中以編程方式添加條件格式
- 8. 的Excel VBA 2007以只讀模式保存工作簿
- 9. 編寫VBA在Excel 2007在Excel 2003
- 10. 以編程方式將Xml數據注入到Excel 2007工作簿中
- 11. 以編程方式創建Excel 2007表格
- 12. 以excel文件編程方式提取excel vba宏
- 13. 以編程方式重命名沒有API的Excel工作表
- 14. 以編程方式更改Excel文件的工作表名稱
- 15. 如何以編程方式在Excel-Vba中對「撤消」功能進行編碼?
- 16. Excel VBA:解凍工作簿對象工作表的窗格?
- 17. VBA宏中的條件格式不工作在Excel 2007中
- 18. 如何使用Excel VBA 2007
- 19. Excel VBA中從Excel工作表
- 20. 如何以編程方式檢索Excel工作表中的頁數?
- 21. 如何以編程方式在C#中的Excel工作表上創建按鈕?
- 22. Excel VBA - 以編程方式更改圖表的來源?
- 23. 以編程方式刪除excel工作表
- 24. Excel VBA:如何以可編程方式打開對齊網格
- 25. 如何以編程方式將XML插入到Excel工作表中?
- 26. 如何以編程方式將列標題添加到Excel工作表中?
- 27. 使用VBA替換Excel 2007中的現有工作表
- 28. Excel - 以編程方式削減行
- 29. Excel的VBA:工作表
- 30. 以編程方式註釋Excel圖表
似乎像ScreenUpdating必須在此工作,但否則很好。謝謝! – 2010-07-12 23:25:20
我不清楚如何通過選擇頂行來凍結最上面的一行。要凍結最上一行,選擇應該是'行(2)'或'行(「2:2」)'。選擇「行」(「1:1」)會導致工作表的四象限分割。 – Jeeped 2015-07-29 15:10:26
@Jeeped m) - 當然!好的發現,謝謝! – Tomalak 2015-07-29 15:12:07