我目前正在尝试编写一个基于工作表更改的宏,其中表列中的字母会自动转换为大写。因此,例如,如果我在单元格中输入“abcde-12345-678”,它会自动更正为“ABCDE-12345-678”。经过一番挖掘后,我发现一些代码对某些人有用,但我在调整它以满足我的需求时遇到了困难。
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("E:E")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Target = UCase(Target)
Application.EnableEvents = True
End Sub
有两件事我想解决。首先,该代码目前不适用于我。根据作者的说法,我将它放在正确的位置(位于 Sheet1 对象中)。对于为什么这不起作用有什么想法吗?
第二个是我想修改代码以引用表列而不是范围。例如,我尝试将上述代码的第二行更改为以下内容(我的表的名称是 ReviewTracker,我感兴趣的列是 Product Number):
If Intersect(Target, Range(ReviewTracker[[@Headers],[Product Number]])) Is Nothing Then Exit Sub
这返回了一个编译错误“预期:列表分隔符或)”。所以它显然有问题,但希望它可以帮助说明我正在努力实现的目标。
预先感谢您就该问题提供的任何帮助。
-肖恩
最佳答案
首先。您可能会因多种原因而禁用事件。让我们确保您可以执行以下操作的事件:
转到 VBA 编辑器 >> 打开立即窗口 >> 在那里写入:Application.EnableEvents = true
>> 按 Enter
第二。要检查交集是否与 ListObject 表
中的适当列匹配,您需要如下所示:
If Intersect(Target, Range("ReviewTracker[Product Number]")) is Nothing Then
假设 ReviewTracker
是表名称,Product Number
是表列。您不需要#Headers
,因为它仅引用标题行。
关于excel - 自动文本大写 Excel VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19497042/