Excel 转到单元格编辑模式并使用VBA选择所有单元格文本
我编写了一个宏来检查某些单元格的更改。如果单元格中的新值不符合某些条件,它将以编辑模式进入该单元格,并使用键盘快捷键选择该单元格中的所有文本:Excel 转到单元格编辑模式并使用VBA选择所有单元格文本,excel,vba,Excel,Vba,我编写了一个宏来检查某些单元格的更改。如果单元格中的新值不符合某些条件,它将以编辑模式进入该单元格,并使用键盘快捷键选择该单元格中的所有文本: Application.SendKeys ("{HOME}+{END}") 这将始终进入编辑模式,但通常无法选择文本。我在找更可靠的东西。有什么想法吗 以下是整个宏: Private Sub Worksheet_Change(ByVal Target As Range) ' ------------------------------- ' Only
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
Private子工作表\u更改(ByVal目标作为范围)
' -------------------------------
'仅在选择单个单元格时运行宏
如果Target.Cells.CountLarge>1,则退出Sub
' -------------------------------
'声明变量
暗淡单元格作为范围
Dim AccountToFind As字符串
' -------------------------------
'为共享变量赋值
AccountToFind=Target.Value
' -------------------------------
'验证标题D列中的更改
如果不相交(Target,Target.Worksheet.Range(“D:D”))为Nothing且Target.Value为“”,则
对于工作表中的每个单元格(“编码引用”).Range(“AccountsPayable[名称]”)
如果cell.Value=AccountToFind,则退出子项“已通过验证”
下一个细胞
目标。选择
MsgBox(“'”&AccountToFind&“'”&vbNewLine&vbNewLine&“这不是列出的应付账款帐户!”)
' --------------------------------------------------------------
' --------------------------------------------------------------
这是有问题的代码
' --------------------------------------------------------------
Application.SendKeys(“{F2}{HOME}+{END}”)
' --------------------------------------------------------------
' --------------------------------------------------------------
' --------------------------------------------------------------
如果结束
端接头
遗憾的是,没有办法捕捉到这一事件。你唯一的方法就是“发送键”,因为所有的键都必须同时按下,据我所知,这是你能做的最好的解决办法:要么使用函数
Application.SendKeys ("{F2}{HOME}")
Application.Wait Now + TimeValue("00:00:01")
Application.SendKeys ("+{END}")
解释
发送密钥取决于处理器的速度,因此它总是可变的。即使代码写得很好,你必须考虑一些时间让它“按下”-实际上-所有的键在同一时间。< /P>它的工作,但是如果NumLock没有设置,那么F2不工作:)也F2弄乱NUMLCK…太可怕了。。。。