【问题标题】:Scroll then lock row滚动然后锁定行
【发布时间】:2017-12-05 16:43:40
【问题描述】:

我有一个在前几行中包含标题数据的工作表,然后是一个带有列标题的表格。表头数据包括用于计算表中值的参数。

我想要的是允许用户滚动工作表,使标题数据不再可见,但当表格标题行成为第一行时冻结它。然后,如果他们需要更改参数,他们可以向上滚动并重新看到前几行。

我认为这很容易做到,但我不记得该怎么做。我能找到的唯一选项是“冻结窗格”选项,但这会冻结所有内容,我只希望它在标题行位于顶部时冻结。

这可能吗?

已编辑 - 为了更清楚地说明,冻结窗格选项会冻结所选行上方的所有内容(除非我错过了它),这不是我想要的。我希望工作表的行为类似于顶部可能有广告横幅的网站,然后是导航栏/徽标/等,然后是内容。当您向下滚动时,广告横幅会移出视图,但当导航栏位于顶部时,它会停止并保持在视图中,同时内容继续滚动。

假设我有前 5 行有单元格来捕获输入值。然后第 6 行是表格标题,第 7-100 行是表格数据。我希望用户能够点击向下滚动按钮 5 次以移过输入值。然后我希望第 6 行冻结在顶部,以便当用户继续滚动时,表格标题可见。相反,当用户向上滚动时,第 6 行将保持在顶部,直到用户到达第 7 行,然后如果他们继续滚动,输入值就会进入视图。

如果您使用“格式为表格”功能并指示所选内容具有标题行,Excel 会执行类似的操作。然后在滚动时,列标题将替换“A”、“B”、“C”等地址标签。这对我来说不会直接起作用,因为表结构有点复杂。

【问题讨论】:

  • here
  • 不确定您为什么添加 vba,答案还建议使用 vba 选项。只需选择行/列(一个或两个),然后选择冻结窗格
  • 感谢 Scott,但据我所知,该线程提供了冻结行的解决方案,但不是动态的。我用更多信息更新了帖子,在示例中,我只希望第 6 行在表格的第一行时冻结。我还是 VBA 的新手,我想我可以写一个检查以查看第 6 行是否是第一行,然后使用另一个线程中的冻结代码,但这似乎效率低下。

标签: excel vba


【解决方案1】:

据我了解,您希望保持可见的行或列不是第一个。这有点异国情调。

如果您想隐藏可配置项以节省视觉空间并始终保留标题:

只需为您的配置和标题冻结尽可能多的行/列。然后隐藏您不希望始终显示的行/列。

您甚至可以有一个简单的按钮,通过单击来隐藏和取消隐藏:

Sub transaction1()
    Rows("10:50").Hidden = Not Rows("10:50").Hidden
End Sub

至于冻结窗格,以防有人不知道您可以冻结任意数量。如果要冻结列 A 和 B 以及行 1 和 2,只需单击 C3,然后使用冻结功能。如果您只想冻结 10 行 - 单击 A11,然后使用冻结。

虽然我通常只是将我的服务空间卸载到其他地方,然后使用 =HYPERLINK() 快速往返于它

无论如何,您所需的结果并不比您可以轻松导航的其他方式更方便。因此,如果我滚动到第 14000 行,如果我想滚动回到开头以查看我的设置,我仍然必须经过 14k 行。拥有一个始终冻结的设置区域以及标题可以更快地导航。如果您的设置区域占用了这么多空间,可以移动它并为其创建更紧凑的导航,或者只是按需隐藏/显示它。

毫无疑问,你可以有更多奇特的方式来达到效果,但这样做是强制性的吗?

【讨论】:

  • 谢谢海伦娜!你的回答给了我一个我没有想到的不同观点。上面 Jeeped 的回答是我(大部分)所设想的,但您提出了一个很好的观点,即必须滚动回顶部才能查看设置。我还有一些按钮,它们对于能够同时查看活动行和按钮很有用,因此使用按钮隐藏设置/按钮区域的解决方案是一个更好的设计。谢谢!!!
  • 冻结导航还有一个更大的好处。如果您冻结了前 10 行并滚动到第 10000 行,单击冻结的 A3 中的超链接将您带到另一张纸,当您返回第 10000 行时,保持您的滚动位置。超链接导航非常好。我有一个完整的中心页面。
【解决方案2】:

在工作表的代码页中使用它(右键单击工作表名称选项卡,查看代码)。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim iVISROWS As Long
    Dim iHDRROWS As Long
    iVISROWS = 5
    iHDRROWS = 3
    Cells(1, 1).Resize(iHDRROWS, 1).EntireRow.Hidden = _
       Target(Target.Rows.Count).Row > iVISROWS
End Sub

(可选)取出iVISROWSiHDRROWS 的声明和赋值,并将以下内容取出到模块代码表的声明区域(顶部)。

Option Explicit

Public Const iVISROWS As Long = 5
Public Const iHDRROWS As Long = 3

使用标题行数 (iHDRROWS) 和触发隐藏标题行 (iVISROWS) 的当前选择的底部,直到获得所需的结果。

【讨论】:

  • 谢谢吉普!这几乎正​​是我想要的。通过冻结标题行并添加您的代码,它实现了所需的结果,唯一需要注意的是活动单元格必须低于 iVISROWS,这意味着向上/向下箭头很好用,但滚动条/按钮不行。好东西,我会继续玩。
【解决方案3】:

我遇到了同样的问题,并且在完成上述所有编码时对技术的了解要少得多。 我的解决方法很简单。 在工作表顶部插入一个新行。 将表格的标题复制到新的第 1 行,然后像往常一样冻结第一行。 当您滚动顶部的虚拟行时,它会停留在您的桌子上方,而其余的则会消失。 如果您向上滚动,您的原始标题仍会保留在原位,以便根据需要进行过滤。

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    相关资源
    最近更新 更多