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()
どなたかエクセルシートを別のエクセルへコピーする方法など知っている方いらっしゃいましたら教えてください
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 も変更してください。
あ。ごめん。.NETか…VB6.0で書いちゃった(汗)Setとか要らないね。
適当に修正してくださいm(__)m
ツイート | ![]() |