我创建了一个为当前选择添加前缀的宏。你可以看到它非常简单 - 它在选择中循环通过可见细胞。我添加了.SpecialCells(xlCellTypeVisible)
,因为它在使用过滤器时会影响非预期的单元格。
Sub Prefix()
Dim rng As Range
Dim Prefix As String
Prefix = "P"
For Each rng In Selection.SpecialCells(xlCellTypeVisible)
rng = Prefix & rng
Next rng
End Sub
例如,假设我的数据Cells A1:A4
填写如下:
Title
1
2
1
当我执行以下操作时,会出现问题:
Autofilter
,并隐藏A3 问题是,它不是只影响Cell A2
(所选单元格),而是开始将前缀应用于第一行(A1:Z1等),直到我取消宏。如果让它继续运行,它将继续对数千个单元格执行此操作。
当我的选择是多个单元格,或者我使用Selection
而不是Selection.SpecialCells(xlCellTypeVisible)
时,或者当我没有过滤任何内容时将宏应用于一个单元格时,不会发生此问题(隐藏)。
当我只选择了一个单元格时,有没有人有任何想法为什么选择默认为整个电子表格? 或者,任何人都可以建议使用VBA添加这样的前缀的方法吗?
我知道使用excel公式可以缓解这个问题,但这对我来说并不实用,也不会像点击宏一样快。
答案 0 :(得分:0)
您可以使用'Application.intersect'来确保获得所需的结果:
For each rng in Application.Intersect(Selection,ActiveSheet.Cells.SpecialCells(xlCellTypeVisible))
答案 1 :(得分:0)
如果您希望手动选择一系列单元格时动态工作,并且您的意图是将输入框中的国家/地区代码添加到单元格的当前值,则将下面发布的更改事件添加到代码中工作表的一部分,并将例程添加到工作簿中的代码模块。
不确定为什么要更换减号,但如果需要,可以将其添加到此代码中。
工作表代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call AddPrefix(Target)
End Sub
添加模块并将此代码放入其中。
Sub AddPrefix(rangeToPrefix)
Dim cCell As Range
Dim prefix As String
prefix = InputBox("Enter your country code", "Set Country Code", +33)
For Each cCell In rangeToPrefix.SpecialCells(xlCellTypeVisible)
If Not IsEmpty(cCell) Then cCell.Value = prefix & cCell.Value
Next cCell
End Sub