Tentando destacar valores exclusivos em várias planilhas no Excel 2007

0

Estou tentando comparar os valores da coluna A de Sheet1 (que eu renomei "AR") e da coluna A de Sheet2 (que renomei "Colar aqui") e realce as linhas que contêm valores que não não existe na outra folha. (Ambas as colunas terminam com uma célula vazia.) Eu encontrei uma macro que pensei ter feito algo semelhante ao que eu queria aqui em remoção eficiente de registros duplicados várias planilhas do Excel e estou tentando modificá-lo para atender às minhas necessidades, mas não consigo fazê-lo funcionar. Atualmente, quando eu executo, ele bloqueia o Excel e eu tenho que fazer a tarefa final no Excel.

Isso é o que eu tenho até agora:

Option Explicit

Sub Compare2()
    Application.ScreenUpdating = False

    Dim startRow As Integer
    startRow = 1

    Dim row As Integer
    row = startRow

    Dim bRow As Integer

    'sharks below, cap'ain
    ' This loop is looping on row.
    ' Scan down column AR!A (i.e., Sheet1!A) until we find an empty cell.
    Do While (Worksheets("AR").Range("A" & row).Value <> "")

        Dim aVal As String
        aVal = Worksheets("AR").Range("A" & row).Value
        bRow = startRow             'I see thy booty

        ' This loop is looping on bRow.  Scan down column 'Paste Here'!A
        ' (i.e., Sheet2!A) until we find an empty cell.
        Do While (Worksheets("Paste Here").Range("A" & bRow).Value <> "")

            Dim aVal2 As String
            aVal2 = Worksheets("Paste Here").Range("A" & bRow).Value

            If (aVal <> aVal2) Then
                Worksheets("AR").Rows(row).Interior.ColorIndex = 6
                                ' we found a traitor; feed 'em to the sharks
                row = row - row
                Exit Do
            End If

            If (aVal2 <> aVal) Then
                Worksheets("Paste Here").Rows(row).Interior.ColorIndex = 6
                row = row - row
                Exit Do
            End If

            bRow = bRow + 1
        Loop

        row = row + 1
    Loop

End Sub

Qualquer ajuda que você possa fornecer seria útil.

    
por Kyle 22.03.2015 / 18:38

1 resposta

0

É uma pena que você não tenha entendido a sub-rotina que você estava canibalizando melhor antes de começar a modificá-lo.

  • A sub-rotina "WalkThePlank" procura por correspondências . Quando encontrar uma linha em Sheet1 que corresponda a uma linha em Sheet2 , toma ação. Você está procurando valores exclusivos. ou seja, linhas em Sheet1 que não correspondem a nada em Sheet2 e vice-versa. Mas o que você está fazendo está acionando pares de linhas que não coincidem; ou seja, se Sheet1!Row 1 não corresponder a Sheet2!Row 1 , você executará uma ação. Isso é prematuro; você precisa digitalizar todo o caminho até Sheet2 para determinar se Sheet1!Row 1 corresponde a qualquer linha em Sheet2 .
  • O autor da sub-rotina "WalkThePlank" fez algo isso não faz muito sentido. Depois de excluir a linha indexada pela variável row , ele define a variável como 0. Isso foi um desperdício, pois fez com que a sub-rotina reexaminasse todas as Sheet1 linhas que ele já havia examinado e determinado como exclusivas. Mas, como exclui a linha que não é exclusiva (isto é, que corresponde à linha bRow on Sheet2 ), ele não vai olhar para essa linha novamente, e não há um loop infinito. Para aumentar a curiosidade, ele poderia ter dito row = 0 , mas, em vez disso, ele disse enigmaticamente row = row - row .

    Mas você precisa mudar isso. (Para ser mais preciso, eu acredito que você deveria elimine as instruções row = … dentro dos Do While loops; exceto pelo row = row + 1 no final.) Como você não está excluindo linhas, isso faz fazer com que sua macro reexamine os mesmos dados repetidamente; isto é, é um loop infinito. Você precisa apenas continuar marcando Sheet1 .

  • Você pode ser capaz de anular um loop infinito do VBA sem matar o Excel e perder seus dados digitando Ctrl + Quebra . Se o seu teclado não tiver uma chave Break , tente abrir o teclado na tela executando osk e clicando em Ctrl e depois em Pausa . Se isso não funcionar, tente Ctrl e, em seguida, ScrLk .

O Super User não é um serviço de criação de scripts. Eu acho que já expliquei o que está dando errado que você consiga consertar isso agora. Se você ainda não conseguir fazer funcionar, volte e diga onde você ficou preso.

    
por 22.03.2015 / 21:49