Основная проблема в том, что ваша функция SheetExists
не знает, в какой книге нужно искать.Поэтому для просмотра книги необходим параметр.
Private Function SheetExists(ByVal SheetName As String, Optional InWorkbook As Workbook) As Boolean
Dim sht As Object
If InWorkbook Is Nothing Then Set InWorkbook = ThisWorkbook 'default to ThisWorkbook
On Error Resume Next
Set sht = InWorkbook.Sheets(SheetName)
SheetExists = Not sht Is Nothing
On Error Goto 0 'either this or Err.Clear is needed
End Function
Затем я рекомендую определить список имен листов, которые следует скопировать, чтобы можно было использовать цикл:
Dim ListOfSheetNames As Variant
ListOfSheetNames = Array("ANALYSE E 000002", "ANALYSE E 000003") 'add more sheet names here
Затем установите открытую рабочую книгу в переменную для более легкого доступа:
Dim OpenedWorkbook As Workbook
Set OpenedWorkbook = Workbooks.Open(Filename:=MyFolder & "\" & MyFile, UpdateLinks:=False)
И, наконец, прокрутите список имен листов, проверьте, существуют ли имена листов в открытой книге, и скопируйте его в ThisWorkbook
(это рабочая книга, в которой выполняется этот код).
Dim SheetName As Variant
For Each SheetName In ListOfSheetNames 'loop through all sheet names in the list
If SheetExists(SheetName, OpenedWorkbook) Then 'test if sheet name exists in the opened workbook
OpenedWorkbook.Sheets(SheetName).Copy Before:=ThisWorkbook.Sheets("ENDOFFILE")
End If
Next SheetName
В конце вы можете закрыть открытую рабочую книгу с помощью
OpenedWorkbook.Close SaveChanges:=False