我正在Outlook中编写一个引用Excel工作簿并对该工作簿进行更改的VBA宏。我想在第1行下方冻结窗格(而不是#34; Split")。
这是我尝试过的代码:
With Excel.ActiveWindow
.SplitColumn = 0
.SplitRow = 3
.FreezePanes = True
End With
...和...
Dim excApp As Object
Set excApp = CreateObject("Excel.Application")
With excApp.ActiveWindow
.SplitColumn = 0
.SplitRow = 3
.FreezePanes = True
End With
两者都在行.SplitColumn = 0
处投掷了运行时错误91。
我感谢任何帮助或指示。谢谢!
答案 0 :(得分:4)
使用冻结窗格时,它实际上与光标位置有关,因此这是实际需要.Select
的少数几个地方之一。
此代码应该按照您的要求执行:
Dim excApp As Excel.Application
Set excApp = GetObject(, "Excel.Application")
excApp.ActiveWorkbook.ActiveSheet.Range("2:2").Select
excApp.ActiveWindow.FreezePanes = True
预先假定Excel已经开放。
- 编辑 -
根据@ChrisB,有一种方法可以做到这一点,没有可怕的.Select
:
With excApp.ActiveWindow
.SplitRow = 3
.FreezePanes = True
End With
答案 1 :(得分:0)
这里是另一个。它是一种功能,您也可以从Excel外部使用,例如通过Access或Outlook:
Public Sub FreezeHeader(Sheet As Excel.Worksheet, _
Optional Rows As Long = 1, _
Optional Columns As Long = 0)
If Sheet Is Nothing Then Exit Sub
Sheet.Activate ' must be the active sheet!
With Sheet.Parent.Windows(1)
If .FreezePanes Then .FreezePanes = False ' always delete the old freeze
.SplitColumn = Columns
.SplitRow = Rows
If Rows > 0 Or Columns > 0 Then .FreezePanes = True
End With
End Sub
现在像这样使用它:
Dim EXL As Excel.Application
Dim Book As Excel.Workbook
Dim Sheet As Excel.Worksheet
Set EXL = New Excel.Application
Set Book = EXL.Workbooks.Open("YourFilename.xlsx")
Set Sheet = Book.Sheets(1)
FreezeHeader Sheet ' Freezes first row (the usual case)
FreezeHeader Sheet, 2 ' Freezes first two rows
FreezeHeader Sheet, 0, 1 ' Freezes first column
FreezeHeader Sheet, 0 ' Unfreezes all