次のコードを複数のスレッド (ワークブックのシートごとに 1 つ) に分割しようとしています。400,000 を超える行をまとめて処理すると、1 つのスレッドでかなりの時間がかかります。分割すると、速度が向上することを願っています。
Excel 相互運用機能を使用してからしばらく経ちましたが、次のコードが機能するはずです。これを各スレッドで実行したい:
Dim CurrentRow As String = Nothing
For i As Integer = 1 To sheet.Rows.Count
If Not String.IsNullOrEmpty(sheet.Range("A" & i).ToString) Then
CurrentRow = _
sheet.Range("H" & i).Value.ToString.Trim & "," & _
sheet.Range("A" & i).Value.ToString.Trim & "," & _
sheet.Range("B" & i).Value.ToString.Trim & "," & _
sheet.Range("C" & i).Value.ToString.Trim & "," & _
sheet.Range("D" & i).Value.ToString.Trim & "," & _
sheet.Range("E" & i).Value.ToString.Trim & "," & _
sheet.Range("F" & i).Value.ToString.Trim & "," & _
sheet.Range("G" & i).Value.ToString.Trim & "," & _
sheet.Range("I" & i).Value.ToString.Trim & "," & _
sheet.Range("J" & i).Value.ToString.Trim & "," & _
sheet.Range("K" & i).Value.ToString.Trim & ","
My.Computer.FileSystem.WriteAllText("D:\Lists\" & sheet.Name & ".txt", _
CurrentRow & vbCrLf, True)
ItemCount = ItemCount + 1
ElapsedTime = Now().Subtract(StartTime)
Me.Invoke(Me.AddItemDelegate, New Object() {sheet.Name, ElapsedTime})
Else
ItemCount = 0
Exit For
End If
残念ながら、if ステートメントで次のエラーが発生します。
System.Runtime.InteropServices.ComException (0x800401A8): Microsoft.Office.Interop.Excel._Worksheet.get_Range (Object Cell1, Object Cell2) での HRESULT 0x800401A8 からの例外
ここで何が間違っているのかわかりません。誰か助けてもらえますか?
ありがとう!
**編集**
ループは機能しているようですが、1回の反復のみです。次の実行に移ろうとすると、例外がスローされます。