Excel 2010 VBA отправить ключи для имитации нажатия на формулу панели
Google не дал мне то, что я хочу, я подумал, что, возможно, у SO может быть ответ.
Вместо того, чтобы использовать поле ввода или приглашение пользователя, запрашивающее у пользователя информацию, которая будет сохранена в ячейке, я ищу код, имитирующий нажатие на панели формул. В настоящее время я использую метод sendkeys с "F2", чтобы позволить пользователю вводить информацию в выбранную ячейку. Было бы гораздо проще взглянуть на панель формул, а не на одну ячейку в море данных.
Sub CopyTemplate()
'ActiveWorkbook.Save
Worksheets("HR-Cal").Activate
Dim rng As Range
Dim trng As Range
Dim tco As String
'Use the InputBox select row to insert copied cells
Set rng = Application.InputBox("select row to paste into", "Insert template location", Default:=ActiveCell.Address, Type:=8)
If rep = vbCancel Then
End If
startrow = rng.Row
' MsgBox "row =" & startrow
Range("AG2") = startrow
Application.ScreenUpdating = False
'copy template block
Range("C6").End(xlDown).Select
Range("AG1") = ActiveCell.Row
tco = "A5:AN" & Range("AG1")
Range(tco).Select
Selection.Copy
Range("A" & Range("AG2")).Activate
Selection.Insert Shift:=xlDown
Range("c100000").End(xlUp).Select
Selection.End(xlUp).Select
'select first value
Range("AG1:AG2").ClearContents
Application.ScreenUpdating = True
SendKeys "{F2}"
SendKeys "{BS}"
End Sub
когда запускаются коды, это то, что видит пользователь (кол. 2 кол. 2621)
1 ответ
Я не верю, что есть единственное нажатие клавиши, чтобы "активировать" панель формул. Вероятно, есть способ сделать несколько событий нажатия клавиш, как <alt><tab><tab>...~nine years later and a couple of other keys~...<tab><tab>
Более быстрый и прямой способ - отключить параметр "EditDirectlyInCell":
Application.EditDirectlyInCell = False
Это приведет курсор к панели формул, когда вы отправляете F2
Вы могли бы просто выключить эту вещь Workbook_Open()
в коде рабочей книги:
Private Sub Workbook_Open()
Application.EditDirectlyInCell = False
End Sub
Возможно на Workbook_BeforeClose()
Вы можете снова включить эту настройку, чтобы не изменять их значения по умолчанию:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.EditDirectlyInCell = True
End Sub
Возможно , это поможет, я установил для Application.EditDirectlyInCell значение false, прежде чем вводить редактирование ячейки, затем вызвать DoEvents, прежде чем вернуть EditDirectlyInCell значение true
Sub EditRange(ByVal Target As Range) 'so any change in target would not affect
'the caller's variable
Set Target = Target.Areas(1).Resize(1, 1) 'to make sure the target is single cell
Target.Worksheet.Activate 'to make sure the worksheet is active
Target.Activate 'activate the designated cell
Application.EditDirectlyInCell = False 'turn cell editing to false, any attempt _
to edit cell will be done in formula bar
SendKeys "{F2}" 'send F2 to start editing the cell
DoEvents 'make sure every command is fully executed
Application.EditDirectlyInCell = True 'return in cell editing to default value
End Sub