BeforeDoubleClick код размещения данных в зависимости от того, где в данный момент существует курсор - PullRequest
0 голосов
/ 03 мая 2018

У меня может быть или не быть легкого здесь ... По какой-то причине я не могу должным образом придумать решение.

Таблица имеет номера от 1 до 14 в столбце А. 14 заканчивается строкой 15, поскольку в ячейке A1 есть заголовок. Я пытаюсь сделать двойной щелчок на одном из этих чисел и перенести его в определенную ячейку на том же листе (с именем «Лист1»). Мне удалось собрать код, чтобы он работал для передачи выбранного номера в определенную ячейку. Код ниже работает хорошо. Однако я не хочу добавлять несколько областей для двойного щелчка по разным ячейкам. Например: ячейка назначения для выбранных данных - E6, H6 и G6. Я хотел бы поместить курсор, начиная с E6, дважды щелкнуть по номеру в диапазоне от A2 до A15, и иметь тот номер, который я выбираю между A2 и A15, чтобы он отображался в E6, поскольку именно там находился курсор, когда я дважды щелкал ячейку в A2 до A15. Затем я переместил бы курсор, щелкнув H6, а затем вернулся к тому же выбору между A2 и A15, поместив любое число, которое я выбрал, в этот диапазон в H6, поскольку именно там находится курсор в данный момент.

Надеюсь, это имеет смысл и даже возможно.

пример скриншота

example screenshot

Рабочий код, который позволяет двойному щелчку поместить данные в определенную ячейку

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("A2:A15")) Is Nothing Then
    Cancel = True
    Target.Copy Destination:=Cells(6, "E")
End If
End Sub

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Вот крошечный инструмент, который вы можете адаптировать к вашим потребностям. Если дважды щелкнуть пустую ячейку, она станет FinalDestination . Если затем дважды щелкнуть другую пустую ячейку, ее содержимое будет скопировано в FinalDestination :

В области кода листа:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    Application.EnableEvents = False
        If Target.Value = "" Then
            Set FinalDestination = Target
        Else
            Target.Copy FinalDestination
        End If
    Application.EnableEvents = True
End Sub

В стандартном модуле:

Public FinalDestination As Range

Примечание:

В этом простом демонстрационном коде нет ограничений на источник / назначение.

0 голосов
/ 03 мая 2018

Я добавил решение, которое попробовал бы, с комментариями в коде. Причина для двух переменных листа заключается в том, что первый щелчок в двойном щелчке регистрируется как событие SelectionChange. Таким образом, чтобы получить правильное местоположение ячейки, вам нужно выбрать его из двух вариантов вместо одного.

Public selectedCell As String 'Sheet Variable
Public lastCell As String

' This updates the Sheet variable with the most recent selection
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    selectedCell = lastCell
    lastCell = Target.Address
End Sub

' Added a check for having a previously selected cell
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("A2:A15")) Is Nothing Then
        If selectedCell = vbNullString Then
            Cancel = True
            MsgBox "Please select a destination cell for the data."
            selectedCell = vbNullString
            lastCell = vbNullString 'Prevents overwriting same cell by accident
        Else
            Cancel = True
            Target.Copy Destination:=Range(selectedCell)
            selectedCell = vbNullString
            lastCell = vbNullString 'Prevents overwriting same cell by accident
        End If
    End If
End Sub
...