2016-05-04 6 views
0

Я только начал использовать VBA, и я использовал код для объединения нескольких рабочих листов в одну книгу, он отлично работает, за исключением рабочих листов, содержащих изображения. В этих случаях изображение не будет отображаться в созданной новой рабочей книге. Появится поле, в котором должно быть изображение с сообщением об ошибке. Я использую MS Office 2010.Слияние нескольких рабочих листов с изображениями в одну книгу - Ошибка изображения

Далее следует код я использую:

Sub MergePlans() 
Dim CurFile As String, DirLoc As String 
Dim DestWB As Workbook 
Dim ws As Object 

DirLoc = ThisWorkbook.Path & "\Merge\" 
CurFile = Dir(DirLoc & "*.xlsx") 

Application.ScreenUpdating = False 
Application.EnableEvents = False 

Set DestWB = Workbooks.Add(xlWorksheet) 

Do While CurFile <> vbNullString 
    Dim OrigWB As Workbook 
    Set OrigWB = Workbooks.Open(Filename:=DirLoc & CurFile, ReadOnly:=True) 

    For Each ws In OrigWB.Sheets 
     ws.Select 
     ws.Copy After:=DestWB.Sheets(DestWB.Sheets.Count) 
    Next 

    OrigWB.Close Savechanges:=False 
    CurFile = Dir 
Loop 

Application.DisplayAlerts = False 
DestWB.Sheets(1).Delete 
Application.DisplayAlerts = True 

Application.ScreenUpdating = True 
Application.EnableEvents = True 

Set DestWB = Nothing 

End Sub 

Любая идея о том, что происходит? Буду признателен за любую помощь! Tks!

+0

Кажется, что Excel 2010, прямое копирование листов всегда искажает изображения, содержащиеся на листе. Для этого есть обходные пути (копирование рабочего листа, затем удаление объектов на новом листе, а затем копирование и вставка изображений со старого листа напрямую), но я не видел прямых решений. [Этот вопрос] (http://stackoverflow.com/questions/5617122/inserted-image-fails-to-display-when-sheet-is-copied-to-another-workbook-in-exce) и [это] (http://stackoverflow.com/questions/31551700/excel-vba-code-to-move-worksheets-with-image-add-screen-updating-and-it-errors) похожи. – Dan

ответ

0

только что нашел обходное решение, которое помогло!

Я только что добавил «Application.ScreenUpdating = True» перед закрытием исходной книги, для слияния всех таблиц требуется больше времени, но, по крайней мере, изображения отображаются правильно!

Здесь следует новый код:

Sub MergePlans() 
Dim CurFile As String, DirLoc As String 
Dim DestWB As Workbook 
Dim ws As Object 

DirLoc = ThisWorkbook.Path & "\Merge\" 
CurFile = Dir(DirLoc & "*.xlsx") 

Application.ScreenUpdating = False 
Application.EnableEvents = False 

Set DestWB = Workbooks.Add(xlWorksheet) 

Do While CurFile <> vbNullString 
    Dim OrigWB As Workbook 
    Set OrigWB = Workbooks.Open(Filename:=DirLoc & CurFile, ReadOnly:=True) 

    For Each ws In OrigWB.Sheets 
     ws.Select 
     ws.Copy After:=DestWB.Sheets(DestWB.Sheets.Count) 
    Next 
    **Application.ScreenUpdating = True** 
    OrigWB.Close Savechanges:=False 
    CurFile = Dir 
Loop 

Application.DisplayAlerts = False 
DestWB.Sheets(1).Delete 
Application.DisplayAlerts = True 

Application.ScreenUpdating = True 
Application.EnableEvents = True 

Set DestWB = Nothing 


End Sub 

Найдено этот способ here - Вариант 1!

Tks Dan!

Смежные вопросы