Erro ao enviar uma string para o celular

0

Estou usando uma macro vba para automatizar parte de uma planilha do Excel. A linha a seguir continua me dando um erro de runtime 1004 # application ou object defined error

Sheets("Material").Last.Offset(0, 1).Value = "=SUMIF(MainTable[0],AG12,MainTable[Cost])"

Usando os relógios, sei que o lado esquerdo da equação está referenciando a célula correta. Eu estou supondo que o erro está dentro da cadeia do lado direito que está sendo escrita na célula - estou pensando, possivelmente, com minhas referências de tabela? O restante das fórmulas como strings todas escrevem bem e não contêm referências de tabela.

    
por Riggeot 10.07.2014 / 16:41

1 resposta

0

Assumi que o erro estava dentro do código porque, quando recebi o erro de tempo de execução, não havia saída para a célula especificada. O problema realmente ocorre se uma fórmula fosse escrita em uma célula e gerasse a janela pop-up que diz "Encontramos um problema com essa fórmula ..." Não é o mesmo que #NAME ?, #VALUE! , # N / A erros de tipo. No meu caso, meu código definiu um intervalo em uma tabela, chamado MainTable e um dos cabeçalhos de coluna foi Effective Cost. O código define uma fórmula como uma string referenciando MainTable [Cost], que deveria ter sido MainTable [Effective Cost].

O vba gerará um erro de tempo de execução, o sub será interrompido e a string do problema nunca será enviada para a célula. O código a seguir irá parar um sub. (o extra "(" dará o erro de fórmula da janela pop-up)

Range("A1").Value = "=Sum((B2:B4)"

O código a seguir funciona ininterruptamente, apesar de dar um erro # NOME? erro na célula A1.

Range("A1").Value = "=Sum(PotatoSalad)"

Eu também fiz um teste rápido com uma série de strings. Armazenar fórmulas em cadeias de caracteres dentro de uma matriz parece contornar a questão do código ser interrompido, pois as fórmulas não serão avaliadas até serem atualizadas. Esta questão vai para mais detalhes sobre o que acontece quando se usa uma matriz para despejar fórmulas em células - Longa história curta usando uma matriz variante fará com que as fórmulas para avaliar e parar o sub. link

O código a seguir funcionará até que a célula A1 seja forçada a recalcular.

Dim MyArray(0 to 0) as String MyArray(0) = "=Sum((B2:B4)" Range("A1").Value = MyArray()

Passar a mesma matriz como uma variante gerará um erro de tempo de execução.

    
por 11.07.2014 / 21:21