确定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;或
无法从表格中筛选对象。
非常感谢任何帮助。
答案 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