Excel VBA - Função definida pelo usuário para transformar string em fórmula

2

Estou procurando algo semelhante à solução postada aqui:

Função do Excel que avalia um string como se fosse uma fórmula?

O problema é que isso não parece funcionar com uma função lá.

Esta é a função nesse encadeamento como submetida por chris neilsen:

Function ev(r As Range) As Variant
    ev = Evaluate(r.Value)
End Function

Aqui está um exemplo de uma string que gostaria de transformar em uma fórmula:

=(INDEX(DataV,1,4)/INDEX(DataV,2,4))*100

DataV é um nome dentro da planilha.

Eu não sei como fazer isso, talvez eu descubra, agora parece que eu provavelmente não vou, a menos que eu leia muito mais sobre o VBA.

Qualquer ajuda é apreciada.

    
por LonelyKnight 29.08.2014 / 18:31

1 resposta

1

Pensei em compartilhar a solução que acabei fazendo, já que ela faz o trabalho. Não foi possível fazer uma função definida pelo usuário que faz isso, não parece ser possível, então fui com uma macro básica.

Sub Formulas()
Dim rng As Range, cell As Range, y As Integer, o As Integer
    y = Range("B1").Value
    o = (y - 3) * 2
Set rng = Range(Cells(3, 4), Cells(3, y))

On Error GoTo ErrHandler
For Each cell In rng
    cell.Activate
    cell.Formula = ActiveCell.Offset(0, o).Value
Next cell
Exit Sub

ErrHandler:
    Msg = "Invalid formula for this Indicator, please re-check in sheet IndDef"
    MsgBox Msg, , "Error!", Err.HelpFile, Err.HelpContext

End Sub

Este foi escrito para ser usado com um botão, se você quiser uma macro de execução automática em busca deste site para dicas sobre o uso de intersecção.

A parte importante para o problema é a questão:

cell.Activate
cell.Formula = ActiveCell.Offset(0, o).Value

Basta definir a fórmula da célula como o valor daquela com a string

Range1.Formula = Range2.Value

No meu caso, eu queria que fosse executado através de um monte de células, daí a necessidade de ativar o equivalente a Range1 e usar ActiveCell.Offset para definir o equivalente a Range2

Funciona com qualquer string, mas as funções precisam ser escritas em inglês. Espero que isso ajude.

    
por 19.10.2014 / 16:47