Pergunte aqui
1

Formula gerada em macro retorna #NOME?

perguntadas 2020-02-22 15:48:08 +0200

imagem do gravatar de Filipe

updated 2020-02-26 14:00:18 +0200

imagem do gravatar de Schiavinatto

Estou tentando atribuir uma fórmula a uma célula através de macro.

Porém, apesar da fórmula aparecer corretamente na célula, o Calc interpreta como string, retornando o erro "#NOME?". Se apago qualquer caractere manualmente na célula e o reinsiro e em seguida aperto enter, ele interpreta como fórmula e retorna o resultado almejado.

Segue planilha:

C:\fakepath\AskLibreOffice_FórmulaRetornaNOME.ods

Segue macro adaptada:

Sub AskLibreOffice
Dim Doc As Object
Dim Sheet As Object

Doc = ThisComponent
Sheet = Doc.Sheets.getByName("Sheet1")

rem n, j e MyArray são resultados de outras macros
Dim n As Integer
Dim j As Integer

n = 2

Dim MyArray(n) As String

MyArray(0) = "String0"
MyArray(1) = "String1"
MyArray(2) = "String2"

For j = 0 to n
    Sheet.getCellByPosition(0, j).setString(MyArray(j))

    formula = "=PROCV(C" & j+1 & ";C1:D3;2;0)"

    Sheet.getCellByPosition(0, j).setFormula(formula)
Next j
End Sub

Versão: 6.4.0.3 (x64)

ID de compilação: b0a288ab3d2d4774cb44b62f04d5d28733ac6df8

Threads da CPU: 4; SO: Windows 10.0 Build 18362; Realizador da interface: padrão; VCL: win;

Local: pt-BR (pt_BR); Idioma de IU: pt-BR

Calc: threaded

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

Ola @Filipe, seja bem vindo ao Grupo.

Na formula =PROCV(A" & j & ";AA12:AE14;2;0) coloque 0 (zero no final) caso contrario é obrigatório lista estar ordenada crescente.

É possível postar um arquivo exemplo ? ( Se SIM, edite a pergunta e use o ícone clipe para anexar o arquivo )

-----------------------------------------------------------------------------

ATENÇÂO:: Para dar mais detalhes a sua pergunta, use Descrição da imagem na pergunta ou Descrição da imagem abaixo. Não use Adicionar resposta para comentário. Grato.

imagem do gravatar de SchiavinattoSchiavinatto ( 2020-02-22 16:28:07 +0200 )editar

1 Resposta

2

respondidas 2020-02-26 13:11:32 +0200

imagem do gravatar de Conrado

@Filipe, seja bem vindo.

Como estamos falando da fórmula escrita no VBA do LibreOffice, as fórmulas mesmo dentro das aspas "" devem ser escritas em inglês, neste caso VLOOKUP.

Portanto, segue macro corrigida, e com uma adaptação para sua range.

Sub AskLibreOffice
Dim Doc As Object
Dim Sheet As Object
Dim Range as String

Doc = ThisComponent
Sheet = Doc.Sheets.getByName("Sheet1")

rem n, j e MyArray são resultados de outras macros
Dim n As Integer
Dim j As Integer

n = 2
Range = "$C$1:$D$4"
Dim MyArray(n) As String

MyArray(0) = "String0"
MyArray(1) = "String1"
MyArray(2) = "String2"

For j = 0 to n
    Sheet.getCellByPosition(0, j).setString(MyArray(j))

    formula = "=VLOOKUP(C" & j+1 & ";" & Range & ";2;0)"

    Sheet.getCellByPosition(0, j).setFormula(formula)
Next j
End Sub
editar assinalar como ofensivo Excluir Link mais

Comentários

1

Fiz a modificação sugerida (troquei PROCV por VLOOKUP) e funcionou. Obrigado.

imagem do gravatar de FilipeFilipe ( 2020-02-26 13:50:15 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2020-02-22 15:48:08 +0200

Lidas: 29 vezes

Última atualização: Feb 26