Ошибка выполнения «1004» при создании макроса для удаления фигуры - PullRequest
0 голосов
/ 18 июня 2019

Я создал макрос, который удаляет любые изображения в определенном диапазоне ячеек, если изображение присутствует Range("D199:U205", а затем копирует изображение с именем «JB Sig» в нижней части листа и вставляет его втеперь пустое место на листе.

При использовании макроса появляется сообщение «Ошибка времени выполнения 1004»: ошибка приложения или объекта ».Когда эта ошибка возникает, и я отлаживаюсь, строка, которая вызывает проблемы, If Not Intersect(Range("D199:U205"), Range(Pic.TopLeftCell, Pic.BottomRightCell)) Is Nothing Then Pic.Delete

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

Я очень неопытен с кодом, и любой VBA, который я пишу, обычно копируется и вставляется откуда-то,в отличие от меня, понимая, что я делаю.Поэтому, пожалуйста, будьте терпеливы с моей глупостью.Спасибо

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

Sub Approval_JB()
'
' Approval_JB Macro
'

'
    Dim ws As Worksheet
    Set ws = Sheets("Issue Letters")
    ws.Unprotect Password:="john123"
    Dim Pic As Object
    For Each Pic In ws.Shapes
    Dim R As Range
    Debug.Print Pic.Name
    Debug.Print Pic.TopLeftCell.Address
    Debug.Print Pic.BottomRightCell.Address
    Set R = Range(Pic.TopLeftCell, Pic.BottomRightCell)
    If Not Intersect(Range("D199:U205"), R) Is Nothing Then Pic.Delete
    Next Pic
    Range("D199:U205").ClearContents
    ws.Shapes.Range(Array("JB Sig")).Select
    Selection.Copy
    ws.Range("D201").Select
    With ws.Range("D199")
    .Value = "Yours Faithfully"
    End With
    With ws.Range("D204")
    .Value = "Joe Bloggs"
    End With
    With ws.Range("D205")
    .Value = "Engineer"
    End With
    Range("B192").Select
    ws.Protect Password:="john123"
End Sub

Иногда это работает, как описано выше.Однако в других случаях при запуске макроса появляется эта ошибка.

Ошибка времени выполнения «1004»: ошибка приложения или объекта

1 Ответ

0 голосов
/ 18 июня 2019

Только ошибка 1004 не подразумевает какую-то конкретную ошибку, но я предполагаю, что ошибка возникает в этом случае из-за Range(Pic.TopLeftCell, Pic.BottomRightCell).

Попробуйте это: Range(Pic.TopLeftCell.Address & ":" & Pic.BottomRightCell.Address)

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