[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『開いていないファイルからのデータ転記マクロ』(あらくま)
当学校を通じて、少しずつ、少しずつ、イメージを形にしてくることができま した。今まで、ご指導くださった皆様にお礼申し上げます。 さて、次のような壁にぶち当たっています。
同一フォルダ内にある ファイル"愛.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.