无法将公式分配给Excel中的单元格区域

在项目中的其他人的代码,我正在修复。

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

FormulaMatrix(i, j)总是一个String值。 无论随机/testing的价值,我尝试,成功地分配,除非它是一个公式,例如。

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

如果我在公式的开头删除了=符号,它会被正确地赋值,但是这样做没用,因为它不是公式。

@Units@SalesAmount@DiscountAmount是引用/列的名称。

所以,当分配公式时,我得到一个exceptionHRESULT: 0x800A03EC 。 我查了一下这个答案 ,以得到解释,并按照其中的一些说明。 我确定我的问题如下: 问题发生在一个单元格中input的函数,它试图更新另一个单元格。

也检出了这个职位。 我尝试了很大的不同(比如把公式没有=然后再跑一遍,把等号),但同样的问题。

我对如何解决这个问题毫无头绪。

错误可能来自您当前的数据,分别是工作表的布局。 我build议你在分配公式之前检查listO.Range(i, j).FormulaR1C1里面的listO.Range(i, j).FormulaR1C1

我有一个范围内已经有错误的数据,然后奇怪,我不知道为什么,我不能指定新的公式。

如果是这种情况 – 尝试清除范围的值,然后分配公式:

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

.formulalocal作品! (而.formula.value.formular1c1不。)

我刚刚开始使用VB.NET,出现了一个非常类似的问题。 这是我最初的简化数据( Sheet1 Table1 ):

之前

然后在应用下面的代码后,我有这样的:

后

整个代码的forms:

 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帮助build立了这个代码,因为他拥有这个真棒网站: http : //www.siddharthrout.com/

问题可能在于你的公式。 尝试这个-

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

如果这不起作用,我会尝试使用.formula方法,而不是.formulaR1C1 ..是否有任何理由特别是你使用R1C1的引用?