Como acesso as pastas de trabalho do Excel * não salvas * no VBA?

0

Eu tenho um processo externo que gera várias planilhas de trabalho. O processo não pode ser modificado. O processo que os gera não os salva. Deixa então como livros de trabalho individuais do Excel 2010: Livro1, Livro2,…, Livro14.

Eu quero ter uma macro aberta em cada uma, em seqüência, mas não consigo ver minha macro.

Isso não funcionará:

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

Isso não funciona

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

Minha macro parece ver apenas a pasta de trabalho ativa; não percebe que existem outras pastas de trabalho.

Qual é o método correto para abrir uma planilha / planilha externa? que não é salvo em um arquivo?

    
por C0ppert0p 20.07.2017 / 02:00

2 respostas

0

Abra uma janela imediata no editor do Visual Basic for Applications (VBA).

Digite "excel.Application.Workbooks.Count" Se ele imprimir corretamente o número de pastas de trabalho abertas, você poderá usar excel.application.Workbooks("Bookx").Activate (tentei apenas em 2010). ( excel.Application.Workbooks(2).sheets(2).activate também funciona.)

Não funcionará se esse processo externo estiver abrindo as novas pastas de trabalho em instâncias separadas. Se for esse o caso, eles são completamente (por design) separados um do outro e você não poderá usar o VBA para se referir a eles.

Uma vez na pasta de trabalho correta, na janela de depuração, use

?excel.Application.ActiveWorkbook.Sheets.Count para determinar se o número correto de planilhas está sendo relatado. Se estiverem, simplesmente consulte cada um usando activeworkbook.sheets(x) . Se a janela de depuração informar o número errado de folhas, acho que você tem um problema diferente.

    
por 25.07.2017 / 20:15
0

A melhor solução parece estar usando o método GetObject . Isso funcionou muito bem para mim:

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
    
por 19.08.2017 / 00:50