[[20040608114316]] 『ブック全体を別ブックにリンク』(なんでやねん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ブック全体を別ブックにリンク』(なんでやねん)

[ファイル(ブック)全体を別ファイル(ブック)にリンクさせる方法どなたか御存知でしょうか?]
 
 例 ブックA を更新→ブックB(ブックAのコピー)も更新


 一般機能だけでお考えでしょうか?
 マクロを使えば可能ですけど・・。

  (INA)


 一般機能で可能なら一般機能でお願いします。
マクロは扱ったことありませんがマクロ
の方が作り安ければマクロでお願いします。


 マクロです。

 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    ThisWorkbook.SaveCopyAs "c:\test.xls"
 End Sub

  (INA)


すみません。うまく動かないです。
ちなみに上記の意味は
ファイルA(リンク元)があったとして
ファイルAに「Workbook_BeforeSave」という名のマクロ名
(Workbook_BeforeSaveはファイル名でなくマクロ名でいいですか?)で
括弧内を実行させ、Cドライブに「test」というコピーを
作るという意味でいいのでしょうか?
動作としてはファイルAを更新するとファイルtestに自動更新されるで
いいのでしょうか?
すみません。ドシロウトなもので・・・。


 内容はあってます。

 使い方は、
 alt + f11 で vbe を起動。
 プロジェクトウィンドウのthisworkbookモジュールをダブルクリックして、
 開かれたコードウィンドウに、先ほどのマクロコードをコピペして下さい。

  (INA)


動きました!ありがとう御座います。
ただ、会社で使用するファイルを考えているうもう1つ
悩みができてしまいました(教えていただいたマクロ
には全然問題ありません)。それは、上記のリンク先
のファイル「test」に直接入力して更新しようとすると
「test.xlsにアクセスできません」とメッセージが出てきますが、
この動作は正しいのですよね?
実はリストをもとにチェックリストを作ろうとしております。
ファイルA(リンク元;内容はリスト)、ファイルB(リンク先)があったとして
ファイルBにはリストの良否をチェックする項目欄を追加して使いたいのです。
リストAは日々追加等の更新があるのでそれを反映させたチェックリスト
を作りたいと思っています。
教えていただいたマクロを編集してうまく動作させる方法ありますでしょうか?


 >ファイル「test」に直接入力して更新しようとすると
 >「test.xlsにアクセスできません」とメッセージが出てきますが、
 >この動作は正しいのですよね?

 ふつうのExcelファイルと同じなので、編集&保存できないということはありません。
 他でファイルが開かれているということはありませんか?

 具体的なシートの内容などをお教え頂ければ、 
 「リストの良否をチェック」のマクロを作ることが出来るかもしれません。

  (INA)


「test.xlsにアクセスできません」とメッセージが出てきますが
「終了」を押して右上のXでファイルを閉じると保存されていました。
しかし、また新たな問題が・・・。リンク先ファイル「test」
を編集して保存できたのはいいのですが、リンク元を再更新して保存すると
リンク先も全く同じデータで保存されてしまいます(リンク先側で直接入力した
データはそのまま残したいのです)。マクロの式の意味からすると正しい動き
のような気がしますが。具体的にやりたいことは、
ファイルA(リンク元;内容はリスト)
1. a
2. b
3. c
4. d
というリストがあるとして

ファイルB(リンク先;チェックシート。チェック欄の良否は手入力)

品名  チェック欄
1. a |
2. b |
3. c |
4. d |

品物現物を目視(いわゆる検品です)で確認してチェック欄には手動で
「良否」を入力する流れです。品物は日々リストに追加されるので
チェックシートには追加分は自動更新、かつ「良否」は手入力で行う
仕様にしたいのです。「リスト」は本来別の目的でつくられているファイルで
チェックシートを作るために私が勝手に参考資料「リスト」として
使っているのです。一般機能で一度作成してみましたがファイルの容量
が倍になってしまったのでマクロで良い方法をお願いします。


 ファイルBに、A列だけコピーすればよいのですよね?

 だとすれば、マクロの記録でできると思います。
 自動記録されたコードを、 

 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

   'ここにコピペする  

 End Sub

 してみて下さい。

 基本的な処理の流れは、
 ファイルAを保存→マクロ実行→
 「マクロの処理」
 ファイルBを開く→ファイルAの?シートのA列をコピー→
 ファイルBの?シートのA列に貼り付け→ファイルBを上書き保存→ファイルBを閉じる

 になると思います。

  (INA)


すみません。うまくいかないです。


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

   'ここにコピペする  

 End Sub

 してみて下さい。


上記はリンク元のマクロでいいですよね?

ThisWorkbook.SaveCopyAs "c:\test.xls"

がないとリンク先「test.xls」が更新されないような気が・・・。
マクロの記録のやり方が悪いのでしょうか?
例えば
リンク元ファイルに
A1 1
A2 2
A3 3
とあったとして
A4 に4を追加したマクロを記録すると
Sub Macro4()
'
' Macro4 Macro
' マクロ記録日 : 2004/XX/XX ユーザー名 : XXXXX
'

'

    Range("A4").Select
    ActiveCell.FormulaR1C1 = "4"
    Range("A5").Select
    ActiveWorkbook.Save
End Sub

となりました。これを見る限りマクロのとり方が悪いような
気がします。マクロのとり方は
ツール→マクロ→新しいマクロの記録 でいいですよね?

いろいろ試しているうちに気が付いたのですが
リンク元のセル範囲を指定してその部分だけをリンク先ファイルに
リンクさせる方法をマクロでやりたいのですが。

例えば
ファイル(リンク元)
A1 1 B1 a
A2 2 B2 b
A3 3 B3 c
のA列 B列を指定(行はデータが追加されるので可能なら全ての行)
してリンク先ファイルにコピー。リンク先ファイルでは
C1 D1などリンク指定範囲以外にデータ入力できる
方法なにかありますでしょうか?


 >    Range("A4").Select
 >   ActiveCell.FormulaR1C1 = "4"
 >   Range("A5").Select
 >   ActiveWorkbook.Save
 >End Sub
 >となりました。

 コピーの操作が記録されてませんよ?

  (INA) 


なかなかうまくいかないです。何度もすみません。アホなもので。
下記操作をして記録を取りなおし
コードをつくってみたのですが。

操作

 ファイル「test1」を保存
 ファイル「test2」を開く→ファイル「test1」の?シートのA列をコピー→
 ファイル「test2」の?シートのA列に貼り付け→ファイル「test2」を上書き保存→
 ファイル「test2」を閉じる

コード

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'

    ActiveWorkbook.Save
    Workbooks.Open Filename:= _
        "C:\Documents and Settings\oos-ma\My Documents\test2.xls"
    Windows("test1.xls").Activate
    Range("A1:A28").Select
    Selection.Copy
    Windows("test2.xls").Activate
    Range("A1:A28").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWorkbook.Save
    ActiveWindow.Close
End Sub

1行づつ動作を確認していくと
「Windows("test2.xls").Activate」
で失敗しているようです。

test1セーブ時に
「実行時エラー'9':
 インデックスが有効範囲にありません」
とメッセージが出てきます。

ファイル「test2」にペーストするにはどのようにしたらいいでしょうか?


 ちょっと手を加えて、以下のようにしてみました。
 これで分かりますでしょうか? 

 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) '
 Dim 保存先パス As String
 Dim 保存先ファイル As Workbook

    保存先パス = "C:\data"

 Application.ScreenUpdating = False

    '保存先ファイルを開く
    Set 保存先ファイル = Workbooks.Open(保存先パス & "\Test2.xls")

    'コピー
    ThisWorkbook.Worksheets("Sheet1").Range("A1:A65536").Copy _
    Destination:=保存先ファイル.Worksheets("Sheet1").Range("A1")

    '保存して閉じる
    保存先ファイル.Close True

 Application.ScreenUpdating = True
 End Sub

   (INA)


動きました!ありがとう御座います!
もう1つ質問なのですが複数のシートをそれぞれのシートにコピー
する良い方法ありますでしょうか?

期待する動作は
ファイルA          ファイルB
sheet1 A1:B65536  → sheet1 A1:B65536 にコピー
sheet2 A1:B65536  → sheet2 A1:B65536 にコピー
sheet3 A1:B65536  → sheet3 A1:B65536 にコピー

 'コピー
    ThisWorkbook.Worksheets("Sheet1").Range("A1:A65536").Copy _
    Destination:=保存先ファイル.Worksheets("Sheet1").Range("A1")

の部分のsheetNo.をかえてコードに追加

 'コピー
    ThisWorkbook.Worksheets("Sheet1").Range("A1:A65536").Copy _
    Destination:=保存先ファイル.Worksheets("Sheet1").Range("A1")

    ThisWorkbook.Worksheets("Sheet2").Range("A1:A65536").Copy _
    Destination:=保存先ファイル.Worksheets("Sheet2").Range("A1")
                             ・
                             ・
                             ・

をすれば動くみたいですが
実際に仕事で使うシートは10枚ほどあるので良い指定の方法があれば
お願いします。


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.