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 の場合)。 Range(InsertRow & ":" & InsertRow).rows.insert(xlDown) Next および ContractSheet.Rows(InsertRow).Select() For n = 1 to 16 ContractSheet.Selection.Insert() Next

続けることもできますが、それが役立つとは思いません (ここで質問する前に、常に 1 つの問題について 1 時間以上試していたため)。状況に応じて、次のいずれかのエラーが発生します。

HResult: 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 に答える