Код запускается при копировании / вставке как макрос, но не при сохранении как надстройка - PullRequest
1 голос
/ 01 июня 2019

Как видно из заголовка, этот код завершается с ошибкой в ​​строке Sheet.Copy After:=ThisWorkbook.Sheets(1) с ошибкой во время выполнения 1004

Почему это происходит при добавлении в качестве модуля, но не при сохранении в качестве надстройки?

Вот код:

Dim FolderPath As String
Dim Filename As String
Dim Sheet As Worksheet

Application.ScreenUpdating = False
FolderPath = GetFolder() & "\"
Filename = Dir(FolderPath & "*.xls*")
Do While Filename <> ""
 Workbooks.Open Filename:=FolderPath & Filename, ReadOnly:=True
 For Each Sheet In ActiveWorkbook.Sheets
 Sheet.Copy After:=ThisWorkbook.Sheets(1)
 Next Sheet
 Workbooks(Filename).Close
 Filename = Dir()
 Loop

Application.ScreenUpdating = True
End Sub

1 Ответ

2 голосов
/ 01 июня 2019

Как предположил @BruceWayne, это проблема с выбором правильной книги.Как AddIn, ThisWorkbook будет рабочей книгой AddIn, в то время как ActiveWorkbook (перед открытием других) будет рабочей книгой, в которую вы запускаете AddIn.

Простая замена Thisworkbook с ActiveWorkbook в вашем сценарии не будет работать, потому что вы просто скопируете листы из недавно открытой рабочей книги в ту же самую.

Хорошая идея объявить переменные для хранения этой информации, тогда выможно открыть столько книг, сколько вы хотите и из любого места.

См. ниже:

Application.ScreenUpdating = False

Dim wbDst As Workbook: Set wbDst = ActiveWorkbook 'Can also use Worbooks("book name here")
Dim wbSrc As Workbook
Dim Sht As Worksheet

Dim FolderPath As String: FolderPath = GetFolder() & "\"
Dim FileName As String: FileName = Dir(FolderPath & "*.xls*")

Do While FileName <> ""
    Set wbSrc = Workbooks.Open(FileName:=FolderPath & FileName, ReadOnly:=True)

    For Each Sht In wbSrc.Worksheets
        Sht.Copy After:=wbDst.Sheets(1)
    Next Sht

    wbSrc.Close
    FileName = Dir()
Loop

Application.ScreenUpdating = True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...