Estoy usando una macro vba para automatizar parte de una hoja de cálculo de Excel. La siguiente línea sigue dándome un error de tiempo de ejecución 1004# error de aplicación u objeto definido
Sheets("Material").Last.Offset(0, 1).Value = "=SUMIF(MainTable[0],AG12,MainTable[Cost])"
Usando relojes, sé que el lado izquierdo de la ecuación hace referencia a la celda adecuada. Supongo que el error se encuentra en la cadena de la derecha que se escribe en la celda. Estoy pensando posiblemente en las referencias de mi tabla. El resto de las fórmulas como cadenas se escriben bien y no contienen referencias a tablas.
Respuesta1
Supuse que el error estaba dentro del código porque cuando recibí el error de tiempo de ejecución, no hubo salida a la celda dada. En realidad, el problema ocurre si se escribieran fórmulas en una celda y se generaría esa ventana emergente que dice "Hemos encontrado un problema con esta fórmula...". ¿No es lo mismo que #NOMBRE?, #¡VALOR! , #N/A errores de tipo. En mi caso, mi código estableció un rango en una tabla, llamada MainTable y uno de los encabezados de las columnas era Costo efectivo. El código establece una fórmula como una cadena que hace referencia a MainTable[Costo], que debería haber sido MainTable[Costo efectivo].
El vba generará un error de tiempo de ejecución, el sub se detendrá y la cadena del problema nunca se enviará a la celda. El siguiente código detendrá un sub. (el "(" adicional generará un error de fórmula en la ventana emergente)
Range("A1").Value = "=Sum((B2:B4)"
El siguiente código funciona de forma ininterrumpida aunque proporciona un #¿NOMBRE? error en la celda A1.
Range("A1").Value = "=Sum(PotatoSalad)"
También hice una prueba rápida con una serie de cadenas. Almacenar fórmulas en cadenas dentro de una matriz parece evitar el problema de la interrupción del código, ya que las fórmulas no se evaluarán hasta que se actualicen. Esta pregunta entra en más detalles sobre lo que sucede cuando se usa una matriz para volcar fórmulas en celdas. En pocas palabras, el uso de una matriz variante hará que las fórmulas se evalúen y detengan el sub.https://stackoverflow.com/questions/19238844/strange-behavior-when-assigning-a-vba-array-to-formulas-of-an-excel-range
El siguiente código funcionará hasta que se obligue a recalcular la celda A1.
Dim MyArray(0 to 0) as String MyArray(0) = "=Sum((B2:B4)" Range("A1").Value = MyArray()
Pasar la misma matriz como variante generará un error de tiempo de ejecución.