Importação condicional de planilhas no excel

0

Eu tenho um número significativo de itens que exigem formulários diferentes para serem solicitados. Um trecho da tabela que eu tenho parece com isso:

    1   2   3   4   5   6   7   8   9   10  11  12  13  14
A   -   -   C   -   -   -   -   -   C   -   -   -   -   -
B   -   -   -   -   C   -   C   -   -   -   -   -   -   C

Significa que, para o item A, devo incluir os formulários 3 e 9; para o item B, formulários 5.7 e 14.

É possível gerar uma pasta de trabalho com o título do item que contém os formulários relevantes como planilhas.

(os formulários em si são folhas de excel simples que podem ser renomeadas / manipuladas conforme necessário)

Qualquer ajuda seria muito apreciada, pois há centenas de itens e dezenas de formulários e, portanto, importar manualmente as folhas para cada item, por sua vez, seria extremamente demorado!

obrigado

Sam Wall
fonte
"sua pergunta é pouco confusa", o que eu tenho é que você deseja importar folha com base nos valores da célula, ou alguma idéia diferente?
Rajesh S
Sim, então eu teria uma pasta de trabalho master com sheet1,2,3 etc e, em seguida, gerar uma pasta de trabalho para o item A que copiaria as planilhas 3 e 9 da planilha mestre
Sam Wall
Oi Sam, você pode nos dar um pouco mais de informação? Haverá 1 pasta de trabalho com um número de folhas em que cada guia de folha é rotulada com o título do formulário. Onde estão os formulários para começar (diferentes pastas de trabalho ou todas na mesma pasta de trabalho)? e de onde vêm os títulos?
Clinton
Atualmente, há 1 pasta de trabalho com muitas folhas, cada uma delas é um formulário. Separtely há uma tabela que contém uma lista de cada item e um "-" em cada formulário que não é necessário e um "C" em cada formulário que é. Historicamente, criamos manualmente um portfólio para cada item examinando a tabela e copiando as folhas relevantes em um novo documento manualmente. Centenas de itens foram enviados para nós de uma só vez, então eu estava tentando descobrir uma maneira de automatizar esse trabalho. Muito Obrigado
Sam Wall
OK - então você começará com uma única pasta de trabalho principal e, em seguida, dividirá-a em várias pastas de trabalho diferentes com base na tabela em sua pergunta. Isso está correto?
Clinton

Respostas:

1

Sam, aqui está um começo de como lidar com esse problema interessante.

Eu configurei uma planilha semelhante à sua, exceto que eu rotulei as colunas com os nomes dos formulários e as linhas com os novos nomes da Planilha como você pode ver abaixo:

enter image description here

Você notará que a tabela com as condições está na primeira guia e os formulários estão nas outras guias. Os nomes nas guias correspondem exatamente aos nomes dos formulários na linha 1 da tabela.

Em seguida, entrei no modo de desenvolvedor e criei uma nova macro. e digitei o código:

Sub Macro1()
'
' Macro1 Macro
' Copy sheets into new workbooks
'
'

Dim myWB As Workbook
Set myWB = ActiveWorkbook
Dim mySheet As String
Sheets(1).Select
mySheet = ActiveSheet.Name

Dim workbookName As String
Dim formName As String
For Each onecell In Range("b2:d3")
    If onecell = "C" Then
        workbookName = Cells(onecell.Row, 1).Value
        formName = Cells(1, onecell.Column).Value
        Sheets(formName).Select
        'MsgBox "WB: " & workbookName & " Form: " & formName & " Current: " & myWB.Name & ":" & mySheet
        ActiveWorkbook.Sheets(formName).Copy After:=Workbooks(workbookName).Sheets(1)
        Windows(myWB.Name).Activate
        Sheets(mySheet).Select
        MsgBox "Form: " & formName & " copied to Workbook " & workbookName
    End If
Next

End Sub

A macro in-situ se parece com isso:

enter image description here

Esse código não faz todas as verificações que podem ser feitas nem inclui a criação de novas pastas de trabalho (você pode adicionar isso à sua macro). Para que isso funcione, você precisa criar e salvar as pastas de trabalho em branco com os nomes exatos que você tem na primeira coluna da tabela (por exemplo, Workbook1.xlsx e Workbook1.xlsx no meu exemplo). Essas pastas de trabalho precisam estar abertas para o código funcionar.

Finalmente, pressione "Executar" para executar a macro. Você verá o seguinte:

enter image description here

A mensagem aparece sempre que um formulário é copiado para uma pasta de trabalho. Você pode desligar a mensagem comentando no código. Caso contrário, pressione 'OK' até que todos os formulários sejam copiados. O resultado é o seguinte:

enter image description here

É isso aí! Espero que isso ajude e, se você modificar o código para obter uma solução melhor, poste-o de volta para que todos possamos nos beneficiar.

Clinton
fonte
Este é um grande obrigado, vou procurar combiná-lo com a macro que cria pastas de trabalho com os nomes dos itens e postar aqui quando estiver pronto.
Sam Wall
@Clinton ,,, este código está produzindo erro Script Out Of Range já que o código não consegue encontrar o caminho para os arquivos em que os formulários (planilhas) devem ser copiados, corrija o código !!
Rajesh S
@Rajesh - obrigado pela observação. O script destina-se apenas como um acionador de partida para Sam e não uma solução completa. Isso exigiria muito mais código para criar novas pastas de trabalho se elas não existissem e para verificar se há erros do usuário. Portanto, o comentário de que as pastas de trabalho precisam ser criadas e abertas antes do script é executado. O Subscrito fora do intervalo ocorre se os nomes dos formulários não corresponderem exatamente aos nomes nas guias ou se as pastas de trabalho não estiverem abertas ou forem nomeadas incorretamente. Por favor, sinta-se à vontade para adicionar ao código ou oferecer uma solução melhor.
Clinton
1

Obrigado a todos que ajudaram, esta é a macro final que usei:

Sub One()
'
'Create and open workbooks of title col a & .xls
Dim masterWB As Workbook
Set masterWB = ActiveWorkbook
Dim aName As String

'set last row of items
For item = 2 To 13
    aName = masterWB.Sheets(1).Cells(item, 1).Value
    Workbooks.Add
    ActiveWorkbook.SaveAs fileName:=aName & ".xls"
    Sheets(1).Name = "Comments"

'put forms of title row 1 in workbook of title col a & .xls
    Dim myWB As Workbook
    Set myWB = ActiveWorkbook
    Dim mySheet As String
    Sheets(1).Select
    mySheet = ActiveSheet.Name

Next
masterWB.Sheets(1).Activate

Dim workbookName As String
Dim formName As String
'insert range of forms
For Each onecell In Range("d2:ae13")
    If onecell = "C" Or onecell = "II" Then

        masterWB.Sheets(1).Activate
        workbookName = Cells(onecell.row, 1).Value
        workbookName = workbookName & ".xls"

        formName = Cells(1, onecell.Column).Value
        Sheets(formName).Select
        'MsgBox "WB: " & workbookName & " Form: " & formName & " Current: " & myWB.Name & ":" & mySheet
        ActiveWorkbook.Sheets(formName).Copy After:=Workbooks(workbookName).Sheets(1)



        'reset
        Windows(myWB.Name).Activate
        Sheets(mySheet).Select
        'MsgBox "Form: " & formName & " copied to Workbook " & workbookName
    End If
Next

End Sub
Sam Wall
fonte
Obrigado por compartilhar sua solução final para esse problema interessante.
Clinton