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
Другие вопросы по тегам