Excel VBA - 双击时将列中的所有选定单元格大写

时间:2014-02-14 02:51:27

标签: excel vba excel-vba window

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

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

它按预期工作,但有时我想大写所选列中的所有单元格,但只有当我双击列本身时。单击列字段时似乎无法接收Worksheet_BeforeDoubleClick的事件。

是否有一些解决方法?

2 个答案:

答案 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)

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

enter image description here

现在,您只需选择列并按快捷键。

此外,这里的代码不是循环遍历列中的每个单元格,而是基于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

<强>截图:

enter image description here