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

FormulaR1C1

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
fabricio
Acabou de chegar
Acabou de chegar
Mensagens: 3
Registrado em: Qua Mai 22, 2013 12:57 pm

FormulaR1C1

Mensagem por fabricio »

Oi, pessoal. Bom dia.
Alguém sabe dizer porque fórmulas no estilo R1C1 dão erro quando o valor da variável é decimal.
Por exemplo:
Essa linha NÃO dá erro! Ela coloca na célula ativa 1,5 vezes o valor da célula da coluna à direita e na mesma linha
ActiveCell.FormulaR1C1 = "=1.5*RC[1]"
´
Agora digamos que nem sempre o produto será por 1,5 e sim por "K". Então escrevo algo tipo

K = 1.5
ActiveCell.FormulaR1C1 = "=" & K & "*RC[1]" '("&" é o 'e' comercial. Não sei por que tá assim. É o operador de concatenação)

Essa formula não funciona. Porém se K for um valor inteiro, por exemplo 15, não tem problemas!

Bem K não está declarado como Integer. Já o deixei sem declarar. Já o declarei como Double. Já o declarei explicitamente como Variant (o que é o mesmo de declará-lo e não definir o tipo: Dim K) e não tem jeito.

Na minha aplicação há vários coeficientes que mudam a cada iteração. Fiz uma função que vai multiplicando K por 10 até ele deixar de ser decimal. Essa função retorna qual foi a potência de 10 que tive que usar para isso. Daí coloco esse valor numa variável, digamos, Div_K e uso na fórmula algo do tipo:

ActiveCell.FormulaR1C1 = "=(" & K & "/" & Div_K & ")*RC[1]"

Meu problema resolvi dessa forma, mas gostaria de saber porque dá erro com o que seria a construção usual!

Grato!


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.


JValq
Manda bem
Manda bem
Mensagens: 101
Registrado em: Qua Abr 27, 2011 7:34 pm
Localização: São Paulo/SP

Re: FormulaR1C1

Mensagem por JValq »

Boa noite,

Provavelmente o erro está sendo causado por uma mistura de formatos brasileiro e americano.
Em VBA escrevemos 1.5 que é o formato americano equivalente ao brasileiro 1,5.
Quando o Excel processa a informação a variável K recebe 1,5 em vez de 1.5, pois estamos usando um sistema operacional com o formato brasileiro que adota a vírgula como separador decimal.
Portanto a sua fórmula fica assim: "=1,5*RC[1]"
O problema é que 1,5 é formato brasileiro e RC[1] é americano (R = Row).
A sua fórmula teria que ser no formato americano, "1.5*RC[1]" ou no brasileiro, "1,5*LC[1]" (L = Linha).
O código abaixo funciona por que a variável K foi definida como string e, portanto, mantém o ponto:

Código: Selecionar todos

Dim K As String

K = "1.5"
ActiveCell.FormulaR1C1 = "=" & K & "*RC[1]"
Outra forma seria utilizar o formato brasileiro:

Código: Selecionar todos

Dim K As Double

K = 1.5
ActiveCell.FormulaR1C1Local = "=" & K & "*LC[1]"
Para o seu código, que está dando erro, funcionar é necessário alterar o separador decimal para ponto no Painel de Controle.
Acredito que seja isso.

Abraço


Responder