Erro ao enviar uma string para a célula

Erro ao enviar uma string para a célula

Estou usando uma macro vba para automatizar parte de uma planilha do Excel. A linha a seguir continua me dando um erro de tempo de execução 1004 # erro de aplicativo ou objeto definido

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

Usando relógios, sei que o lado esquerdo da equação faz referência à célula adequada. Presumo que o erro esteja na string à direita que está sendo escrita na célula - estou pensando possivelmente nas referências da minha tabela? O resto das fórmulas como strings são escritas corretamente e não contêm referências de tabela.

Responder1

Presumi que o erro estava no código porque, quando recebi o erro de tempo de execução, não houve saída para a célula especificada. Na verdade, o problema ocorre se uma fórmula for gravada em uma célula e gerar aquela janela pop-up que diz "Encontramos um problema com esta fórmula..." Não é o mesmo que #NOME?, #VALOR! , #N/D erros de tipo. No meu caso, meu código definiu um intervalo em uma tabela chamada MainTable e um dos cabeçalhos da coluna era Custo Efetivo. O código definiu uma fórmula como uma string referenciando MainTable[Cost], que deveria ser MainTable[Custo Efetivo].

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

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

O código a seguir funciona ininterruptamente, embora forneça um #NAME? erro na célula A1.

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

Também fiz um teste rápido com uma série de strings. Armazenar fórmulas em strings dentro de uma matriz parece contornar o problema de interrupção do código, pois as fórmulas não serão avaliadas até serem atualizadas. Esta questão entra em mais detalhes sobre o que acontece ao usar uma matriz para despejar fórmulas nas células - Resumindo, usar uma matriz variante fará com que as fórmulas avaliem e interrompam a sub.https://stackoverflow.com/questions/19238844/strange-behavior-when-assigning-a-vba-array-to-formulas-of-an-excel-range

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 o mesmo array como uma variante gerará um erro de tempo de execução.

informação relacionada