2016-08-17 43 views
1

我寫了一個宏,檢查某些單元格的更改。如果在單元格中的新值不符合一定的標準,它進入編輯模式的單元格,選擇在該單元格使用鍵盤快捷鍵的所有文字:轉到單元格編輯模式,並選擇所有單元格文本與VBA

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

可悲的是,有沒有辦法趕上這個活動,你只有走的辦法是「發送鍵」既然所有的人都在同一時間被壓,這是我的-to知識的最好的解決方法,你可以做,既可以使用sleep or wait功能

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

說明
發送密鑰依賴於處理器的速度,它總是會變化的,即使代碼編寫得很好,您也必須考慮讓它「同時」按下 - 實際上,所有的密鑰都在同一時間