Как проверить, есть ли в ячейке изображение? - PullRequest
5 голосов
/ 23 февраля 2010

В Excel я хочу проверить, есть ли в определенной ячейке, например, "C12", изображение?
Как я могу это сделать?

Ответы [ 4 ]

7 голосов
/ 23 февраля 2010

Вы делаете это, просматривая коллекцию Shapes рабочего листа, ища фигуру, у которой .TopLeftCell имеет тот же адрес, что и целевой диапазон.

2 голосов
/ 09 июня 2015

Самое простое решение - создать функцию, которая будет возвращать 1, если изображение существует в ячейке, и 0, если его нет.Это работает только для отдельных ячеек и требует изменения для нескольких ячеек.

Function CellImageCheck(CellToCheck As Range) As Integer
' Return 1 if image exists in cell, 0 if not

    Dim wShape As Shape

    For Each wShape In ActiveSheet.Shapes
        If wShape.TopLeftCell = CellToCheck Then
            CellImageCheck = 1
        Else
            CellImageCheck = 0
        End If
    Next wShape

End Function

Этот код может быть запущен с использованием:

Sub testFunction()

    If CellImageCheck(Range("B6")) Then
        MsgBox "Image exists!"
    Else
        MsgBox "Image does not exist"
    End If

End Sub
2 голосов
/ 11 ноября 2011

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

Public Sub RemoveUnWantedGraphs()

    Dim shp As Shape
    Dim rangeToTest As Range
    Dim c As Range
    Dim shpList

    'Set the rangeToTest variable to the selected cells
    Set rangeToTest = Selection

    'Loop Over the the selected cells
    For Each c In rangeToTest


        'Inner loop to iterate over the shapes collection for the activesheet
        Set shpList = ActiveSheet.Shapes
        For Each shp In shpList

            Application.StatusBar = "Analysing:- " + c.Address + " Graphs To Find:- " & shpList.Count


            'If the address of the current cell and the address
            'of the shape are the same then delete the shape
            If c.Address = shp.TopLeftCell.Address Then

                Debug.Print "Deleting :- " & shp.Name
                shp.Delete

                DoEvents
            End If

        Next shp

    Next c

    Application.StatusBar = ""

    MsgBox "All Shapes In Range Deleted"

End Sub
1 голос
/ 10 июня 2011
For Each wShape In ActiveSheet.Shapes
If (wShape.Type <> 13) Then wShape.Delete ' If the shape doesn't represent a Picture,     ' delete
Next wShape
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...