Как я могу захватить событие, основанное на том, что «изображение было вставлено в текущий лист в любой целевой ячейке»?
- Я знаю, как обнаружить действие «Вставить» в лист,согласно этот вопрос здесь.Однако это основано на
Worksheet_Change
, который не срабатывает при вставке изображения. - Я также рассмотрел перехват всех событий вставки, как объяснено в этой статье , но это простопроверяет все параметры (клавиатура, мышь, панель команд).Мне все равно пришлось бы вручную проверять «было ли это изображение вставлено».
То, что я пытаюсь выяснить, в основном то, что происходит в этой первой ссылке (подключиться к Worksheet_Change
событие и продолжить, когда Change
был основан на Paste
), но также может обнаружить тот факт, что объект Shape
был добавлен на лист, где Shape.Type
равно 13 (согласно этиперечисления )
Любая помощь очень ценится.
Пример кода:
Private Sub Worksheet_Change(ByVal Target As Range) 'Doesn't trigger on Image Paste
Dim ws As Worksheet
Dim imageCnt As Integer
Dim sh As Shape
Dim UndoList As String
Set ws = ActiveSheet
UndoList = Application.CommandBars("Standard").Controls("&Undo").List(1)
imageCnt = 0
If Left(UndoList, 5) = "Paste" Then 'When paste.
If Target.Address = "$C$8" Then 'Where user is instructed to paste.
With ws 'Check if there's a new image:
For Each sh In .Shapes
If sh.Type = msoPicture Then
imageCnt = imageCnt + 1
End If
Next sh
If imageCnt > oldImageCnt Then 'oldImageCnt publicly declared elsewhere
Set sh = .Shapes(.Shapes.Count)
'Do stuff with the pasted image here.
End If
End With
End If
End If
End Sub
К сожалению, я не могу просто потопить событие в коллекции Shapes
иличто-то похожее.Любой совет / помощь очень ценится.