Google дал мне не совсем то, что я хочу, я подумал, может быть, у ТАК есть ответ.

Вместо использования поля ввода или приглашения пользователя, которое запрашивает у пользователя информацию, которая будет храниться в ячейке, я ищу код для имитации щелчка в строке формул. В настоящее время я использую метод 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) enter  описание изображения здесь

0
Alberto Brown 20 Окт 2015 в 22:03

2 ответа

Лучший ответ

Я не верю, что есть одно нажатие клавиши, чтобы «активировать» панель формул. Вероятно, есть способ сделать с несколькими событиями нажатия клавиш, такими как <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
3
JNevill 20 Окт 2015 в 19:48

Возможно, это поможет, я установил для 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
1
Sindula 29 Июн 2020 в 06:58