2015-07-10 3 views
0

Я знаю, как открыть все книги в каталоге, мне нужно открыть исходную книгу и скопировать изображение из файла wbPicture.xlsx Picture 100 и для каждого открываемого wbdestination удалить любую форму, которая находится ниже строки 84 на каждом рабочем листе в режиме wbdestination.Копировать изображение во все книги в каталоге

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

Sub CopyImage() 
Dim imagewb As String 
Dim openedwb As Workbook 
Dim workbook As Workbook 
Dim destbook As String 
Dim totalbooks As Int 
Dim bookname As String 
Dim fulllist() As String 

imagewb = "C:\Image.xlsx" 
Set openedwb = Workbooks.Open(imagewb) 

'Selecting image from template workbook 
For Each shape in ActiveSheet.Shapes 
    If shape.Name = "Picture 100" Then 
    shape.Select 
    shape.Copy 
    End If 
Next shape 

Set WB = ActiveWorkbook 

'Setting location of destination workbooks 
destbook = "\\Hiya\ExcelFiles\" 

totalbooks = 0 
'Getting name of all .xlsx workbooks 
bookname = Dir(destbook & "*.xlsx") 

'Creating array 
totalbooks = totalbooks + 1 
ReDim Preserve fullList(1 To totalbooks) 
fullList(totalbooks) = bookname 
bookname = Dir() 
Wend 

For int totalbooks = 1 To UBound(fullList) 
Set openedwb = Workbooks.Open(destbook & fullList(totalbooks)) 
'Selecting 1st sheet 
Sheets(1).Select 
'Pasting image from clipboard to workbook 
With Sheets(1) 
    .Paste(.Range("A81")) 
End With 

'Saving workbook & opening next 
openedwb.Save 
openedwb.Close False 

End Sub 

ответ

2

Это удалит любое изображение, независимо от имени и т.д., который содержится в указанной диапазоне, в моем примере ссылочный диапазон «A81: Z250»

For Each shape In ActiveSheet.Shapes 
    If Not Application.Intersect(shape.TopLeftCell, .Range("A81:Z250")) Is Nothing Then 
     If shape.Type = msoPicture Then 
     shape.Delete 
    End If 
    End If 
Next shape 

Для ссылки на каждый лист, содержащийся в книге, вытащил прямо из MSDN KB

 Sub WorksheetLoop() 

    Dim WS_Count As Integer 
    Dim I As Integer 

    ' Set WS_Count equal to the number of worksheets in the active 
    ' workbook. 
    WS_Count = ActiveWorkbook.Worksheets.Count 

    ' Begin the loop. 
    For I = 1 To WS_Count 

     ' Insert your code here. 
     ' The following line shows how to reference a sheet within 
     ' the loop by displaying the worksheet name in a dialog box. 
     MsgBox ActiveWorkbook.Worksheets(I).Name 

    Next I 

    End Sub 
+0

спасибо за этот синтаксис, но когда я пытаюсь перебирать все листы синтаксис не представляет ошибку, нО d oes фактически не обновляет все листы. – MasterOfStupidQuestions

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