- ベストアンサー
エクセルマクロで質問ですが、どなたか教えてください。
エクセルマクロで質問ですが、どなたか教えてください。 処理の為のファイルとエクセルのマクロしか入っていないファイルの2種類を作って作業しています。 ですが、処理ファイルから、マクロファイルを読み込みマクロ実行させているのが、通常なのです。 しかし、時々マクロファイルが表(アクティブ)になってしまい、肝心の処理ファイルがアクティブになってなく、処理が出来ないときがあります。処理ファイルは名称がいろいろ変わる為、(見積A物件、B物件など)ファイル指定も出来ないのです。 マクロファイルを読み込み、実行させる際、マクロファイルを表に出さないで処理する方法があれば教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#2の回答者です。 >マクロFILEをアクティブせず、マクロを実行したいのです。 私の回答で解決するはずですが、今のスタイルのままで、出された情報で、解決してほしいということだと思います。本当は、そういうのって困ってしまいますね。苦労せず、そのままでというのは分からないわけではないけれども……。もう少し、VBAの勉強が必要かもしれませんね。 もともと、#2のお礼の中のコードなら、Workbooks.Open などは必要ないのですが、明示的に開くというなら、こんな風にすれはよいはずです。 Sub 作業() Dim AcBk As Workbook Set AcBk = ThisWorkbook 'または ActiveWorkbook Workbooks.Open Filename:="C:\Documents and Settings\user\My Documents\見積\マクロ.xls" AcBk.Activate Application.Run "マクロ.xls!作成" Set AcBk = Nothing End Sub 開けない方法は、ただ単に、 Sub 作業2() Application.Run "'C:\Documents and Settings\user\My Documents\見積\マクロ.xls '!作成" End Sub を一行で行います。 でも、"マクロ.xls!作成"の中身まで問題にしなければならないかもしれません。 題名:マクロの作業で、アクティブにしたくない 質問投稿日時:2010/04/08 13:53 質問番号:5811398 この時の内容のレベルですと、きちんと直さなくてはなりません。もちろん、その回答自体もうまくないです。 merlionXX さんのやり方は、ファイルを開いてマクロを実行するというほうが標準的です。つまり、コードの流れが追いやすいのです。
その他の回答 (3)
- merlionXX
- ベストアンサー率48% (1930/4007)
ANo1 merlionXXです。 > myFn = Application.GetOpenFilename("Microsoft Excelブック,*.xls") '作業対象ファイルを選択のファイルなのですが、毎回読み込む名称が変わるために、ここで特定が出来ないのです。 わたしがnpswさまのおやりになっていることを理解できてないのでよくわからないのですが、 マクロを書いてあるBOOKは一つだけなんですよね? 対象ファイルはその都度違うんですよね? だったら、対象ファイルは手動で選択するんじゃないんですか? それなら、マクロのあるBOOKは先に開いておき、 myFn = Application.GetOpenFilename("Microsoft Excelブック,*.xls")のコードを走らせたら、エクセルのファイル選択画面になりますよね? そこでフォルダーでもファイルでも選択すればいいだけです。 本来なら、ANo2のWendy02さまがおっしゃるように、マクロだけのBOOKではなく個人用マクロBOOKの、PERSONAL.XLS の標準モジュールに登録した方がいいと思います。 そうすればマクロのあるBOOKを先に開くことさえ不要になります。
お礼
ありがとうございました。 作業ファイルで、表を完成させてから、マクロを実行させる必要があった為なのです。 作業ファイル作成中に、別ファイルのマスターを読み込み、その内容を修正など行い(=IF(D25="","",VLOOKUP(D25,[製品DATA.xls]製品データ!A:B,2,0))こんな作業を繰り返し、完成させた後、マクロ実行させております。 WENDY02さんからの指摘どおり、勉強が足りないことは十二分に思っているのですが、素人のマクロと素人の関数を組み合わせています。 マクロですが非常に長いマクロとなっているのも現状です。(必要ないことも多くやっているようです) くやしいことですが、皆様から教えていただいた内容を「F8」ボタンで確かめたり本屋さんで立ち読みしながら、理解している現状です。 いろいろありがとうございます。
- Wendy02
- ベストアンサー率57% (3570/6232)
本当は、コードを見ないとなんとも言えませんが、なんとなくの回答です。 そのマクロは、ユーティリティの類だと思います。 >処理ファイルから、マクロファイルを読み込みマクロ実行させているのが、通常なのです。 確かに、そうすると、ActiveWorkbook は、開いたブックになってしまいますから、そのような方法ですと、難しいです。逆に、間違わないほうが不思議です。前に開いていたファイルを、指定させるというのは、マクロとしては複雑になってしまいます。 仮に、Loop で、If ThisWorkbook.Name <> Worksbooks(i).Name Then でも、うまく行かないはずです。理由は、複数のファイルを開いている時には、思ったようにはなりません。必ず、二つしか開いていないという条件では、うまくありません。 そこで、そのコードが大きなものでなければという条件付きですが、PERSONAL.XLS の標準モジュールに登録してしまえばよいですね。そうすれば、ActiveWorkbookは、かならず、目の前にあるものです。 大きなものなら、アドイン化してしまう方法もあります。それは、ちょっと難しいです。
お礼
追加ですが、マクロを読み込むときのリストです。 Sub 作業() Workbooks.Open Filename:="C:¥Documents and Settings¥user¥My Documents¥見積¥マクロ.xls" Application.Run "マクロ.xls!作成" End Sub これだけだと、もし何かあってマクロを修正するときなど一々作業ごとのファイルを直さなくてもマクロファイルを直せば、と思い上記のようにしました。
補足
すいません。 私の質問内容なのですが、整理し、説明します。 今多くこの方式をとっているのが、見積の作成です。 見積書FILE(見積書式)と製品FILE(仕様や標準価格)を最初に読み込み、見積書を作成します。 そしてマクロFILEを読み込み計算させたり、その内容に基づき顧客ごとの仕切価格を出したり、顧客ごとの書式に直したりします。 その際、マクロFILEを読み込んだとき見積書FILEを計算しないで、マクロFILE(マクロのみの表は真っ白)のところがアクティブとなり計算してしまったりします。 そのため、マクロFILEをアクティブせず、マクロを実行したいのです。 又、最初に見積を作成するときは、白紙の書式を読み込むから(原紙.XLS)となるのですが、一度提出した見積を一部直すこと(追加など)も多々あり、そのときは、ファイル名が(A物件.XLS)となったものを読み込みます。 このような作業のためなのですが如何でしょうか?
- merlionXX
- ベストアンサー率48% (1930/4007)
一例です。 マクロのあるBOOKをwb(1)、対象ファイルををwb(2)と定義して、wb(2)への処理マクロにwb(2)を明示すればそのような問題は解決すると思います。 Sub Sample() Dim myFn As Variant Dim wb(1 To 2) As Workbook Set wb(1) = ThisWorkbook 'マクロのあるBOOKをwb(1)と定義 myFn = Application.GetOpenFilename("Microsoft Excelブック,*.xls") '作業対象ファイルを選択 If myFn = False Then Exit Sub Workbooks.Open Filename:=myFn '対象ファイルを開く Set wb(2) = ActiveWorkbook '対象ファイルををwb(2)と定義 MsgBox wb(2).Name & "への処理を開始します。" ' wb(2)への処理マクロ wb(2).Close End Sub
補足
お世話になります。 myFn = Application.GetOpenFilename("Microsoft Excelブック,*.xls") '作業対象ファイルを選択 のファイルなのですが、毎回読み込む名称が変わるために、ここで特定が出来ないのです。 なお、物件により、読み込むマクロファイルを変えたり(?変える必要はないSUB-ENDSUBの名を変えればよいのですが、ファイル保存するホルダーも変えていく必要もあるのです)また、そのデーターをメールなどに添付したり、データーを「ロムなど」で送ったりすることもあるので、マクロを作業ファイルに細かくつけたくないのが、気持ちなのです。 勘違いでしょうか?GETOPENFILENAMEは(Microsoft Excelブック,*.xls)というファイルにするということでしょうか?
お礼
ありがとうございました。 「もともと、#2のお礼の中のコードなら、Workbooks.Open などは必要ないのですが」 必ずOPENしなければいけないと思い込んでいました。 現在ご指示のやり方で行ってみているのですが、マクロがアクティブになってしまうことは、発生せずスムーズに行っております。