我有一个非常简单的VBA脚本,它将选定的单元格大写:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
ActiveCell.Value = UCase(ActiveCell.Value)
End Sub
它按预期工作,但有时我想大写所选列中的所有单元格,但只有当我双击列本身时。单击列字段时似乎无法接收Worksheet_BeforeDoubleClick
的事件。
是否有一些解决方法?
答案 0 :(得分:1)
如果DoubleClick不是必需的,则可以使用BeforeRightClick。如果您想保留原始右键单击上下文菜单,可以导入module并检查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
另一种选择是将宏选项中的Ctrl+[]
分配给宏而不是事件处理,并调用宏来处理Selection对象。
答案 1 :(得分:1)
就像我提到的,为什么不是快捷键?您可以为宏指定快捷键,如下所示
现在,您只需选择列并按快捷键。
此外,这里的代码不是循环遍历列中的每个单元格,而是基于ONE LINER HACK Peter Albert 的代码。
将其放入模块中。
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
<强>截图:强>