Vídeo recomendado
https://youtu.be/diWPPPhW-9E

ERRO EM TEMPO DE EXECUÇÃO '13': Tipos incompatíveis

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
jesuéliton
Acabou de chegar
Acabou de chegar
Mensagens: 2
Registrado em: Ter Mai 19, 2015 9:36 am

ERRO EM TEMPO DE EXECUÇÃO '13': Tipos incompatíveis

Mensagem por jesuéliton »

Estou usando uma planilha de Controle de Estoque que foi baixada na internet, depois de um certo tempo usando ela, me apareceu esse erro!
não sei resolver e estou postando pra ver ser alguém pode me ajudar em alterar o código VBA, pois não entendo muito, abaixo está de cor vermelha a qual a planilha me informa o erro. Ficarei muito grato se alguém me ajudar!




Option Explicit

Public Function VBA_SELECT(codigo_produto As String, range_produto As Range, range_data As Range, range_valor As Range)

Application.ScreenUpdating = False

Dim produto, valor, data
Dim a, b, c, i

produto = False
valor = CDbl(0)
data = CDate(0)

' encontra a referência da coluna para cada cabeçalho
a = range_produto.Column
b = range_valor.Column
c = range_data.Column

' encontra a referência da linha inicial para a pesquisa
i = range_produto.Row

' atualiza valores e datas de registros do produto de código informado
Do While range_produto.Worksheet.Cells(i, a).Value <> ""

If (range_produto.Worksheet.Cells(i, a).Value = codigo_produto) And (range_produto.Worksheet.Cells(i, c).Value >= data) Then
produto = True
valor = CDbl(range_produto.Worksheet.Cells(i, b).Value)
data = CDate(range_produto.Worksheet.Cells(i, c).Value)

End If
i = i + 1

Loop

Application.ScreenUpdating = True

If produto Then
VBA_SELECT = valor
Else
VBA_SELECT = 0
End If

End Function


Public Sub VBA_FILTRAR(planilha, tabela, campo, intervalo, mensagem)

If (Worksheets(planilha).Range(intervalo).Value = mensagem) Then

Worksheets(planilha).ListObjects(tabela).Range.AutoFilter Field:=campo

With Worksheets(planilha).Range(intervalo).Interior
.Pattern = xlSolid
.PatternThemeColor = xlThemeColorAccent1
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.149998474074526
.PatternTintAndShade = 0
End With

ElseIf (Worksheets(planilha).Range(intervalo).Value = "") Then

Worksheets(planilha).Range(intervalo).Value = mensagem

Else

Worksheets(planilha).ListObjects(tabela).Range.AutoFilter Field:=campo, Criteria1 _
:="=**" + CStr(Worksheets(planilha).Range(intervalo).Value) + "**", Operator:=xlAnd

With Worksheets(planilha).Range(intervalo).Interior
.Pattern = xlSolid
.PatternThemeColor = xlThemeColorAccent1
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With

End If

End Sub



Public Sub VBA_DINAMICA(planilha, tabela, campo, intervalo, mensagem)
'MsgBox planilha + vbCrLf + tabela + vbCrLf + campo + vbCrLf + intervalo + vbCrLf + mensagem

If (Worksheets(planilha).Range(intervalo).Value = mensagem) Then

Worksheets(planilha).PivotTables(tabela).PivotFields(campo). _
ClearAllFilters

Worksheets(planilha).PivotTables(tabela).PivotFields(campo). _
PivotFilters.Add Type:=xlCaptionBeginsWith, Value1:="?"

With Worksheets(planilha).Range(intervalo).Interior
.Pattern = xlSolid
.PatternThemeColor = xlThemeColorAccent1
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.149998474074526
.PatternTintAndShade = 0
End With

ElseIf (Worksheets(planilha).Range(intervalo).Value = "") Then

Worksheets(planilha).Range(intervalo).Value = mensagem

Else

ActiveSheet.PivotTables(tabela).PivotFields(campo). _
ClearAllFilters

ActiveSheet.PivotTables(tabela).PivotFields(campo). _
PivotFilters.Add Type:=xlCaptionContains, Value1:="*" + CStr(Worksheets(planilha).Range(intervalo).Value) + "*"

With Worksheets(planilha).Range(intervalo).Interior
.Pattern = xlSolid
.PatternThemeColor = xlThemeColorAccent1
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With

End If

End Sub


Sub ATUALIZAR1()
Plan6.PivotTables(1).PivotCache.Refresh
Plan6.Range("J12").Value = "Última atualização: " + Format(Now, "dd/mm/yy hh:mm:ss")
End Sub

Sub ATUALIZAR2()
Plan7.PivotTables(1).PivotCache.Refresh
Plan7.Range("J13").Value = "Última atualização: " + Format(Now, "dd/mm/yy hh:mm:ss")
End Sub

Sub ATUALIZAR3()
Plan8.PivotTables(1).PivotCache.Refresh
Plan8.Range("K12").Value = "Última atualização: " + Format(Now, "dd/mm/yy hh:mm:ss")
End Sub

Sub ATUALIZAR4()
Plan9.PivotTables(1).PivotCache.Refresh
Plan9.Range("E37").Value = "Última atualização: " + Format(Now, "dd/mm/yy hh:mm:ss")
End Sub


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: ERRO EM TEMPO DE EXECUÇÃO '13': Tipos incompatíveis

Mensagem por Reinaldo »

Apenas pelo código e muito difícil encontrar/visualizar o erro.
Sem saber os passos efetuados e estrutura/valores de sua planilha/aplicação, no CHUTOMETRO diria, está tentando converter para double (Cdbl) um valor nulo ou textoou para data um valor/texto incompatível com uma data
Ao ocorrer o erro verifique o valor constante nas celulas referenciadas CDbl(range_produto.Worksheet.Cells(i, b).Value)


jesuéliton
Acabou de chegar
Acabou de chegar
Mensagens: 2
Registrado em: Ter Mai 19, 2015 9:36 am

Re: ERRO EM TEMPO DE EXECUÇÃO '13': Tipos incompatíveis

Mensagem por jesuéliton »

Vou postar para dar vc dar uma olhada e entender melhor
Anexos
Cópia de Controle de Estoque Relatórios Dinâmicos .rar
Controle de Estoque
(448.62 KiB) Baixado 301 vezes


srobles
Jedi
Jedi
Mensagens: 805
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: ERRO EM TEMPO DE EXECUÇÃO '13': Tipos incompatíveis

Mensagem por srobles »

fala jesuéliton, blza cara?

Seguinte, pelo que pude notar ao analisar a planilha, na aba CADASTRO E CONTROLE sua ultima linha com dados é a 396, porém as colunas que contém fórmulas vão até a linha 1508, gerando o erro em questão, pois na função VBA_SELECT um dos dados retornados na função é a conversão cDate numa célula que está em branco.

A função VBA_SELECT tenta converter a linha data = CDate(range_produto.Worksheet.Cells(i, c).Value) (linha que contém formula na aba CADASTRO E CONTROLE, porém está em branco) e retorna o valor 00:00:00, gerando o erro 13: Tipos incompativeis.

Aqui em meus testes, ativei o modo design no editor do VB (clicando no icone de pause na janela principal), fui até a planilha CADASTRO E CONTROLE e simplesmente apaguei as formulas das linhas abaixo da linha 396 e funcionou normalmente. Outro método para evitar o erro, seria tratar o erro no código da função VBA_SELECT.

Sem mais,

[]s


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder