• 締切済み

EXCELアドイン自動起動マクロ

アドインに登録し、不特定のCSVファイルを読み込んだとき(OPENしたとき)に内容を判別し、起動するマクロを作成しようとしています。 標準モジュールに”Sub Auto_Open()”により記述し、アドイン登録しましたが、期待する動作となりません。 ----------------------------- Sub Auto_Open() MsgBox "ファイルが開く毎に起動させたい" End Sub ----------------------------- ☆EXCEL未起動→ファイルオープンしたときには、上記MsgBoxが表示されるが、EXCEL起動中→ファイルオープンでは表示されません。 ファイルを開くたびに動作するマクロを登録するためには、どのようなテクニックが必要なのでしょうか?

みんなの回答

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.2

こんにちは。 そのアドインBookの 'ThisWorkbookモジュールに Option Explicit Private WithEvents xlApp As Application Private Sub Workbook_BeforeClose(Cancel As Boolean)   Set xlApp = Nothing End Sub Private Sub Workbook_Open()   Set xlApp = Application End Sub Private Sub xlApp_WorkbookOpen(ByVal Wb As Workbook)   If Not Wb Is Me Then MsgBox "open" End Sub アドイン自身のOpen時にもメッセージが必要なら If Not Wb Is Me Then は不要です。

BoogieMan
質問者

お礼

ありがとうございました。 参考にしてチャレンジしてみましたが、 エラーになり起動しませんでした。 私が使っているバージョン(Office97)が古いからでしょうか? 他の方法を検討します。

回答No.1

> EXCEL起動中→ファイルオープンでは表示されません。 新しく開かれたファイル=アクティブ(表面に表示)になる。 起動中のEXCELファイル=背面に隠れた状態になる。 というのでしたら、 起動中のファイルの ThisWorkbookモジュールに ' Private Sub Workbook_WindowDeactivate(ByVal Wn As Window) MsgBox "新しいファイルが開かれました" End Sub ' ではいかがでしょうか。

BoogieMan
質問者

お礼

ご回答ありがとうございました。ただ、 「アドインで登録し、不特定のファイルを開いたとき」 の条件での動作が条件となるため、参考とさせていただきますが 今回の内容に合致しません。他の方法を検討してみます。 ありがとうございました。

関連するQ&A

  • どのファイルを開いた時もマクロを自動実行。エクセル

    新規にエクセルを開いたときだけマクロを自動実行するには、 personal.xlsで Sub auto_open() ' Macro1 Macro Range("A1").Value = "111" End Sub とすれば良いかと思いますが、 新規に開くどのファイルに対しても ファイル名ABC を含んでいる時だけ マクロを自動的に実行するにはどうしたらよいでしょうか? (ファイルを開いてから マクロボタンを押して マクロに”ファイル名を チェックしてA1にデータを書き込む”があるのはだめです。) (アドインでツールバーボタンを押すのもだめです。) エクセルは2003 OSはXPです。 説明不足でしたらすみません。

  • ExcelVBA AddinでOnAction

    ツールバーにボタンを作って、そのボタンをクリックしたら OnActionプロパティ で指定したマクロを実行するというワークブックを作りアドイン化しました。 以下、アドインのマクロ。 ThisWorkbookに Private Sub Workbook_Open() ' ツールバーを削除 On Error Resume Next Application.CommandBars("MyMenu1").Delete On Error GoTo 0 With Application.CommandBars.Add(Name:="MyMenu1") .Visible = True .Position = msoBarBottom .RowIndex = 1 .Controls.Add (msoControlButton) With .Controls.Item(1) .Caption = "test1" .OnAction = "a" .FaceId = 59 End With End With End Sub 標準モジュールに Public Sub a() MsgBox "アドイン" End Sub としました。 これでこのアドインをExcelに登録すれば、どのファイルを開いた時でも ツールバーのボタンをクリックすれば、アドインのマクロが実行されます。 が、上記OnActionに記述したのと同じ名前のサブルーチンが、 今アクティブになっているワークブックにあった場合には、アドイン側の サブルーチンではなく、ワークブック側のが実行されてしまいます。 色々検索した結果、 OnActionの指定を「.OnAction = Thiswokbook.FullName & "!a"」とすればよい という記述を目にし、その通りにしましたが効果ありませんでした。 なお、Excel2000または2003で起きました。2010では通常にアドイン側のサブルーチンが 起動しています。 取りあえず、誰もつけそうにない名前をアドイン側のサブルーチンにつけていますが、 これしか手立てはないものでしょうか?

  • Excel起動時にAuto_Openでマクロを動作させています。

    Excel起動時にAuto_Openでマクロを動作させています。 1回目はマクロを行いたいのですが、 次回起動時はマクロを使用したくありません。 (初期にAuto_Openを使用しなければいいのですが、できれば使用したいです) そこで下記はできますでしょうか? ・名前を付けて保存(時)後にマクロを削除するマクロ ・2回目以降起動時(該当のファイル名が違う場合に、Auto_Openが動作しない)マクロ ほかでもよい案があれば教えてください。

  • EXCEL2007のマクロをアドインで使うには?

    お世話になります。 Excell2007の個人用マクロに登録してマクロを利用しておりますが 複数のエクセルを立ち上げようとすると「PERSONAL.XLSBは編集のためロックされています」というメッセージが表示され煩わしく感じております。この状況を回避するには、個人マクロに登録されているマクロをアドインとして利用するのがよいようなので、色々とやってみているのですが、アドインが表示されません。下記にて私の操作手順を記載致します。間違いがあればお教え願えませんでしょうか。済みませんが、何卒よろしくお願い致します。 (1)エクセルを新規に開き、そこに標準モジュ-ルを挿入 (2)PERSONAL.XLSB の標準モジュールに記載されているコードを(1)の標準モジュールにコピペ (3)(1)のエクセルを拡張子”xlam”で保存。保存場所は初期状態から変更せず”C:\Documents and Settings\(ユーザ名)\Application Data\Microsoft\AddIns” (4)エクセルを保存せず閉じる (5)エクセルを新規に開く (6)エクセルのオプションからアドインを選択し、管理がExcelアドインの状態で設定ボタンをクリック (7)(3)にてと保存したアドインを選択しOKボタンをクリック 以上です。エクセルを閉じ、再度新規に開いても、アドインのリボンは表示されません。 (7)の設定はしっかり残っております。 なお、OSはWindowsXP ProfessionalのSP3 を利用しています。 済みませんが、ご協力の程 宜しくお願い致します。

  • 作ったマクロをアドインするには?

    エクセル2000で [Visual Basic]ツールバーの [マクロの記録]をクリックして 「マクロの記録」のダイアログボックスを表示して 「マクロの保存先」を「個人用マクロ ブック」を選択して マクロを記録します. 記録したマクロは Windows\Application Data\Microsoft\Excel\Xlstart のフォルダに,Personal.xlsという名前で保存されます. 次回からエクセルを起動すると, そのPersonal.xlsで起動しますが そのファイルで計算などをして そのファイル名で保存すると, 次回の起動にその保存の影響が出てします. 質問です エクセルを標準の状態で起動して, なおかつ自分で作ったマクロを 簡単に使うにはどうしたらいいでしょうか? アドインするとか本に書いていますが・・・

  • 毎日指定時刻に自動でエクセルを開き、マクロを起動する方法

    <前提条件> ・パソコンを常に起動している(シャットダウンはしない) ・TEST.xlsにマクロ作成済 <お聞きしたいこと> ・毎日指定時刻(15:30)にTEST.xlsを開き、登録されている  マクロを自動で実行したい <私の考え> ・TEST.xlsに下記マクロを登録しようと思っております。  ただ、下記だけですと、「指定時刻にエクセルを開く」と、  「毎日指定時刻に自動でマクロを実行する」ことができません。  あまりマクロについて知識がないため、ご教示のほどよろしくお願いいたします。 Sub 指定時刻にマクロを実行する() Application.OnTime TimeValue("15:30:00"), _ "MSGBOX", _ TimeValue("00:00:30") End Sub Sub MSGBOX() msgbox"TEST" End Sub 

  • マクロに関して(ソフトのトラブル?)

    エクセルのマクロでWorkSheetの所に Private Sub Auto_Open() MsgBox "test" End Sub と入力し、保存した後に開いてもメッセージボックスが現れません。 簡単すぎるほどのマクロですし、イベントがコマンドボタンとかなら動作するのでソフトがおかしいのでしょうか?

  • エクセル95のマクロで自動的に全画面表示したい

    エクセル95のマクロで質問です。 エクセルのファイルを開いた時、自動的に全画面表示にするには Sub Auto_Open() Application.DisplayFullScreen = True End Sub で、立ち上げた時自動的に全画面表示になりますよね。 これを最小化したい場合、このシート上に最小化ボタンをつけて Sub Macro1() Application.WindowState = xlMinimized End Sub というマクロを登録して最小化して、下のツールバーにアイコン化しました。 この場合ですが、次に、ツールバーのエクセルのアイコンをクリックしたとき、エクセル画面は全画面ではなくノーマルなものになってしまいます。 これを自動的に全画面表示にする場合はどうすればいいのでしょうか?

  • 続 EXCELのマクロでBook1立ち上げ時に自動で別のBookを起動するには

    QNo.3774822 「EXCELのマクロでBook1立ち上げ時に自動で別のBookを起動するには」(http://oshiete1.goo.ne.jp/qa3774822.html)でお世話になった者です。その節は多くの方にご回答いただき有難うございました。 前質問ではANo.6にて必要な回答が得られたため締め切り手続きを行ったのですが、この間にANo.7の回答をいただきました。この内容は私にとって大変興味深いもので早速試してみたのですが、私には高度な内容でうまく動作させられませんでした。既に締めていたため新たな質問もできず、こちらに質問させていただく次第です。 次のコードを正しく実行するための記述の仕方をアドバイスいただければ幸いです。 以下ANo.7のご回答者様の回答の抜粋です。 '============================================= 以下は、ほんのお遊びにしか過ぎませんが、こんなことが可能です。 なお、Book1... のような名称というのは、仮の名称であって、特に、それ自体が存在しているとはいえません。 Book1... のSheet1 のA1 に、hirakegoma と入ったときにだけ、別のファイルが開きますが、以下の「待ち時間」の4秒後を過ぎると、何も起こりません。4秒後に入れたものには何も起こりません。開いたと同時では、場合によってはマクロの検索は利かないはずです。 以下のマクロは、カプセル化もしておりませんし、本格的な内容ではありませんが、このようなことが可能です。また、別のソフトのインスタンス生成自体では、Excelのアプリケーションがどのような反応をするかは分かりません。 個人の場合は、"PERSONAL.XLS" ですが、他人に配布する場合は、アドインになると思います。 また、Excelが起動したときに、ブックの中身やブックの名称を全部調べるという方法も可能だと思います。 ループで、 For Each wb In Workbooks  If wb.Name Like "Book#*" Then    Workbooks.Open "Abc.xls"  End If Next '------------------------------------- 'Class1 '------------------------------------- Public WithEvents App As Application Private Sub App_NewWorkbook(ByVal Wb As Workbook) '待ち時間 Const TIMELAG As Integer = 4   Set NewWb = Wb   Application.OnTime Now + TimeValue("00:00:" & CStr(TIMELAG)), "OpenSesame" End Sub '-------------------------------------- '標準モジュール '-------------------------------------- Public myClass As New Class1 Public NewWb As Workbook Public Sub OpenSesame() '添付用のブック Const MYBOOK As String = "Test1.xls" With NewWb.Worksheets(1)  If StrComp(.Range("A1").Value, "HirakeGoma", 1) = 0 Then   If Dir(MYBOOK) <> "" Then    Workbooks.Open "Test1.xls"   Else    MsgBox MYBOOK & "のワークブックが見当たりません。", 48   End If  End If End With Set NewWb = Nothing End Sub '-------------------------------------- 'ThisWorkbookモジュール '-------------------------------------- Private Sub Workbook_Open()  Set myClass.App = Application End Sub '標準モジュールのAuto_Openの場合は、オートメーションでは、そこを通らない可能性があるから、ThisWorkbook モジュールに入れたほうがよいです。Auto_Open は、あくまで、Excelを単独に開いたときだけです。

  • Excelマクロで同じブックにCSVを読み込むには

    Excelの指定したシートにCSVファイルを読み込ませたいのですが 以下のVBAマクロを実行すると新しいブックが起動して 新しいブックの方にCSVファイルが読み込まれてしまうのですが これをVBAマクロを実行しているブックの指定のシート(例えばSheet3など)に 読み込ませたいのですがどのように記述すればよいのでしょうか。 よろしくお願いします(Excel2010) Sub Macro1()  ChDir "C:\test"  Workbooks.Open Filename:= "test1.csv" End Sub

専門家に質問してみよう