我写了一个宏来检查某些单元格的变化。如果单元格中的新值不符合某些条件,它将以编辑模式进入单元格,并使用键盘快捷键选择该单元格中的所有文本:
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
答案 0 :(得分:2)
可悲的是,没有办法抓住这个事件,你唯一的出路就是&#34;发送密钥&#34;并且由于所有这些都必须同时按下,这是最好的解决方法 - 据我所知 - 您可以做,使用sleep or wait功能
Application.SendKeys ("{F2}{HOME}")
Application.Wait Now + TimeValue("00:00:01")
Application.SendKeys ("+{END}")
<强> 解释 强>
发送键取决于处理器的速度,它总是变化的,即使代码编写得很好,你也要考虑一下,让它按下&#34; - 实际上 - 所有的键同时