Сделайте так, чтобы Enter выделил ячейки в другом порядке в Excel VBA - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть лист, который выглядит следующим образом Excel product card template

Требуется пройти по всем столбцам, используя только клавишу ввода.

Пока, когда выбор доходит до A3: A12, над которым располагается ActiveX Image, после того, как пользователь выбирает изображение, я вызываю ActiveSheet.Cells(3, 2).Select, который выбирает ячейку B3: D3.

Теперь, когда я нажимаю Enter, я ожидаю приземлиться на B4, но он переходит на A13. Я также попытался ActiveSheet.Cells(4, 2).Select и Enter после этого возвращается к A3: A12 с изображением вверху.

Есть какой-то шаблон, который мне не хватает, или это просто превосходство, с которым трудно иметь дело?

Я также пытался Application.OnKey "~", "ChangeCell" в надежде, что смогу вообще изменить поведение Enter, но я получаю

Невозможно запустить макрос «путь / к / моему / файлу»! Изменить макрос может не доступно в этой книге

каждый раз, когда я нажимаю Enter. (Да, я включил Trust access to the VBA project object model.)

Есть ли способ сделать это?

Редактировать: вот соответствующая часть кода. (Я впервые в VBA)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    address = Target.address(RowAbsolute:=False, ColumnAbsolute:=False)
    If address = "A3:A12" Then
        ChangeImage
        ActiveSheet.Cells(4, 2).Select
    End If
End Sub

Private Sub Worksheet_Activate()
    Application.OnKey "~", "ChangeCell"
End Sub

Sub ChangeCell()
    MsgBox ("Ay")
End Sub

1 Ответ

0 голосов
/ 30 апреля 2018

Клавиша Enter , которая будет работать, является самой большой в середине клавиатуры. Напишите это в ThisWorkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.OnKey "~"
End Sub

Private Sub Workbook_Open()
    Application.OnKey "~", "KeepOnMoving"
End Sub

А затем напишите это в модуле:

Public Sub KeepOnMoving()
    ActiveCell.Offset(, 1).Activate
End Sub

Вы можете "сбросить" ActiveCell, перейдя в столбец K (например):

Public Sub KeepOnMoving()        
    ActiveCell.Offset(, 1).Activate        
    If ActiveCell.Column = Range("K1").Column Then
        ActiveCell.Offset(, -1 * Range("K1").Column + 1).Activate
    End If        
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...