2016-05-04 31 views
0

VBAの使用を開始したばかりで、複数のワークシートを1つのブックにマージするコードを使用しています。このような場合、イメージは作成された新しいブックに表示されません。イメージが表示されるボックスにエラーメッセージが表示されます。私はここで、2010年複数のワークシートを1つのワークブックにマージする - 画像エラー

MS Officeを使用私が使用してきたコードは以下:

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)と[this]( http://stackoverflow.com/questions/31551700/excel-vba-code-to-move-worksheets-with-image-add-screen-updating-and-it-errors)は似ています。 – Dan

答えて

0

ただ助けた回避策が見つかりました!

ソースブックを閉じる前に "Application.ScreenUpdating = True"を追加したばかりで、すべてのワープシートをマージするのに時間がかかりますが、少なくともイメージは正しく表示されます。 - オプション1この回避策hereを発見

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 

:ここ

は、新しいコードを次の!

Tks Dan!

関連する問題