vincular valor una referencia posicion otro otra libro hojas hoja hacer funcion enlazar diferentes desde dependiendo datos dar como celdas celda cambiar activa vb.net excel excel-formula interop excel-2010

vb.net - valor - No se puede asignar fórmula al rango de celdas en Excel



hacer referencia a una celda de otro libro excel (3)

El problema podría ser con tu fórmula. Prueba esto-

=IF(LEN([@Units])>0,[@SalesAmount]-[@DiscountAmount],0)

Si esto no funciona, trataría de usar el método .formula en lugar de .formulaR1C1 ... ¿Hay alguna razón en particular por la que esté utilizando referencias R1C1?

El código de otra persona en el proyecto, que estoy tratando de arreglar.

listO.Range(i, j).FormulaR1C1 = FormulaMatrix(i, j)

donde FormulaMatrix(i, j) es siempre un valor String . Cualquiera que sea el valor aleatorio / de prueba, intento con, se está asignando con éxito, excepto cuando es una fórmula, por ej.

=IF(LENGTH([@Units])>0;[@SalesAmount]-[@DiscountAmount]0)

Si elimino el signo = al principio de la fórmula, se asigna correctamente, pero luego es inútil, porque no es una fórmula.

@Units , @SalesAmount , @DiscountAmount son referencias / nombres de columnas.

Entonces, cuando asigno una fórmula, obtengo una excepción HRESULT: 0x800A03EC . Levanté la vista en esta respuesta para obtener una explicación y seguí algunas de las instrucciones allí. Determiné que mi problema es el siguiente: el problema ocurre debido a una función ingresada en una celda y está tratando de actualizar otra celda.

Revisado también esta publicación. Intenté bastante diferente (como poner solo las fórmulas sin = y luego volver a correr y poner los signos iguales), pero el mismo problema.

No tengo ni idea de cómo abordar esto.


El error puede provenir de sus datos actuales, respectivamente, del diseño de la hoja. Le sugiero que compruebe qué hay dentro de listO.Range(i, j).FormulaR1C1 antes de asignar la fórmula.

He tenido un caso en el que el rango ya tiene datos erróneos en el interior y, curiosamente, no sé por qué, no puedo asignar la nueva fórmula.

Si ese es el caso, intente borrar el valor del rango y luego asignar la fórmula:

listO.Range(i, j).FormulaR1C1 = "" listO.Range(i, j).FormulaR1C1 = FormulaMatrix(i, j)


.formulalocal funciona! (Mientras que .formula , .value y .formular1c1 no).

Empecé a trabajar con VB.NET y tuve un problema muy similar. Esta fue mi información simplificada al principio ( Table1 en la Sheet1 ):

Luego, después de aplicar el siguiente código, tuve esto:

El código completo para el formulario:

Imports Excel = Microsoft.Office.Interop.Excel Public Class Form1 ''~~> Define your Excel Objects Dim xlApp As New Excel.Application Dim xlWorkBook As Excel.Workbook Dim xlWorkSheet As Excel.Worksheet Dim strAddress As String = "C:/Temp/SampleNew.xlsx" Dim list1 As Object Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click ''~~> Add a New Workbook (IGNORING THE TWO DOT RULE) xlWorkBook = xlApp.Workbooks.Open(strAddress) ''~~> Display Excel xlApp.Visible = True ''~~> Set the relevant sheet that we want to work with xlWorkSheet = xlWorkBook.Sheets("Sheet1") With xlWorkSheet ''~~> Change the range into a tabular format list1 = .ListObjects("Table1") End With list1.range(2, 4).formulalocal = "=IF(LEN([@Month])>5;[@Income]-[@MoneySpent];0)" ''~~> Save the file xlApp.DisplayAlerts = False xlWorkBook.SaveAs(Filename:=strAddress, FileFormat:=51) xlApp.DisplayAlerts = True ''~~> Close the File xlWorkBook.Close() ''~~> Quit the Excel Application xlApp.Quit() ''~~> Clean Up releaseObject(xlApp) releaseObject(xlWorkBook) End Sub ''~~> Release the objects Private Sub releaseObject(ByVal obj As Object) Try System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) obj = Nothing Catch ex As Exception obj = Nothing Finally GC.Collect() End Try End Sub End Class

@Siddharth Rout ayudó mucho a construir este código, ya que posee este increíble sitio: http://www.siddharthrout.com/