- ベストアンサー
【エクセルVBA】別のファイルに名前の定義もコピーして貼り付け
- エクセルファイル、book1,book2があります。book1のA1-A10には日付という名前の定義がしてあります。book1にあるコマンドボタンを押すとこのA1-A10をコピーして、book2を開き、book2のA1セルに貼り付けるようにします。このあとbook2のA1-A10をドラッグしたとき日付という名前の定義がしてあるようにしたいです。
- 普通に貼り付けたら名前の定義はされてないと思いますが、形式を選択して貼り付けのXMLスプレッドシートで貼り付けると名前の定義もコピーして貼り付けられたので、それを取り入れてコードを入力したのですがうまくいきません。
- 実行時エラー1004 WorksheetクラスのPasteSpecialメソッドが失敗しました。どこをどう訂正したらよいか、あるいは他のうまくいくコードをご存知でしたら教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>形式を選択して貼り付けのXMLスプレッドシートで貼り付けると >名前の定義もコピーして貼り付けられた... なるほど、これは知りませんでした。ありがとうございます。 例えばCドライブtempフォルダにtemp.xlsというテスト用ファイルを作って以下試してみてください。 Sub test1() Const fName = "c:\temp\temp.xls" Range("A1:A10").Copy With CreateObject("excel.application") '.Visible = True With .Workbooks.Open(fName) With .Sheets(1) .Activate .Range("A1").Select .PasteSpecial Format:="XML スプレッドシート" End With .Close True End With .Quit End With Application.CutCopyMode = False Workbooks.Open fName End Sub このような感じで、別インスタンスのExcel(Excelをもう1コ起動する)で処理すれば、 ご提示の方法で出来なくはないです。 (もしかしたらクリップボードを弄ればこんな面倒な事しなくて可能なのかも。この辺パス) 他に、シートを一旦コピーした後に切り取り-貼り付けする事でもできます。 Sub test2() Const fName = "c:\temp\temp.xls" Dim ws As Worksheet Set ws = ActiveSheet With Workbooks.Open(fName) ws.Copy before:=.Sheets(1) Set ws = .Sheets(2) With .Sheets(1) .Range("A1:A10").Cut ws.Range("A1") Application.DisplayAlerts = False .Delete Application.DisplayAlerts = True End With End With Set ws = Nothing End Sub でも、最初から名前定義がある事がわかっていて、コピーと同時に設定したいケースであれば、 どうせマクロで処理するのですから、普通にコピーして、名前の定義も設定すれば良いような気もします。 Sub test3() Const fName = "c:\temp\temp.xls" Dim r As Range Set r = Range("A1:A10") With Workbooks.Open(fName) r.Copy .Sheets(1).Range("A1") .Sheets(1).Range(r.Address).Name = "日付" End With Set r = Nothing End Sub いずれもActiveSheetのA1:A10に名前定義があるとして、 "c:\temp\temp.xls"の最左SheetのA1:A10にコピー&名前定義するコードです。
その他の回答 (1)
- watabe007
- ベストアンサー率62% (476/760)
名前を新たに定義してみては Range("A1:A10").Copy Workbooks.Open Filename:=(ファイルの保存先) Range("A1").Select ActiveSheet.Paste ActiveWorkbook.Names.Add Name:="日付", RefersToR1C1:="=" & ActiveSheet.Name & "!R1C1:R10C1"
お礼
返信が遅れてしまい申し訳ないです。 end-uさんのご回答を参考にコードを入力した結果、 私の望みどおりのことができるようになりました! Excelをもうひとつ起動するコードを知らないかったので、 非常に参考になりました。 ありがとうございました。