0

在确定 Excel 工作表 InsertRow 的行索引后,我想使用 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").Select() ContractSheet.Range("47:47").EntireRow.Insert() 和 ContractSheet.Rows(InsertRow).Select() 对于 n = 1 到 16 ContractSheet。 Range(InsertRow & ":" & InsertRow).rows.insert(xlDown) Next and ContractSheet.Rows(InsertRow).Select() For n = 1 To 16 ContractSheet.Selection.Insert() Next

我可以继续,但我认为这不会有帮助(因为我一直在一个问题上尝试了一个多小时,然后才在这里提问)。根据它的进展情况,我会收到以下错误之一:

H结果:0x800A03EC;或者

HResult 0x80020005; 或者

无法将对象从工作表中筛选出来。

任何帮助将不胜感激。

4

1 回答 1

1

最好避免使用 Select 语句,除非您必须且您不必在这里。所以,只是为了重新奠定基础,在 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
于 2013-03-23T02:48:23.407 回答