使用Vb.Net Com加载项将多行插入Excel工作表

时间:2013-03-22 22:57:03

标签: vb.net excel-2010 excel-addins

确定Excel工作表插入行的行索引后,我想在使用VB.net后插入16行。我正在构建一个COM加载项,如果它改变任何东西。在VBA中,我会通过以下方式执行此操作:

 ...
 Dim InsertRow as String
 ...
 Dim ContractForm As Worksheet
 Set ContractForm = Sheets("Lab Contracts")
   ContractForm.Select
   ContractForm.Rows(InsertRow & ":" & InsertRow).Select
   Range(Selection, Selection.Offset(8, 0)).EntireRow.Insert

我似乎无法在VB.net中找到这样做的方法。我试过了: [对于(InsertRow“:”InsertRow)的所有实例,我也尝试过(“47:47”)和(InsertRow),如果语法不正确(反之亦然)。

  ...
  ContractSheet.Rows(InsertRow ":" InsertRow).Select()
  ContractSheet.Rows.Insert()
  ...

和       ContractSheet.Rows( “47:47”),选择()       ContractSheet.Range( “47:47”)。EntireRow.Insert() 和       ContractSheet.Rows(的InsertRow)。选择()       对于n = 1到16          ContractSheet.Range(InsertRow&“:”& InsertRow).rows.insert(xlDown)       下一个 和       ContractSheet.Rows(的InsertRow)。选择()       对于n = 1到16          ContractSheet.Selection.Insert()       下一步

我可以继续,但我不认为这会有所帮助(因为我在问这里之前一直试图在一个问题上花了一个多小时)。根据它的运行方式,我得到以下错误之一:

HResult:0x800A03EC;或

HResult 0x80020005;或

无法从表格中筛选对象。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

最好avoid Select statements,除非你必须,而你不必在这里。所以,只是为了重新奠定基础,你应该在VBA中做到:

Sub test()
Dim InsertRow As Long
Dim ContractForm As Worksheet

InsertRow = "5"
Set ContractForm = Sheets("Lab Contracts")
ContractForm.Rows(InsertRow).Resize(8).Insert xlShiftDown
End Sub

在VB.Net中它几乎是一样的。 (我想在VB或VBA中不需要xlShiftDown参数):

Imports Microsoft.Office.Interop

Sub test()
    Dim ContractForm As Excel.Worksheet
    Dim InsertRow As Int32

    ContractForm = Application.ActiveWorkbook.Worksheets("Lab Contracts")
    InsertRow = 5
    ContractForm.Rows(InsertRow).Resize(8).insert() '(Excel.XlInsertShiftDirection.xlShiftDown)
End Sub