[[20100129104731]] 『開いていないファイルからのデータ転記マクロ』(あらくま) ページの最後に飛ぶ

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

 

『開いていないファイルからのデータ転記マクロ』(あらくま)
 当学校を通じて、少しずつ、少しずつ、イメージを形にしてくることができま
 した。今まで、ご指導くださった皆様にお礼申し上げます。
 さて、次のような壁にぶち当たっています。

 同一フォルダ内にある ファイル"愛.xls"のシート"義"の範囲"$F$5:$O$378"
 にあるデータを ファイル"仁.xls"のシート"友"の範囲"$F$5:$O$378"に転記
 するマクロ考えています。なお、ファイル"愛.xls"のシート"義"の転記対象
 範囲は、ファイル"仁.xls"のシート"友"のセル"A3"のデータによって変化す
 るようにしたいとも考えています。
 転記元のファイル"愛.xls"は開いていない状態でファイル"仁.xls"のシート
 "友"上でマクロを実行して、目的どおりの結果を得るにはどのようなマクロ
 を組めばよいのでしょうか?
 ちなみに、ファイル"仁.xls"のシート"友"上で実行して同一ファイルのシー
 ト"知"から転記するマクロは次のように作成しました。
 ファイル"愛.xls"を開いた状態で、マクロの自動記録を使って得られた記述
 をそのまま応用してもうまくいかないように思います。
 マクロ実行時にファイル"愛.xls"に対して何らかの働きかけ?をしないとい
 けないのだろうとは思うのですが???
 知識不足で、困り果てています。
 どなたか、ご教授願えませんか。

 Sub Test1()
  Dim G As Integer

  If MsgBox("指定に間違いはありませんか?転記してよろしいですか?", vbYesNo) = vbNo Then End

  G = Worksheets("友").Range("A3").Value
   If G = 6 Then
    Worksheets("知").Range("F5:O378").Copy
    Worksheets("友").Range("F5:O378").PasteSpecial Paste:=xlValues
   ElseIf G = 5 Then
    Worksheets("知").Range("P5:Y378").Copy
    Worksheets("友").Range("F5:O378").PasteSpecial Paste:=xlValues
   ElseIf G = 4 Then
    Worksheets("知").Range("Z5:AI378").Copy
    Worksheets("友").Range("F5:O378").PasteSpecial Paste:=xlValues
   ElseIf G = 3 Then
    Worksheets("知").Range("AJ5:AS378").Copy
    Worksheets("友").Range("F5:O378").PasteSpecial Paste:=xlValues
   ElseIf G = 2 Then
    Worksheets("知").Range("AT5:BC378").Copy
    Worksheets("友").Range("F5:O378").PasteSpecial Paste:=xlValues
   Else
    Worksheets("知").Range("BD5:BM378").Copy
    Worksheets("友").Range("F5:O378").PasteSpecial Paste:=xlValues
   End If
 End Sub

 素直に開いてから処理をし、閉じれば良いと思います。
 どうしても開きたくない!というのであれば、ExecuteExcel4Macroを使う方法もありますが。。。
 (ROUGE)

 ROUGEさん、早速のご回答ありがとうございます。
 ファイルのリンクというものを知り、便利さを享受してきたものですから、
 今回の問題も対象ファイルを開かなくてもできるのではないか・・・と考え
 たのです。開かなくてもできれば、対象ファイルを開いているかどうかを
 気にしなくてよいことになり、他の職員が使い易いいだろうなあと思ったの
 です。
 ExecuteExcel4Macroを使用するとすると、どのようになりますか?
 フォルダ名を"勇"とすると・・・
 ご示唆いただければ幸いです。
 (あらくま)


 > 開かなくてもできれば、対象ファイルを開いているかどうかを
 > 気にしなくてよいことになり、他の職員が使い易いいだろうなあと思ったの
 > です。

 Dim wb As Workbook, flg As Boolean
 Const bn As String = "C:\test\愛.xls"
 On Error Resume Next
 Set wb = Workbooks("愛.xls")
 flg = (wb Is Nothing)
 If flg Then Set wb = Workbooks.Open(bn)
 '処理
 If flg Then wb.Close False

 などとすれば、気にしなくてもOKですが。

 ExecuteExcel4Macroについては、下記リンクを参考にどうぞ。
 http://officetanaka.net/excel/vba/tips/tips28.htm
 (ROUGE)

 ROUGEさん、ご示唆ありがとうございます。
 ExecuteExcel4Macro関連情報では、セルのアドレスをR1C1形式で指定したり、
 対象ファイル(ブック)のありかを予め指定しておかなくてはならなかったり、
 対象ファイルやシートがなかったりした場合エラーになったりと・・・
 (理解に間違いがあるかもしれませんが)
 少々、面倒な条件が課されるようですね。
 単純に対象ファイルを開くよう(開いているか確認するよう)、MsgBoxで呼び
 かけることにします。
 なお、対象ファイルを開くということはメモリーを使用するということ・・・
 条件にもよりますが、メモリーに余裕のない状況ではファイルを開かずにセル
 情報を取得する(ExecuteExcel4Macroを活用して)ことも有効と言うことでし
 ょうか。勉強不足で、とんちんかんなことを言っているかもしれませんが。
 (あらくま)

 > 単純に対象ファイルを開くよう(開いているか確認するよう)、MsgBoxで呼び
 > かけることにします。

 そんなことしなくても良いようなコードにしています。
 勝手にそのBookが開いているかどうか調べて、なければ開いて、処理を実行し、
 元々開いていないものであれば勝手に閉じる という手順です。
 (ROUGE)

 ROUGEさん、恥ずかしいです。
 よく、コードを読み解かないで・・・
 まさに、とんちんかんなことを書いてしまいました。
 利用してみます。         (あらくま)

コメント返信:

[ 一覧(最新更新順) ]


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