Excel VBA – 双击列中所有选中的单元格大写

我有一个非常简单的VBA脚本,大写所选单元格:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) ActiveCell.Value = UCase(ActiveCell.Value) End Sub 

它按预期工作,但有时我想大写选定列中的所有单元格,但只有双击列本身。 看来,我不能接收事件与Worksheet_BeforeDoubleClick时单击列字段..

有没有一些解决方法呢?

就像我提到的,为什么不是一个快捷键? 您可以为您的macros指定一个快捷键,如下所示

在这里输入图像描述

现在,您只需select该列并按快捷键即可。

而且,不是循环遍历列中的每个单元格,而是一个基于Peter Albert的ONE LINER HACK的代码。

把它放在一个模块中。

 Sub ChangeToUpper() Dim rng As Range '~~> Check if what the user selected is a valid range If TypeName(Selection) <> "Range" Then MsgBox "Select a range first." Exit Sub End If Set rng = Selection rng = WorksheetFunction.Transpose(Split(UCase(Join( _ WorksheetFunction.Transpose(rng), vbBack)), vbBack)) End Sub 

截图:

在这里输入图像说明

如果DoubleClick不是强制性的,您可以使用BeforeRightClick。 如果你想保持原来的右键点击上下文菜单,你可以导入模块并检查Ctrl / Alt / Shift

 Option Explicit Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim condition As Boolean condition = True ' check Ctrl/Alt/Shift using http://www.cpearson.com/excel/KeyTest.aspx If condition Then MsgBox "Right Click at " & Target.Address Cancel = True End If End Sub 

另一个选项是将macros选项中的Ctrl+[]分配给macros而不是事件处理,并调用macros来处理Selection对象。