Assistência com macros do Excel

1

Minha empresa usa o Excel para rastrear inspeções e manutenção de extintores de incêndio portáteis e estou tentando adicionar algumas funcionalidades a ele, mas não tenho a menor idéia de como fazê-lo. Eu farei o meu melhor para explicar o que eu preciso de ajuda:

Todas as três folhas terão os mesmos cabeçalhos de coluna na linha 1. Na primeira e segunda planilhas da pasta de trabalho (intituladas "Mensalmente" e "Anual" respectivamente), estou usando formatação condicional para colorir células nas colunas Y e AC com base nesses valores, conforme determinado por uma fórmula (Amarelo, se o cálculo retornar um valor menor que 90, Vermelho, se o valor retornado for 0 ou um número negativo).

O que eu gostaria que uma macro fizesse é copiar a linha inteira da coluna A até a coluna AD para uma terceira folha (chamada "Maint Due"). Também seria bom se esse processo fosse automatizado para que, a qualquer momento em que os valores nas colunas Y e AC mudassem nas planilhas "Mensal" ou "Anual", as informações na planilha "Maint Due" fossem atualizadas automaticamente (mas se eu tivesse que execute novamente a macro manualmente para que isso aconteça, não é um grande problema).

Espero ter explicado o que estou tentando fazer de uma forma que faça sentido para alguém e eles possam oferecer ajuda. Eu tenho muito pouca experiência em codificação e faz 15 anos desde que eu realmente fiz qualquer codificação, então estou muito enferrujada. Eu aprecio qualquer conselho ou assistência que as pessoas possam dar.!

EDITAR:

Eu nunca usei o gravador Macro e só consigo descobrir como criar uma macro para copiar e colar, então não tive sorte lá. Depois de fazer mais algumas pesquisas e assistir alguns vídeos, resolvi isso juntos:

Sub Show_on_Maint()
x = 2
'Sets the starting row
Do While Cells(x, 2) <> ""
    'Continue to evaluate until a blank cell is reached
    If Cells(x, 25) <= 90 Then
        'Evaluates the cell in column Y to determine if the value is less than or equal to 90
        Sheets("Sheet1").Rows(x).Copy Sheets("Sheet6").Range("A2")
        'Copies the row to the Maint Due sheet
    Else
        If Cells(x, 29) <= 90 Then
            'Evaluates the cell in column AC to determine if the value is less than or equal to 90
            Sheets("Sheet1").Rows(x).Copy Sheets("Sheet6").Range("A2")
            'Copies the row to the Maint Due sheet
        End If
    End If
    x = x + 1
Loop
End Sub

Quando eu executo / depuro, recebo um erro Loop without Do. Acho que minha lógica é boa, mas não tenho experiência suficiente para descobrir por que estou recebendo esse erro.

EDIT: final ausente se antes x = x + 1

Agora recebo um erro de execução 9 "Subscrito fora do intervalo" em: Sheets("Sheet1").Rows(x).Copy Sheets("Sheet6").Range("A2")

(Clique na imagem para ampliar)

    
por Ogre Ogre 19.12.2014 / 13:58

1 resposta

0

Você mencionou que gostaria que ele automaticamente copiasse as informações para o Maint Due , então trabalharei com isso. Uma macro de evento Worksheet change poderia cobrir a automação, mas você precisaria de uma para cada uma das planilhas Mensal e Anual . Vou sugerir um Workbook_SheetChange que analise a planilha de origem procurando por Mensal ou Anual.

Toque em Alt + F11 e quando o VBE abrir, olhe para o Explorador de Projetos no lado esquerdo para ThisWorkbook . Se você não tiver o Explorador de Projetos , toque em Ctrl + R para mostrá-lo. Clique com o botão direito do mouse em ThisWorkbook e escolha View Code . No novo painel à direita intitulado algo como Book1 - ThisWorkbook (Code) , cole o seguinte.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If LCase(Sh.Name) = "monthly" Or LCase(Sh.Name) = "annual" Then
        If Not Intersect(Target, Sh.Range("Y:Y, AC:AC")) Is Nothing Then
            On Error GoTo Fìn
            Application.ScreenUpdating = False
            Application.EnableEvents = False
            Dim lc As Long, r As Range
            For Each r In Intersect(Target, Sh.Range("Y:Y, AC:AC"))
                If r.Value <= 90 Then
                    lc = Sh.Cells(1, Columns.Count).End(xlToLeft).Column
                    Sh.Cells(r.Row, 1).Resize(1, lc).Copy _
                      Destination:=Sheets("Maint Due").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
                End If
            Next r
        End If
    End If
Fìn:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

Toque em Alt + Q para retornar à sua pasta de trabalho. Quaisquer novos valores digitados na coluna Y da planilha anual ou mensal ou na coluna AC resultarão em que a linha seja copiada para a próxima linha em branco na planilha do Maint Due.

O primeiro problema que vejo é que as macros de evento acionadas não são acionadas quando o resultado de uma fórmula é alterado. Houve algumas menções às colunas Y e AC sendo calculadas para que o gatilho pudesse estar na coluna criando o (s) valor (es) nas colunas Y e AC, e não nas colunas Y e Ac em si. As colunas V e X parecem ser candidatas prováveis.

    
por 20.12.2014 / 01:33