Вставленное изображение не отображается, когда лист копируется в другую книгу в Excel 2007 - PullRequest
0 голосов
/ 11 апреля 2011

В книге A у меня есть макрос, который открывает книгу B только для чтения, копирует 4 листа в книгу A, а затем закрывает книгу B.

Один из скопированных листов содержит два вставленных изображения .PNG, но эти изображения не отображаются на листе после его копирования в рабочую книгу A.

После того, как я добавил книгу «Сетевая папка B» в настройки Центра управления безопасностью и поставил флажок «Вырезать, скопировать, отсортировать по родительским ячейкам» в разделе «Дополнительные параметры», я мог видеть контуры изображения с сообщением об ошибке

"Изображение не может быть отображено .. может не хватить памяти .. или изображение повреждено .."

на скопированном листе.

Я сомневаюсь, что любая из этих ошибок верна, потому что, если я вручную скопирую лист, изображения будут отображаться успешно.

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

Я также разархивировал рабочую книгу. Файл xlsx подтвердил, что оба изображения сохранены в файле xlsx и не импортированы из других источников.

Я подумал о написании кода для явного копирования и вставки изображений, но не вижу в VBA способа найти точное местоположение на целевом листе, где я хочу вставить изображения.

Я использую Excel 2007 на XP.

Есть идеи?

1 Ответ

0 голосов
/ 15 апреля 2011

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

Я изменил код VBA, который нашел по адресу: http://www.exceltip.com/st/Insert_pictures_using_VBA_in_Microsoft_Excel/486.html следующим образом:

Function InsertImageInRange(Image1_Filepath As String, Image2_Filepath As String, TargetSheet As String, TargetCell1 As Range, TargetCell2 As Range)
    ' Insert a picture(s) and resize to fit the TargetCells range
    ' This workaround deletes the image containers and copies in the original logos from file.

    Dim dblTop As Double, dblLeft As Double, dblWidth As Double, dblHeight As Double   
    Dim objImage As Object         

    Sheets(TargetSheet).Select  
    ' Check that images are valid
    bUnexpectedImage = True
    For Each img In ActiveSheet.Shapes
        If img.Name = "Picture 1" Or img.Name = "Picture 22" Then
            img.Delete
        Else
            bUnexpectedImage = False
        End If
    Next
    If bUnexpectedImage = False Then MsgBox ("Unexpected images found.")

    If TypeName(ActiveSheet) <> "Worksheet" Then Exit Function
    If Dir(Image1) = "" Then Exit Function

    ' Insert first logo
    Set objImage = ActiveSheet.Pictures.Insert(Image1)
    ' Determine positions
    With TargetCell1
        dblTop = .Top
        dblLeft = .Left
        dblWidth = .Offset(0, .Columns.Count).Left - .Left
        dblHeight = .Offset(.Rows.Count, 0).Top - .Top
    End With
    ' Position  & size image
    With objImage
        .Top = dblTop
        .Left = dblLeft + 13
        .Width = dblWidth + 25
        .Height = dblHeight + 15
    End With
    Set objImage = Nothing

    ' Insert second logo, as above...    
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...