Скопируйте и вставьте как значение, если щелкнуть любую ячейку в диапазоне ячеек - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть набор кодов VBA, которые копируют ячейку "AC14" на листе 2 и вставляют в качестве значения ячейку "Q4" на листе 6.У меня есть другой набор кода для применения фильтра в Sheet6, когда значение ячейки "Q4" в Sheet6 изменилось, что меня радует.Коды, хотя и не идеально, это работает до некоторой степени.Ниже приведены мои коды для части копирования и вставки.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Range("AC14"), Target) Is Nothing Then
Range("AC14").Select
Selection.Copy
Sheet6.Activate
Sheet6.Range("Q4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
End If

End Sub

Я хотел бы улучшить следующее:

1) Изменить диапазон(«AC14») для динамической ячейки в динамическом диапазоне в столбце «AC», начиная со строки 11 до номера строки, который время от времени меняется.Так что, когда я (или пользователь) нажимаю на любую ячейку в этом диапазоне, код будет работать правильно.

Примечания. Sheet2 - это рабочая таблица, в которой регистрируются изменения, внесенные в проект, над которым я работаю.Каждая строка представляет одно изменение моего проекта, и с течением времени количество изменений (строк) может достигать 1500. Строки с 1 по 10 из Sheet2 выделяются для меток столбцов

2) Когда мой курсорв ячейке «AC14» в Sheet2, когда я нажимаю на нее снова, я не перехожу на Sheet6.Я понимаю это, поскольку это не изменение (в vba говорят, что курсор уже есть) в рабочем листе.Однако, если я нажму на другую ячейку и снова вернусь к щелчку на ячейке «AC14», коды будут работать.Есть ли способ обойти это?

Буду признателен, если кто-нибудь сможет пролить мне свет на то, как решить вышеуказанные проблемы.Заранее спасибо.

Шон

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Это может работать для вас:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Cells.CountLarge > 1 Then Exit Sub

    If Target.Row >= 14 And Target.Column = 29 and Target.Value <> "" Then

        Sheet6.Range("Q4").Value = Target.Value
        Target.Offset(0, -1).Select  'select the cell to the left
        Sheet6.Activate

    End If

End Sub
0 голосов
/ 03 февраля 2019

По пункту 2: Похоже, вам действительно нужно определить ваши требования.В настоящее время вы используете событие Worksheet_SelectionChange.По самой своей природе код будет запускаться при изменении выбора с помощью мыши или клавиатуры.Код НЕ будет работать, если снова щелкнуть мышью по ячейке, которая уже выбрана.Потому что это не меняет выбор.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...