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!
Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
FormulaR1C1
Re: FormulaR1C1
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:
Outra forma seria utilizar o formato brasileiro:
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
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]"
Código: Selecionar todos
Dim K As Double
K = 1.5
ActiveCell.FormulaR1C1Local = "=" & K & "*LC[1]"
Acredito que seja isso.
Abraço