- ベストアンサー
他のブックのマクロの呼び出しでアクティブになってしまう問題
- 質問者はエクセルのツールバーに2つのボタンを作成し、他のブックのマクロを割り当てました。しかし、マクロ1を呼び出すと他のブックがアクティブになり、真っ白のシートが表示されてしまいます。また、マクロ2を呼び出すとフォームが表示されず、バックグラウンドに隠れてしまいます。
- 質問者は以前にも同様の問題があり、シート上のCH(13)を消すマクロを使用していた際も、フォームがバックグラウンドに隠れていました。Application.ScreenUpdatingをFalseに設定しても、一瞬ではありますが他のブックがアクティブになる問題が解決しません。
- 質問者はマクロ1とマクロ2の動作が異なる理由が分からない状況です。表示が崩れたり、他のブックがアクティブになる問題を解決したいと考えています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 Macro1 は、このようにすれば、何も表示せずに出来ます。 このマクロは、途中で中止しないようにしてください。Excelが残ってしまいます。もし、残ってしまったら、タスクマネージャを立ち上げて、プロセスで、削除してください。 >以前同様にシート上のCH(13) もしかしたら、Chr(10) のことではないでしょうか? Sub Test1() Dim bkName As String Dim xlApp As Object Dim wb As Workbook Dim sh As Worksheet 'ブックの名前を入れます。 bkName = ThisWorkbook.Path & "\TEST1.XLS" If Dir(bkName) = "" Then MsgBox "該当するブックがありません。", 48 Exit Sub End If On Error GoTo ErrHandler Set xlApp = CreateObject("Excel.Application") With xlApp Set wb = .Workbooks.Open(bkName) Set sh = wb.Worksheets("Sheet1") .DisplayAlerts = False sh.Cells.Replace What:=Chr(10), Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False .DisplayAlerts = True Set sh = Nothing wb.Close True Set wb = Nothing xlApp.Quit End With ErrHandler: Set xlApp = Nothing End Sub マクロ2のほうは、 たとえば、通常は、こんな風でよいはずですが、ちょっとはっきりしたことが言えません。 Me とは、UserForm のことです。 Private Sub UserForm_Activate() AppActivate Me.Caption End Sub
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >Test1というマクロが記述してあるブックが主となりTEST1というブックを開いて処理をする形式でしょうか。 それは、関係ないです。すみません。名称は何でもよいのですが、私は、以下の二点を 避けたかったからです。 >Sub Output() ひとつは、2バイト文字であること。Excel VBEditor のバグか分かりませんが、私のVBEditor(Off 2003-すべて共通)だけかもしれませんが、2バイト文字の検索に不具合があります。もうひとつは、基本形の名前だからです。(これは、私の単なるスタイルなのですが、 読みにくかったりするからです) >シートが表示されないようにするのは普通にマクロを作るのでは無く >xlAppというオブジェクトの形で呼び出すように作らなくてはいけないのでしょうか。 別に、何々しなければならないというわけではなくて、ひとつのこだわりの中では、そうしたほうがよいということだけです。実際に、私自身が、オートメーション・オブジエクト(xlApp) を作って処理するということはありません。それ自体が、チラチラ表に出てこようが、あまり気にしたことがありません。すべて、裏方でしようとしたら、そうなるということです。あまり多くはありませんが、こういうやり方を好む人もいるようです。 >私の希望はエクセルの表(ブックは何十とあります)を処理する際にツールバーのボタンを押せばブック1のマクロ1が仕事をしてくれるという形式ですがどう組み込めばよろしいのでしょう。 私は、あまり固定ファイルに対して、ツールバーのボタンに組み込むということはしないのですが、マクロは、「個人用マクロブック(Personal.xls)」の標準モジュールに置きます。 表示-ツールバー-コマンド- 「分類」の中から、マクロを選択 ユーザー設定で、ニコちゃんマークで、空いているツールバーに貼り付けて そのまま、ボタン(CommandButton)を右クリック -マクロの登録 -ボタンイメージの変更(アレンジする場合) などとしてください。 ファイルの選択の場合、固定式の場合は、ループを使わないといけないと思います。 たとえば、 MyBooks = Array("Test1.xls","Test2.xls","Test2.xls","Test2.xls") として、 For Each fn in MyBooks fn '<- ファイル名(ただし、パスがありませんから、元に書き込むか、別に置いてください Next fn
お礼
Wendy02様 懇切丁寧な回答ありがとうございます。 >すべて、裏方でしようとしたら、そうなるということです. >あまり多くはありませんが、こういうやり方を好む人もいるようです。 私はチラッとでも画面に出したく無い性格ですの少数派でしょうか。 お教えいただいたxlAppでPersonal.xlsで行いたいと思います。 また何かありましたらよろしくお願いします。
補足
Wendy02様 回答ありがとうございます。 >もしかしたら、Chr(10) のことではないでしょうか? すいません、目茶区茶いい加減な記憶で書いてしまったようです。 コードを記述して頂いたのに 理解力が無くて申し訳ありませんが教えて頂いたコードは Test1というマクロが記述してあるブックが主となりTEST1というブックを開いて処理をする形式でしょうか。 私の希望はエクセルの表(ブックは何十とあります)を処理する際にツールバーのボタンを押せば ブック1のマクロ1が仕事をしてくれるという形式ですがどう組み込めばよろしいのでしょう。 ツールバーのボタンを押すとブック1のシートが画面に表示されます。 処理が終わるとクローズさせているので元の表に表示が戻ります。 同様に作った前回及びブック2は表示されなかったのに何故ブック1が表示されてしまったのかその理由がわかりません。 シートが表示されないようにするのは普通にマクロを作るのでは無く xlAppというオブジェクトの形で呼び出すように作らなくてはいけないのでしょうか。