Excel Macro: atualize a planilha ou crie uma nova com base em um único critério

0

Eu quero escrever uma macro que atualize uma única folha de muitas em uma pasta de trabalho do Excel, com base em um único critério.

A primeira folha da minha pasta de trabalho é intitulada "Entrada" ; Eu copio e colo o portfólio de um cliente nesta folha em branco. A célula A2 de "Entrada" contém o nome do cliente.

A segunda folha é intitulada "Work" ; A coluna I de "Work" contém os dados do cliente reorganizados da maneira que eu preciso.

O restante das planilhas tem o nome de clientes específicos ( "Jones, Matthew" "Smith, Peter" etc.).

Eu quero criar uma macro que atualize a planilha cujo título corresponde ao nome contido em "Entrada" A2 . Especificamente, eu quero copiar Coluna I de "Trabalho" e colá-lo na Coluna A da folha (ex. "Jones, Matthew") cujo título corresponde a "Entrada" A2 .

Também gostaria de ter a macro criar uma nova planilha se "Entrada" A2 não corresponder ao título de nenhuma das planilhas existentes (ou seja, se for uma nova cliente). O texto em "Entrada" A2 deve ser o título da nova planilha (por exemplo, "Jones, Sarah" ).

Eu gostaria de receber conselhos sobre como proceder. Infelizmente, meu entendimento de macros é muito limitado. Eu tentei realizar a tarefa com fórmulas simples, mas até agora não tive sucesso.

    
por Corey 27.07.2016 / 00:26

1 resposta

0

Esta é a macro que você precisa.

 Public Sub clients()
    Dim wkb As Workbook
    Dim wks, wks1, wks2 As Worksheet
    Set wkb = ThisWorkbook
    nwks = wkb.Sheets.Count 'Number of sheets on the Workbook
    Set wks = wkb.Sheets("Input")
    clientname = wks.Cells(2, 1) 'Name of the client on cell A2 of Input
    If clientname <> "" Then 'if clientname is not empty
        found = False
        For i = 1 To nwks
            sheetname = wkb.Sheets(i).Name
            If sheetname = clientname Then found = True 'sheet exists
        Next i
        If found = False Then 'If sheet doesn't exist then create it
            With wkb
                Set wks1 = .Sheets.Add(After:=.Sheets(.Sheets.Count))
                wks1.Name = clientname
            End With
        End If
        'Copy column I from work to client name column A
        Set wks1 = wkb.Sheets("Work")
        Set wks2 = wkb.Sheets(clientname)
        wks1.Columns(9).Copy wks2.Columns(1)
    End If
End Sub

Abra VBA / Macros com ALT + F11 , em ThisWorkbook insira um novo módulo e cole o código no lado direito.

Execute clicando no triângulo verde.

Eu coloco comentários no código para que você entenda como funciona.

Você pode executá-lo também passo a passo clicando na primeira linha e depois passando por cada etapa pressionando F8 .

    
por 28.07.2016 / 11:18