【问题标题】:From VBA in Outlook, how do I freeze panes in Excel?从 Outlook 中的 VBA,如何冻结 Excel 中的窗格?
【发布时间】:2016-11-16 01:53:43
【问题描述】:

我正在 Outlook 中编写一个 VBA 宏,它引用一个 Excel 工作簿并对该工作簿进行更改。我想冻结第 1 行下方的窗格(不是“拆分”)。

这是我尝试过的代码:

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。

感谢任何帮助或指点。谢谢!

【问题讨论】:

    标签: excel vba outlook


    【解决方案1】:

    对于冻结窗格,它实际上是相对于光标位置的,因此这是实际上需要.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
    

    【讨论】:

    • 我实际上需要 GetObject 而不是 CreateObject。您的解决方案有效!
    • 您实际上不需要使用Select。查看excel vba freeze pane without select。 Dim excApp As Excel.Application Set excApp = GetObject(, "Excel.Application") With excApp.ActiveWindow .SplitRow = 3 .FreezePanes = True End With
    • 太好了。我今天学到了一些东西;谢谢。我已将您的反馈纳入答案。
    【解决方案2】:

    这是另一个。它是一个您也可以在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      相关资源
      最近更新 更多