VBA脚本在滚动过程中冻结excel中的两个不同行(窗格)

问题描述 投票:1回答:1

我有一个电子表格(Example Spreadsheet,当电子表格向下滚动时,我想向下滚动并冻结两个单独的行。我希望它在第1行被“向上滚动”时冻结2-4行,并继续滚动其余各行(在已冻结的2〜4行之下)直到到达第62行,然后冻结第62行-64(已冻结的第2-4行除外),并一直滚动到电子表格的末尾。

例如:我有一个包含两个“区域”的工作表。顶部区域显示每月货币,而下部区域显示年度货币。它在第1行上没有任何内容,而months标头(十二月19日,1月20日等)在第4行上。在这里的示例电子表格中,第1行向上滚动(隐藏滚动),第2-4行冻结。然后,我向下滚动直到到达第62行,我的年度货币标题开始,然后冻结第62-64行,并继续滚动其余行。

使用某种编码是否有可能?

excel vba freeze pane
1个回答
0
投票

选项1:妥协

这不是一件容易的事,因此您可能需要考虑将两个部分分成2个不同的工作表,并在每个工作表中使用Freeze Panes方法,就像这样:

enter image description here

对于第1行,如果困扰您,您可以在应用冻结之前简单地滚动过去。

您甚至可以在页面的底部/顶部添加一个按钮,单击该按钮可使用户转到另一张表,以获得更好的用户体验。

选项2:全力以赴

首先,有an article on Chip Pearson's blog显示了如何使用类和Windows API通过VBA检测窗口滚动。这有点先进,但是如果您想获得想要的结果,这是必不可少的。

第二,您需要使用ActiveWindow.FreezePanes属性来切换窗格的冻结(对或错)。唯一的问题是,冻结窗格的方式将受到所选单元格的影响,因此您的代码将必须选择适当的单元格(如图像中所希望的那样,您不想滚动的区域下方的最左边的单元格以上)。而且还必须确保上面的数据已滚动过去。

因此,您可能有一个条件基于C. Pearson的方法提供的左上角单元格的行,并且如果该行大于某个阈值,它将导致1)解冻窗格; 2)滚动到右边的行和列; 3)选择合适的单元格; 4)像这样重新应用冻结:

ActiveWindow.FreezePanes = False

ActiveWindow.ScrollRow = 62
ActiveWindow.ScrollColumn = 1

ActiveSheet.Range("A65").Select

ActiveWindow.FreezePanes = True

并且类似地,当用户向上滚动时。

© www.soinside.com 2019 - 2024. All rights reserved.