首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在excel中冻结某些单元格

在excel中冻结某些单元格
EN

Stack Overflow用户
提问于 2017-09-25 15:14:02
回答 2查看 595关注 0票数 0

我想知道我是否可以冻结某个细胞,比如来自L1 : P20的细胞?我到处寻找,似乎找不到任何解决方案。这里有人能帮帮我吗?

Example

例如,当我点击命令按钮时。当我向下滚动时,我如何能够将整个东西冻结在右边。我希望当我向下滚动时,表格也会跟随我向下滚动。

EN

回答 2

Stack Overflow用户

发布于 2017-09-25 16:41:51

尝试以下操作,将冻结到您指定的列,并隐藏/取消隐藏周围的列以及>20的行:

代码语言:javascript
复制
Dim ws As WorkSheet
Set ws = ThisWorkBook.WorkSheets("MySheetName") ' <-- Change to your sheet name     
ws.Range("Q2").Select
ActiveWindow.FreezePanes = True

然后,您可以隐藏右侧和下方的所有行,例如第20行:

代码语言:javascript
复制
Columns("Q:Q").Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.EntireColumn.Hidden = True
Rows("21:21").Select
Range("C21").Activate
Range(Selection, Selection.End(xlDown)).Select
Selection.EntireRow.Hidden = True

最后,但同样重要的是,您可以使用UserForm将此答案与我的第二个答案组合在一起。

票数 0
EN

Stack Overflow用户

发布于 2017-09-25 23:10:44

替代

作为另一种选择,您可以创建一个userform并利用Worksheet_SelectionChange方法-无论何时选择一行,您都会在用户表单的单独列表框中看到整个范围。如果您位于第1行到第20行之间,活动行将被标记为剩余:

步骤1

将此代码写入WorkSheet模块(MySheetName)

代码语言:javascript
复制
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

  If Not Application.Intersect(Target, Range("A1:P20")) Is Nothing Then
  ' Mark active row in list box
    If Not UserForm1.ListBox1 Is Nothing Then
      If Target.Row < UserForm1.ListBox1.ListCount Then
        UserForm1.ListBox1.ListIndex = Target.Row
      End If
    End If
    ' Show user form
    UserForm1.Show vbModeless

  End If

End Sub

步骤2

使用以下所需控件创建一个UserForm : ListBox1和CommandButton1。然后使用F7将此代码写入到新创建的UserForm1模块

代码语言:javascript
复制
Option Explicit
Private Sub CommandButton1_Click()
   Me.Hide
End Sub


Private Sub UserForm_Initialize()
  Dim ws As Worksheet
  Set ws = ThisWorkbook.Worksheets("MySheetName")

  Dim s     As String             ' range address string
  Dim rng   As Range              ' (target) range
' set range to L1:P20  
  s = "L1:P20"
  Set rng = ws.Range(s)

' define row source of list box via set range
  Me.ListBox1.RowSource = s

End Sub

Private Sub UserForm_Layout()
  Me.Caption = "My frozen Range L1:P20"

' Userform position in the top right corner
  Me.StartUpPosition = 0
  Me.Top = 0          ' or: Me.Top = Application.Top + ...
  Me.Left = Application.Left + Application.Width - Me.Width

With Me.ListBox1
  .ColumnCount = 5       ' five Columns L:P
  .ColumnHeads = True
  .ColumnWidths = .Width / .ColumnCount
End With
End Sub

备注:这只是一个简单的示例,如果您了解更多关于UserForms的知识,您可以对其进行改进。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46399496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档