PDA

View Full Version : Uso das funções WorksheetsFunction INDEX e MATCH



RobertaSV
11-07-2018, 09:00 AM
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.

keebellah
10-25-2021, 01:20 AM
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