A.xlsとB.xlsという2つのファイルがあります。


A.xlsというファイルにマクロを設定したいです。

行いたい一連の操作は下記の通りです。
A.xlsのSheet1をB.xls(場所はC:\)のSheet1にコピーする。
B.xlsのSheet2をプリントアウトする。
B.xlsを閉じてA.xlsに戻る。

こんなことってできますでしょうか?

どうぞよろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:2008/02/09 13:37:53
  • 終了:2008/02/16 13:40:02

回答(1件)

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912008/02/09 15:14:32

ポイント60pt

こんな感じでどうでしょうか。

A.XLSの標準モジュールにおいて試してみてください。

'--- 操作対象ファイル
Const dstExcelName = "C:\B.xls"

Sub CopyAndPrint()
'--- 操作対象ファイルを開く
    Dim dstWB As Workbook
    Dim dstWS As Worksheet
    If Dir(dstExcelName) = "" Then
        MsgBox dstExcelName & "がありません。"
        Exit Sub
    End If
    
    On Error Resume Next
    Set dstWB = Workbooks.Open(dstExcelName)
    On Error GoTo 0
    
    If dstWB Is Nothing Then
        MsgBox dstExcelName & "が開けませんでした。"
        Exit Sub
    End If

'--- 警告を無効
    Application.DisplayAlerts = False

'--- 操作対象ファイルのSheets1を削除
    dstWB.Worksheets("Sheet1").Delete

'--- 自シートをコピー
    ThisWorkbook.Worksheets("Sheet1").Copy Before:=dstWB.Worksheets(1)
    
'--- Sheet2 を印刷
    dstWB.Worksheets("Sheet2").PrintOut
    
'--- もし保存するなる次を実行
    ' dstwb.save

'--- 捜査対象ファイルを閉じる
    dstWB.Close
    
'--- 警告を有効
    Application.DisplayAlerts = True
End Sub
id:ohtsu6

Mookさま

どうもありがとうございます。

出来ました。

ただ、1点だけ問題があります。

「dstWB.Worksheets("Sheet1").Delete」で

シートを削除してしまうと、

Sheet2からSheet1に「=Sheet1!A1」という感じで

設定しているところがあり、

「=#REF!」とエラーになってしまいます。

このエラーにしない方法はありますでしょうか?

どうぞよろしくお願いいたします。

2008/02/11 23:17:20
  • id:Mook
    すみません。
    返信を見逃していました。

    いまさらですが、問題は解決したでしょうか?

    Bファイルの Sheet1 と A ファイルの Sheet1 が同じフォーマットであるなら、
    シートのコピーではなく、データのコピーにしたほうがよいでしょう。
    Workbook("A.xls").Worksheets("Sheet1").Range("A1:Z1000").Copy _
    Destination:=Workbook("B.xls").Worksheets("Sheet1").Range("A1:Z1000")
    のような感じです。

    データの参照関係によっては、今回のような状況になりますので、対応が必要ですね。
    不明な点はコメントください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません