2013-03-22 133 views
0

爲Excel工作表的InsertRow確定行索引後,我想在使用VB.net之後插入16行。如果改變了任何東西,我正在構建一個COM加載項。在VBA中,我會這樣做:使用Vb.Net Com插件將多行插入到Excel工作表中

... 
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() Next

我可以繼續,但我不認爲這會有所幫助(因爲我在這裏問一個問題之前一直在嘗試超過一個小時)。取決於它如何去,我得到以下錯誤之一:

HResult:0x800A03EC;或

HResult 0x80020005;或

無法從工作表中篩選對象。

任何幫助將不勝感激。

回答

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這幾乎是相同的。 (我猜xlShiftDown參數在VB或VBA中是不需要的):

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 
+0

我剛剛注意到你說了16行。我的代碼有八個。 – 2013-03-23 03:35:43

+0

非常感謝,非常感謝!我谷歌周圍,並閱讀MSDN上的行,並以某種方式從來沒有看到調整。我不知道我錯過了那一個。我從我自己的嘗試和錯誤中想出來避免選擇,我只是不知道在這種情況下是可能的。 – 2013-03-23 04:34:29

相關問題