Consulting

Results 1 to 2 of 2

Thread: Uso das funções WorksheetsFunction INDEX e MATCH

  1. #1

    Uso das funções WorksheetsFunction INDEX e MATCH

    Olá a todos.
    Estou fazendo um código em VBA para cálculo de orçamento aqui da empresa. Existem várias tabelas com os valores de preço, e quando o usuário entra com alguns critérios no Formulário, o código busca qual a planilha, a tabela, a linha e a coluna que correspondem aos critérios e retorna o valor da célula correspondente.
    No entanto, estou tendo um problema pra encontrar, especificamente, a coluna correspondente.
    Estou usando a combinação das funções INDEX e MATCH, mas quando rodo o formulário, me retorna: "Erro em tempo de execução '1004': Não é possível obter a propriedade Match da classe WorksheetFunction"
    Segue abaixo a parte do código que estou tentando rodar.
    As variáveis com "cmb" na frente são os valores selecionados nas caixas de combinação pelo usuário do Formulário. São os critérios que localizam o valor procurado. "vTamanho" seria o índice de cada tabela dentro da planilha.

    Option Explicit
    Dim W As Worksheet
    Dim Tamanho As Variant
    Dim Espessura As Variant
    Dim NPartes As Variant
    Dim vTamanho As Range
    Dim TabelaSelecionada As Range
    
    Private Sub btCalcular_Click()
    
    If cmbTipoChapa = ("Cristal Recuperada") Then
    
    
        Set W = Sheets("Preço Chapa Recuperada")
        W.Activate
        
        Tamanho = cmbTamanhoChapa
        Espessura = cmbEspessura
        NPartes = cmbPartes
    
    
        With Application.WorksheetFunction
            Set vTamanho = W.Range("B:B").Find(Tamanho, LookIn:=xlValues, LookAt:=xlWhole, _
            SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
        End With
        
        Set TabelaSelecionada = W.Range(vTamanho.Offset(1, 1), vTamanho.Offset(5, 10))
        
        With Application.WorksheetFunction
            
            W.Range("M26").Value = .Index(TabelaSelecionada, .Match(NPartes, _
            W.Range(vTamanho.Offset(1, 0), vTamanho.Offset(5, 0)), 0), .Match(Espessura, _
            W.Range(vTamanho.Offset(0, 1), vTamanho.Offset(0, 10)), 0))
     
        End With
        
    End If
    
    End Sub
    Após alguns testes descobri que o erro está especificamente no trecho ".Match(Espessura, W.Range(vTamanho.Offset(0, 1), vTamanho.Offset(0, 10)), 0)", que não funciona quando rodo ele "sozinho".

    Desculpem se se não fui clara ou se cometi algum erro. Essa é minha primeira postagem aqui. Mas já agradeço qualquer um que puder dar uma olhada.

  2. #2
    VBAX Regular keebellah's Avatar
    Joined
    May 2011
    Location
    The Netherlands
    Posts
    19
    Location
    O uso da função de planilha do aplicativo nesta seção está errado
     With Application.WorksheetFunction
            W.Range("M26").Value = .Index(TabelaSelecionada, .Match(NPartes, _
            W.Range(vTamanho.Offset(1, 0), vTamanho.Offset(5, 0)), 0), .Match(Espessura, _
            W.Range(vTamanho.Offset(0, 1), vTamanho.Offset(0, 10)), 0))
    End With
     With W 
            
            .Range("M26").Value = .Index(TabelaSelecionada, WorksheetFunction.Match(NPartes, _
            .Range(vTamanho.Offset(1, 0), vTamanho.Offset(5, 0)), 0), WorksheetFunction.Match(Espessura, _
            .Range(vTamanho.Offset(0, 1), vTamanho.Offset(0, 10)), 0))
         End With
    Você vai ter que experimentar para ver se consegue, sem um exemplo concreto eu não posso fazer nada
    Cheers,
    Hans
    "May the code be with you ... If it isn't... start debugging!"
    www.hcandts.com

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •