【问题标题】:Excel throws HRESULT: 0x800A03EC exception when using RangeExcel 在使用 Range 时抛出 HRESULT: 0x800A03EC 异常
【发布时间】:2018-09-22 11:45:30
【问题描述】:

大家好!我真的是 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: 0x800A03ECexception,我知道这类似于 “超出范围异常”。为什么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

【问题讨论】:

  • 如果您要查找写入的单元格的范围,Excel 工作表有一个名为 UsedRange() 的属性,它将为您提供其中包含值的所有单元格,即wSheet.UsedRange.VerticalAlignment = ...。至于为什么会出现错误,您检查过range 中的值吗?在接下来的几行尝试使用它之前,我很想知道它持有什么字符串
  • Cells 属性采用 (rowNumber, columnNumber) 参数,如 Cells(1,1) 而不是 Cells("A1:B2")。在wSheet 对象上使用Range 属性。
  • @TnTinMn Cells(range) 在将range 字符串修改为"A1:AD413" 之前完美运行
  • @soohoonigan rangerange = range.Substring(0, range.Length() - 1) & Convert.ToString(rowIndex + 1) 之前持有字符串 "A1:AD1"
  • @soohoonigan 使用 UsedRange btw 解决。但谜团仍在:o

标签: excel vb.net vba


【解决方案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

【讨论】:

  • 我很确定wSheet.Cells(range) 工作正常。大概是我记错了。谢谢你的帮助。它有效!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 2023-04-01
  • 2011-03-02
  • 1970-01-01
相关资源
最近更新 更多