excel - 通过单击其中的单元格来显示列
问题描述
我有一个子(在工作表上),当我单击单元格时会放大列。问题是当我离开它时我无法返回列的原始大小。
我尝试使用一些默认参数,但这以错误结束。
Then rngDEwidh.Columns.ColumnWidth = rngDEwidh.Columns.ColumnWidth
Then rngDEwidh.Columns.ColumnWidth = xlNone
Then rngDEwidh.Columns.ColumnWidth = ActiveCell.width
这是一个子:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static rngDEwidh As Range
If Not rngDEwidh Is Nothing Then rngDEwidh.Columns.ColumnWidth = xlNone
Set rngDEwidh = Target
rngDEwidh.Columns.ColumnWidth = 25
End Sub
使用 xlNone 时出错,如果我使用任何值(例如 10)就可以了。但我需要列的原始大小。
解决方案
这是一个简单的例子,我牺牲了保持活动和非活动列宽度的 TOP 两行:
您显然可以选择任何行,甚至可以使用命名范围以防添加/删除行。但这是我使用的代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rng As Range
For Each cl In Range("A1:E1")
Set rng = Intersect(cl.EntireColumn, Target.Columns)
If Not rng Is Nothing Then
cl.ColumnWidth = cl(1)
Else
cl.ColumnWidth = cl(2)
End If
Next cl
End Sub
编辑
另一个有趣的事情是Dictionary
在激活特定工作表时创建一个。用指定范围内每列的列宽填充该字典。其余的是我上面显示的代码的一个小改编。
Public dict As New Scripting.Dictionary
Dim rng As Range, cl As Range
Option Explicit
Private Sub Worksheet_Activate()
For Each cl In Range("A1:E1")
dict.Add cl.Column, cl.ColumnWidth
Next cl
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For Each cl In Range("A1:E1")
Set rng = Intersect(cl.EntireColumn, Target.Columns)
If Not rng Is Nothing Then
cl.EntireColumn.AutoFit
Else
cl.ColumnWidth = dict(cl.Column)
End If
Next cl
End Sub
推荐阅读
- android - 为什么 Android BroadcastReceiver 不工作?
- flutter - Flutter:如何通过从值中搜索来从列表中获取索引?
- python - 无法加载检查点的数据
- elasticsearch - 可以将弹性中的字段映射限制设置为 50k 吗?
- laravel - Laravel whereColumn 在具有多个单词的列上
- android - MVVM 中的“模型”在哪里?
- wordpress - 我的 wordpress 网站上出现 500 内部服务器错误
- c - Clang 在 Visual Studio 代码上设置编译 C MacOS
- python - 如何删除概念上的重复项?
- python - cx_oracle:连接对象应该是单例吗?