进入单元格编辑模式并使用VBA选择所有单元格文本

3
我写了一个宏来检查特定单元格的更改。如果单元格中的新值不符合某些条件,则它会进入编辑模式,并使用键盘快捷键选择该单元格中的所有文本。
Application.SendKeys ("{HOME}+{END}")

这段代码总是进入编辑模式,但通常无法选择文本。我正在寻找更可靠的方法。有什么想法吗?
以下是整个宏:
Private Sub Worksheet_Change(ByVal Target As Range)

' -------------------------------
' Only run the macro if a single cell is selected
    If Target.Cells.CountLarge > 1 Then Exit Sub

' -------------------------------
' Declare variables
    Dim cell As Range
    Dim AccountToFind As String

' -------------------------------
' Assign values to shared variables
    AccountToFind = Target.Value

' -------------------------------
' Validate change in HEADER, column D
    If Not Intersect(Target, Target.Worksheet.Range("D:D")) Is Nothing And Target.Value <> "" Then

        For Each cell In Sheets("_coding references").Range("AccountsPayable[NAME]")
            If cell.Value = AccountToFind Then Exit Sub  ' passed validation
        Next cell

        Target.Select

        MsgBox ("'" & AccountToFind & "'" & vbNewLine & vbNewLine & "This is not a listed A/P account!")

' --------------------------------------------------------------
' --------------------------------------------------------------
' HERE'S THE PROBLEMATIC CODE
' --------------------------------------------------------------
            Application.SendKeys ("{F2}{HOME}+{END}")
' --------------------------------------------------------------
' --------------------------------------------------------------
' --------------------------------------------------------------
    End If
End Sub
1个回答

3

不幸的是,没有办法捕获此事件。您唯一的解决方法是“发送键”,由于所有键都必须同时按下,因此这是我所知道的最好的解决方法:使用睡眠或等待函数。

Application.SendKeys ("{F2}{HOME}")
Application.Wait Now + TimeValue("00:00:01")
Application.SendKeys ("+{END}")

说明
发送按键取决于处理器速度,因此它总是会有变量。即使代码编写良好,您也必须考虑一些时间来让它“虚拟”同时“按下”所有按键。


1
它有点能用,但如果未设置数字锁定,则 F2 无法工作 :) 另外,F2 会搞乱数字锁定... 真是太糟糕了.... https://www.mrexcel.com/board/threads/vba-sendkeys-f2-and-numlock-issue.922779/ - Major

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接