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

时间:2016-08-17 20:12:22

标签: excel-vba vba excel

我写了一个宏来检查某些单元格的变化。如果单元格中的新值不符合某些条件,它将以编辑模式进入单元格,并使用键盘快捷键选择该单元格中的所有文本:

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 个答案:

答案 0 :(得分:2)

可悲的是,没有办法抓住这个事件,你唯一的出路就是&#34;发送密钥&#34;并且由于所有这些都必须同时按下,这是最好的解决方法 - 据我所知 - 您可以做,使用sleep or wait功能

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

<强> 解释
发送键取决于处理器的速度,它总是变化的,即使代码编写得很好,你也要考虑一下,让它按下&#34; - 实际上 - 所有的键同时