Jump to content
Ricardo_Ruivo

Erro Type mismatch em ciclo IF

Recommended Posts

Ricardo_Ruivo

Boa noite,

Tenho um ciclo For no qual percorro as várias posições de diversos vectores.

Tive o cuidado de definir os seguintes vectores como string:

vector_time_production()

vector_downtime()

vector_produção()

vector_objectivo()

vector_defeito()

Quando ele entra no ciclo IF e os vectores para a posição i não estão preenchidos, ou seja, ="" dá erro Type mismatch.

O que eu pretendo é efectuar os cálculos só quando o vector está preenchido com um valor.

For i = 0 To 7
If vector_time_production(i) And vector_downtime(i) And vector_produção(i) And vector_objectivo(i) And vector_defeito(i) <> "" Then
c = c + 1
ReDim Preserve vector_disponibilidade(c - 1)
ReDim Preserve vector_performance(c - 1)
ReDim Preserve vector_quality(c - 1)
ReDim Preserve vector_oee(c - 1)
vector_disponibilidade(c - 1) = (vector_time_production(i) - vector_downtime(i)) / vector_time_production(i)
vector_performance(c - 1) = (vector_produção(i) / (vector_time_production(i) - vector_downtime(i))) * (vector_objectivo(i) / 60)
vector_quality(c - 1) = (vector_produção(i) - vector_defeito(i)) / (vector_produção(i))
vector_oee(c - 1) = vector_disponibilidade(c - 1) * vector_performance(c - 1) * vector_quality(c - 1)
Range("H" & 7 + i).Value = vector_disponibilidade(c - 1)
Range("I" & 7 + i).Value = vector_performance(c - 1)
Range("J" & 7 + i).Value = vector_quality(c - 1)
Range("K" & 7 + i).Value = vector_oee(c - 1)
Else
MsgBox ("nao tem nada")
End If
Next

Não percebo o motivo de dar este erro, dado que estou a trabalhar anteriormente a este ciclo For com os mesmos vectores que têm posições ="", e não dá erro.

Obrigado pela vossa ajuda. :)

Share this post


Link to post
Share on other sites
HIT_Braga

Boas.

Não sou muito expert mas vou dando uns toques.

Não percebi muito bem porque usas os

ReDim Preserve vector_disponibilidade(c - 1)
ReDim Preserve vector_performance(c - 1)
ReDim Preserve vector_quality(c - 1)
ReDim Preserve vector_oee(c - 1)

Depois quando colocas

c=c+1

não tens a variavel inicializada(acho eu).

Já fizes-te uns breaks para ver se chega a entrar no ciclo e onde pára? Provavelmente uma das contas que fazes dá uma coisa esquesita e dai o type mismatch.

Sds,

HIT


" Elogios não me elevam, ofensas não me rebaixam, sou o que sou e não o que acham! "

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

Que raio de if é esse??

Não lhe dás nenhum valor a comparar, é lógico que ele de erro

If vector_time_production(i) <> "" And vector_downtime(i) <> "" And vector_produção(i) <> "" And vector_objectivo(i) <> "" And vector_defeito(i) <> "" Then


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
Ricardo_Ruivo

Boas

Que raio de if é esse??

Não lhe dás nenhum valor a comparar, é lógico que ele de erro

If vector_time_production(i) <> "" And vector_downtime(i) <> "" And vector_produção(i) <> "" And vector_objectivo(i) <> "" And vector_defeito(i) <> "" Then

Boas,

neste caso só entra no ciclo IF para efectuar os cálculos, se os vectores naquela posição forem diferentes de nada, ou seja, se estiverem preenchidos.

Penso que não seja aí o erro, porque nas posições em que os vectores estão preenchidos ele executa o ciclo IF sem problemas.

Share this post


Link to post
Share on other sites
Ricardo_Ruivo

Boas.

Não sou muito expert mas vou dando uns toques.

Não percebi muito bem porque usas os

ReDim Preserve vector_disponibilidade(c - 1)
ReDim Preserve vector_performance(c - 1)
ReDim Preserve vector_quality(c - 1)
ReDim Preserve vector_oee(c - 1)

Depois quando colocas

c=c+1

não tens a variavel inicializada(acho eu).

Já fizes-te uns breaks para ver se chega a entrar no ciclo e onde pára? Provavelmente uma das contas que fazes dá uma coisa esquesita e dai o type mismatch.

Sds,

HIT

Boas,

no meu caso pretendo guardar os resultados de cada parâmetro em 3 vectores, como não sei quantas posições tenho preenchidas nos vectores que contêm os dados  à medida que vai calculando os parâmetros redimensiona o vector preservando os valores já guardados.

A variável c já a tenho dimensionada anteriormente como integer, serve como um contador para contar o n.º de posições preenchidas nos vectores de dados.

Já fiz os debug passo a passo e ele executa o ciclo IF sem problemas quando os vectores estão preenchidos para determinada posição.

Share this post


Link to post
Share on other sites
FreiNando

O erro Type Mismatch significa que não é possivel converter String vazia ("")  para Boolean.

Usa uma condição como o Andrepereira9 te indicou.

Nota que a conversão implicita de uma string para boolean só é possivel quando a string contiver um valor númerico: 0 = Falso; <>0 = Verdadeiro


O caminho mais curto para conseguir fazer muitas coisas é fazer uma de cada vez. Samuel Smiles

Share this post


Link to post
Share on other sites
Ricardo_Ruivo

O erro Type Mismatch significa que não é possivel converter String vazia ("")  para Boolean.

Usa uma condição como o Andrepereira9 te indicou.

Nota que a conversão implicita de uma string para boolean só é possivel quando a string contiver um valor númerico: 0 = Falso; <>0 = Verdadeiro

Muito obrigado pela explicação.

Assim já funciona. ;)

Share this post


Link to post
Share on other sites
Ricardo_Ruivo

Boas

Que raio de if é esse??

Não lhe dás nenhum valor a comparar, é lógico que ele de erro

If vector_time_production(i) <> "" And vector_downtime(i) <> "" And vector_produção(i) <> "" And vector_objectivo(i) <> "" And vector_defeito(i) <> "" Then

Só tinha colocado a condição no último vector, assim já funciona.

Obrigado pela ajuda. ;)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.