Вопрос начинающего VBA: один и тот же макрос применяется по-разному, демонстрирует различное поведение - PullRequest
0 голосов
/ 23 ноября 2018

У меня следующий вопрос: код, который вы видите ниже, был вставлен в объект Excel

Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
Dim DAY, other As Range
Set DAY = Range("b4:af4")

If Not Intersect(DAY, Range(Target.Address)) Is Nothing Then
ActiveCell.Copy
Sheets("SP Analysis").Activate
Range("b2").PasteSpecial Paste:=xlPasteValues

'ElseIf Not Intersect(other, Range(Target.Address)) Is Nothing Then

End If
End Sub

Макрос выполняется, но не копирует активную ячейку в листе SP Analysis.

Если я изменю код следующим образом:

Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Application.ScreenUpdating = False Dim DAY, other As Range Set DAY = Range("b4:af4")

If Not Intersect(DAY, Range(Target.Address)) Is Nothing Then Call TEST

'ElseIf Not Intersect(other, Range(Target.Address)) Is Nothing Then End If End Sub

с помощью макроса TEST, выполняющего

sub test
  ActiveCell.Copy
Sheets("SP Analysis").Activate
Range("b2").PasteSpecial Paste:=xlPasteValues
end sub

Команда выполняет то, что должна делать.Вопрос почему?В чем разница между одним методом и другим?И как заставить команду работать в объекте Excel вместо вызова макроса?

Спасибо

1 Ответ

0 голосов
/ 23 ноября 2018

Попробуй это.Используйте Target вместо ActiveCell, хотя в этом случае я не знаю, почему последний не будет работать.И мы можем передать значение напрямую, не активируя ничего.

Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Application.ScreenUpdating = False

Dim DAY As Range, other As Range   'need to specify type for each variable, otherwise Variant
Set DAY = Range("b4:af4")

If Not Intersect(DAY, Target) Is Nothing Then
    Cancel=True
    Sheets("SP Analysis").Range("b2").Value = Target.Value  'use target
End If

Application.ScreenUpdating = True   'turn it back on

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