Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 转到单元格编辑模式并使用VBA选择所有单元格文本_Excel_Vba - Fatal编程技术网

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…太可怕了。。。。