2012-12-06 92 views
2

通常解冻窗格代码Excel VBA:解冻工作簿对象工作表的窗格?

ActiveWindow.FreezePanes = False 

但说我有一个类型的工作簿的原始资料和String类型的SHEETNAME。例如

sourceBook.sheets(sheetName) 

如何在不调用ActiveWindow之类的工作簿表单上解冻窗格?

回答

1

这将从每片每个窗口为给定的工作簿中删除FreezePanes,这也确保了同一个工作表是活跃在运行代码之前已经激活:

Dim w As Window 
Dim activews As Worksheet, ws As Worksheet 
For Each w In sourceBook.Windows 
    w.Activate 
    If activews Is Nothing Then 
     Set activews = w.ActiveSheet 
    End If 
    For Each wsv In w.SheetViews 
     wsv.Sheet.Activate 
     w.FreezePanes = False 
    Next 
    activews.Activate 
    set activews = nothing 
Next 

瑞克指出,你不能解冻没有激活窗口的窗格。但是,您不必拨打ActiveWindow

+0

好吧,我执行的是有冻结的窗格在纸张上排序的过程,如果是它抛出一个错误冻结 - 所以我必须解冻它。有没有办法解冻它并返回到之前活动的窗口?编辑:没关系,你的代码这样做。一会儿。 – KaliMa

+0

实际上,它不...我把它遗漏了,因为你不想使用ActiveWindow。如果你想要这样做,只需将activeWindow首先存储为'dim ActiveW as window:set ActiveW = ActiveWindow',然后在最后'activeW.Activate' –

+0

不幸的是我仍然有相同的问题 编辑:忍者' d再次 – KaliMa

1

不幸的是,冻结窗格是一个窗口对象的方法,您要应用它的表单需要是活动表格。 这意味着您必须选择您想要冻结活动窗口上的窗格的单元格。

0

的代码添加到工作表的激活事件(例如,这是工作表Sheet1下的代码)

Option Explicit 
Private Sub Worksheet_Activate() 
    ActiveWindow.FreezePanes = False 
End Sub