У меня есть внешний процесс, который генерирует несколько рабочих листов. Процесс не может быть изменен. Процесс, который их генерирует, не сохраняет их. Затем он оставляет отдельные рабочие книги Excel 2010: Book1, Book2,…, Book14.

Я хочу, чтобы макрос открывал каждый по очереди, но не могу заставить мой макрос их видеть.

Это не сработает:

excel.application.Workbooks("Bookx").Activate

Это не работает

excel.application.Workbooks(x).sheets(1).Activate

Кажется, мой макрос видит только активную книгу; он не понимает, что существуют другие рабочие книги.

Как правильно открыть внешнюю рабочую книгу / лист, который не сохранен в файл?

2 ответа2

0

Откройте непосредственное окно в редакторе Visual Basic для приложений (VBA).

Введите ?первенствует.Заявка.Workbooks.Подсчет Если он правильно напечатает количество открытых книг, вы сможете использовать excel.application.Workbooks("Bookx").Activate (я только что попробовал на 2010). (excel.Application.Workbooks(2).sheets(2).activate также работает.)

Это не будет работать, если этот внешний процесс открывает новые книги в отдельных экземплярах. Если это так, то они полностью (по замыслу) отделены друг от друга, и вы не сможете использовать VBA для обращения к ним.

Однажды в правильной книге, в окне отладки используйте

?excel.Application.ActiveWorkbook.Sheets.Count чтобы определить, сообщается ли правильное количество листов. Если они есть, просто обратитесь к каждому с помощью activeworkbook.sheets(x) . Если в окне отладки указано неверное количество листов, я думаю, у вас другая проблема.

0

Лучшее решение, кажется, использует метод GetObject . Это сработало очень хорошо для меня:

Number_of_Books = 10
For PTR = 1 To Number_of_Books
    Application.DisplayAlerts = False
    Set xlApp = GetObject("Book" & PTR).Application
        xlApp.Application.Workbooks("Book" & PTR).Sheets("Table").Activate
        xlApp.Application.WindowState = xlMaximized
        xlApp.Application.Workbooks("Book" & PTR).Sheets("Table").Select
        xlApp.Application.ActiveWorkbook.SaveAs Filename:=DIRNAME_DATA & "Book" & PTR & ".xlsx", _
            FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        xlApp.Application.ActiveWorkbook.Close
        x = x + 1
Next

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .