使用Range时,Excel抛出HRESULT:0x800A03EC异常

时间:2018-04-12 10:46:56

标签: excel vb.net vba

大家好!我是Visual Basic和Excel的新手,所以我不知道是否有更好的方法来做我想做的事情,但这并不重要。

我正在设置格式化我的excel单元格的范围,带有一些边框和类似的东西。我不知道如何找到最后使用过的细胞,所以我想出了这个。

range = "A1:AD1"
For Each dataRow In dataTable.Rows
    rowIndex += 1
Next

我从数据表创建了Excel工作表,因此它们具有相同的列和行。我的范围是先前计算的,它取决于我在Excel工作表中有多少列(数据表/ excel列可能会根据用户输入而改变)

在计算数据表中的每一行后,我做了这个:

range = range.Substring(0, range.Length() - 1) & Convert.ToString(rowIndex)

最后一行的结果是“A1:AD413”。我在我的Excel上检查了它,最后使用过的单元格正好是 AD413

现在,当我尝试在我的范围内应用我的样式时,excel会抛出HRESULT: 0x800A03EC异常,我知道这就像“超出范围异常”。为什么excel投掷它?我该怎么解决?范围没错!

excel抛出异常的行

wSheet.Cells(range).VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter

我的代码

rowIndex = 0
For Each dr In dt.Rows
    rowIndex += 1
Next

range = range.Substring(0, range.Length() - 1) & Convert.ToString(rowIndex + 1)

wSheet.Cells(range).VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter
wSheet.Cells(range).HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft
wSheet.Cells(range).Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous

1 个答案:

答案 0 :(得分:1)

Cells()获取行和列的两个整数参数,或单个单元格地址的字符串参数。如果要定位范围,则需要使用Worksheet.Range而不是Worksheet.Cells。 Worksheet.Range可以接受开始和结束单元格地址,例如:

wSheet.Range("A1", "AD413").Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous

在您的情况下,由于您在名为range的变量中已经有字符串“A1:AD413”,您只需将单元格格式化行更改为:

wSheet.Range(range.Split(":")(0), range.Split(":")(1)).Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous