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.
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.