Compartilhar via


Procurar texto programaticamente em intervalos de planilhas

O Find método do Range objeto permite que você procure texto dentro do intervalo. Esse texto também pode ser qualquer uma das cadeias de caracteres de erro que podem aparecer em uma célula da planilha, como #NULL! ou #VALUE!. Para obter mais informações sobre cadeias de caracteres de erro, consulte Valores de erro de célula.

Aplica-se a: As informações neste tópico se aplicam a projetos de nível de documento e projetos de suplemento VSTO para Excel. Para obter mais informações, consulte Recursos disponíveis por aplicativo e tipo de projeto do Office.

O exemplo a seguir pesquisa um intervalo chamado Fruits e modifica a fonte para células que contêm a palavra "maçãs". Esse procedimento também usa o FindNext método, que usa as configurações de pesquisa definidas anteriormente para repetir a pesquisa. Você especifica a célula após a qual pesquisar e o método manipula o FindNext resto.

Observação

A FindNext pesquisa do método volta ao início do intervalo de pesquisa depois que ele atinge o final do intervalo. Seu código deve garantir que a pesquisa não seja encapsulada em um loop infinito. O procedimento de exemplo mostra uma maneira de lidar com isso usando a Address[] propriedade.

Para procurar texto em um intervalo de planilha

  1. Declare variáveis para controlar todo o intervalo, o primeiro intervalo encontrado e o intervalo encontrado atual.

    Excel.Range currentFind = null; 
    Excel.Range firstFind = null;
    
  2. Procure a primeira correspondência, especificando todos os parâmetros, exceto a célula a ser pesquisada.

    currentFind = Fruits.Find("apples", missing,
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, 
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false,
        missing, missing);
    
  3. Continue pesquisando enquanto houver correspondências.

    while(currentFind != null)
    
  4. Compare o primeiro intervalo encontrado (firstFind) com Nothing. Se firstFind não contiver nenhum valor, o código armazenará o intervalo encontrado (currentFind).

    if (firstFind == null)
    {
        firstFind = currentFind; 
    }
    
  5. Saia do loop se o endereço do intervalo encontrado corresponder ao endereço do primeiro intervalo encontrado.

    else if (currentFind.get_Address(Excel.XlReferenceStyle.xlA1)
          == firstFind.get_Address(Excel.XlReferenceStyle.xlA1))
    {
        break;
    }
    
  6. Defina a aparência do intervalo encontrado.

    currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
    currentFind.Font.Bold = true;
    
  7. Realize outra pesquisa.

    currentFind = Fruits.FindNext(currentFind);
    

    O exemplo a seguir mostra todo o método .

Exemplo

    private void DemoFind() 
    {
        Excel.Range currentFind = null; 
        Excel.Range firstFind = null; 

        Excel.Range Fruits = Application.get_Range("A1", "B3");
        // You should specify all these parameters every time you call this method,
        // since they can be overridden in the user interface. 
        currentFind = Fruits.Find("apples", missing,
            Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, 
            Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false,
            missing, missing); 

        while(currentFind != null) 
        { 
            // Keep track of the first range you find. 
            if (firstFind == null)
            {
                firstFind = currentFind; 
            }

            // If you didn't move to a new range, you are done.
            else if (currentFind.get_Address(Excel.XlReferenceStyle.xlA1)
                  == firstFind.get_Address(Excel.XlReferenceStyle.xlA1))
            {
                break;
            }

            currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
            currentFind.Font.Bold = true; 

            currentFind = Fruits.FindNext(currentFind); 
        }
    }