Notifications
Clear all

Tipos incompatíveis

3 Posts
2 Usuários
0 Reactions
812 Visualizações
(@rodrigod)
Posts: 0
New Member
Topic starter
 

Bom dia,
Tenho uma variável declarada da seguinte forma:

Dim PercDeployed(-11 To 92) as Double

Meu código está dando erro de tipo incompatível, pois em algum lugar que ainda não encontrei, a variável PercDeployed está recebendo string e não números.
Exemplo:

PercDeployed(1) está recebendo "Jan"
PercDeployed(2) = "Feb"
.
.
.
PercDeployed(12) = "Dec"

E a partir do PercDeployed(13) a variável recebe apenas números e o código segue sem problemas.

Estou tentando achar onde isto está acontecendo e estou com dúvidas sobre o que uma linha do código está fazendo. Segue a linha:

PercDeployed(k + ((j - 1) * 12)) = .Offset(k + 5, j + 1).Value

Alguém poderia me explicar o que esta linha faz, por favor? Ela está "pegando" o valor de alguma célula da planilha e armazenando em PercDeployed?

Obs.: k e j são valores inteiros dentro de um for.

Desde já, agradeço se puderem me ajudar

 
Postado : 18/12/2014 7:58 am
(@gtsalikis)
Posts: 2373
Noble Member
 

PercDeployed(k + ((j - 1) * 12)) = .Offset(k + 5, j + 1).Value

Alguém poderia me explicar o que esta linha faz, por favor? Ela está "pegando" o valor de alguma célula da planilha e armazenando em PercDeployed?

Exatamente isso,

k e j, como vc já disse, são variáveis.

Vamos direto ao OFFSET Este é o mesmo que a função DESLOC. Ou seja, ela parte de uma célula, e pula para outra.

No caso, suponha que a célula seja A1.
Suponha que, no loop for next, o valor de k seja 8 e de j seja 3

Então, ela vai deslocar a célula A1, em linhas k + 5, ou seja, 8 + 5 = 13, e vai parar na célula A14 (1 + 13 = 14).
Vai, ao mesmo tempo, deslocar em colunas j + 1, ou seja, 3 + 1 = 4, e vai parar na célula E14 (A + 4 colunas = E).

Há um detalhe no teu comando, que é o ponto antes de Offset

PercDeployed(k + ((j - 1) * 12)) = .Offset(k + 5, j + 1).Value

Ele, provavelmente, indica que esse procedimento está dentro de um bloco With.

É este bloco que deve indicar qual seria a referência inicial (que aqui eu usei como exemplo, a célula A1.

Deve ser algo como With Range("A1"")
PercDeployed(k + ((j - 1) * 12)) = .Offset(k + 5, j + 1).Value
End with.

Com isso, creio que vc pode localizar os valores que estão dando erro.

 
Postado : 18/12/2014 8:09 am
(@rodrigod)
Posts: 0
New Member
Topic starter
 

Gilmar, enquanto esperava por uma resposta aqui resolvi modificar os campos nas planilhas onde estavam "Jan, Feb..., Dec", e fui rodando a macro a cada modificação e acabei descobrindo onde estava ocorrendo a captura destes dados.

Obrigado pela explicação, realmente é aquilo que você disse e estava com um With Range("A1:Z80") mesmo.

Valeu! :D

 
Postado : 18/12/2014 8:22 am