VB.NETでエクセルシートを別のエクセルへコピーには?


ポーちゃん  2003-11-07 19:55:12  No: 109774

VB.NETでエクセルのシートを別のエクセルファイルにコピーしようとするとエラーが発生してしまいうまく出来ません。

以下ソース

 ’エクセル宣言
   Public File2_book As Object 
   Public File1_book As Object 
   Public File1_book_sheet As Object 

   Public File2 As New Excel.Application 
   Public File2_book_sheet As Object 
   Public File1 As New Excel.Application

’エクセルオープン
   Dim sheet_name As String
   File1.Visible = True 'excel表示
   File1_book = File1.Workbooks.Open("C:******\デスクトップ\TEST1.xls")

   sheet_name = "Sheet1"
   File1_book_sheet = File1_book.Worksheets(sheet_name)
   File1_book_sheet.select()

   File2.Visible = True 'excel表示
   File2_book = File2.Workbooks.Open("C:\*****\デスクトップ\TEST2.xls")

   sheet_name = "SheetA"
   File2_book_sheet = File2.Worksheets(sheet_name)
   File2_book_sheet.select()

’シートコピー

    sheet_name = "Sheet1"
    File1_book_sheet = File1_book.Worksheets(sheet_name)
①  File1_book_sheet.Copy(after:=File2_book_sheet)
すると①のブロックで以下のメッセージが出てしまいます。

'System.Runtime.InteropServices.COMException' のハンドルされていない例外が microsoft.visualbasic.dll で発生しました。

追加情報 : Worksheet クラスの Copy メソッドが失敗しました。

①のブロックを以下のようにして自分のエクセルファイルにはコピーできます

①’File1_book_sheet.Copy()

どなたかエクセルシートを別のエクセルへコピーする方法など知っている方いらっしゃいましたら教えてください


特攻隊長まるるう  2003-11-20 20:12:02  No: 109775

Option Explicit ' すべての変数に対して、明示的な宣言を強制

    'エクセル宣言
    Public File1 As New Excel.Application
'    Public File2 As New Excel.Application ' ← Excel.Application は1つでできる
    Public File1_book As Excel.Workbook ' コピー元ファイル
    Public File2_book As Excel.Workbook ' コピー先ファイル
'    Public File1_book_sheet As Excel.Worksheet
'    Public File2_book_sheet As Excel.Worksheet
    
    Private Const UserName As String = "*****"
    Private Const UserDeskTop As String = "C:\Documents and Settings\" & UserName & "\デスクトップ\"
    Private Const File1_Name  As String = "TEST1.xls"
    Private Const File2_Name  As String = "TEST2.xls"
    Private Const Sheet1_Name  As String = "Sheet1"
    Private Const Sheet2_Name  As String = "SheetA"
    
Private Sub cmdCopy_Click()
'    Dim sheet_name As String
    
    'エクセルオープン
    Set File1 = CreateObject("Excel.Application")
    File1.Workbooks.Open UserDeskTop & File1_Name
    File1.Workbooks.Open UserDeskTop & File2_Name
    Set File1_book = File1.Workbooks(File1_Name)
    Set File2_book = File1.Workbooks(File2_Name)
    File1.Visible = True 'excel表示
   
    File1.ScreenUpdating = True ' False にすれば処理が早くなるかも?
    
    'シートコピー
    File1_book.Sheets(Sheet1_Name).Copy after:=File2_book.Sheets(Sheet2_Name)

    File1.ScreenUpdating = True ' False にしてた場合表示更新
End Sub

' デバッグしてないけど(汗)こんな感じで動かないかなぁ…?。ボタン cmdCopy を作って UserName も変更してください。


特攻隊長まるるう  2003-11-20 20:17:27  No: 109776

あ。ごめん。.NETか…VB6.0で書いちゃった(汗)Setとか要らないね。
適当に修正してくださいm(__)m


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加