• 締切済み

Excelのマクロが実行されない

Excelを立ち上げ、VBEでThisWorkbookに以下のマクロを記述します。 Dim WithEvents a As Workbook, WithEvents b As Workbook, WithEvents c As Workbook, WithEvents d As Workbook Private Sub Workbook_Open() Stop End Sub ファイルを保存してから起動し、マクロを有効にすると Stop で停止します。 ここで一旦 Stop を削除してから再度 Stop を挿入してから保存します。 再びこのファイルを起動し、マクロを有効にしても Stop で停止しません。 今回は簡単のため Stop にしていますが、実際には起動時の処理が実行されないため困っています。 OSはWindows7,Excelは2007です。

みんなの回答

  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.3

横から失礼します。 回答No.2への補足を見て試してみました。 WindowsとExcelの組み合わせは、XPと2000、7と2013です。 その結果、質問者様とだいたい同じような結果になりました。 さらに、シートモジュールとWorkSheet型変数の組み合わせでも似たような現象が発生しました。 ということは、どうやら一般的に発生する現象のようですね。 ただ、変数宣言が何個以上でだめになるかは今ひとつはっきりしません。 で、回避方法は ・・・ まったくわかりません。

a_green_wind
質問者

お礼

回答していただき、ありがとうございます。 現象を再現していただき、大変参考になりました。 Excelのバグと思われるので、回避策は試行錯誤してみます。 何か有用な情報がありましたら、よろしくお願いします。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

おっしゃっていることの正確な意図がわからないのですが、 要するに ・開く時イベントを記録しているブックを開く ・何らかの要因でマクロが停止=デバッグモードになる ・デバッグモードのままでマクロを編集し、保存して閉じる ・再度開くが、マクロが動かない と言うことですか? もう少し、わかりやすい表現をしていただけると考えやすいです。 とりあえず、ですが。 > Dim WithEvents a As Workbook, WithEvents b As Workbook, WithEvents c As Workbook, WithEvents d As Workbook この大量のWithEventsが邪魔をしています。 これを消す、あるいは一つにするとうまくいくと思います。 何かをするためにこの宣言をしているのでしょうが、 その内容について質問文中からはわかりませんので、 必要な宣言なのか不要な宣言なのかすらわかりません。 これ以上のアドバイスは現状ではできません。

a_green_wind
質問者

補足

回答していただきありがとうございます。 > ・何らかの要因でマクロが停止=デバッグモードになる マクロが停止する要因はStopです。それはこの場合重要ではありません。 > ・再度開くが、マクロが動かない このことが問題です。 マクロを有効にしているのになぜ動かないのでしょうか。 > この大量のWithEventsが邪魔をしています。 3個のWithEventsは大量なのでしょうか。 また、「大量のWithEventsが邪魔をしている」のであれば、大量のWithEventsがあっても動く場合があるのはなぜですか。 > これを消す、あるいは一つにするとうまくいくと思います。 減らすことはできません。実際にはもっと必要です。 現象が起きるのは3個以上の時です。 > 何かをするためにこの宣言をしているのでしょうが、 > その内容について質問文中からはわかりませんので、 > 必要な宣言なのか不要な宣言なのかすらわかりません。 おっしゃる通りですが、詳しく内容を説明するのは困難ですし、プログラム作成の方針もありますので、宣言をなくすことが可能でもなくせない場合があります。 私が知りたいのは 一般的に再現する現象なのかどうか。 なぜこのような現象が起きるのか、または、一般的な回避方法は何か(WithEventsを減らす以外に方法はないのか)。 です。

  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.1

詳しくはもっと専門家がくると思うんですが。 STOPで止まってる状態でプログラムを直しても、それは 「元のプログラムが処理を終了してない」状態ですから (Stopで止まっただけでEndSubまで走ってない)、次の プログラムが動かなくてもある意味当然かと。 じゃあ、どうすればいいか、というと、それまでにどういう 手順で作業してたかに依存するので何とも言えませんし、 この推測があってるかどうかも保証の限りじゃないですが。

a_green_wind
質問者

補足

回答していただきありがとうございます。 Stopの次のプログラムが動かないのが問題ではありません。 Stopで停止しないのが問題です。 実際に上記の手順を実行してみて、現象が再現できたでしょうか。

関連するQ&A

  • エクセルマクロですべてのファイル保存時コメントだす

    エクセルのアドインでファイル保存するときに”保存しますか?”の ダイアログをすべてのファイルに出したいのですが、 うまくいきません。どなたかお教えください。 PERSONAL_SAVE.XLS というファイルに以下のマクロを作成し C:\Documents and Settings\***\Application Data\Microsoft\Excel\XLSTART VBのClass1に 'Option Explicit Public WithEvents App As Application Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean) MsgBox ("保存しますか?") End Sub を作成し、 同じくVBのThisworkbookに Dim x As New Class1 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Set x.App = Application End Sub を作成します。 このときは、ほかのファイルに対しても 保存しますか? のメッセージがでます。 しかし、 このファイルをPERSONAL_SAVE.lxa として 保存し、ツール⇒アドイン で追加し、立ち上げても 同様な動きをしません。 どうしてでしょうか? インスタンス?の関係でしょうか?Private を Publicにしても同じでした。

  • Workbook_openでマクロが実行されない

    ExcelのVBAで起動時にマクロを実行させたいのですが、 「メソッドまたはデータメンバが見つかりません。」 とのエラーが出て実行出来なくて困っています。 プログラム内容は *ThisWorkbook* Private Sub Workbook_Open() Module1.tasu End Sub *標準モジュール(Module1)* Private Sub tasu() Dim a As Byte a = 3 Range("a1") = a End Sub 使用しているソフトはExcell2003、VB6.5です。 よろしくお願いします。

  • エクセル ブック(マクロを含む)を保存してとじると、また開きます。

    ブックに保護をかけた状態で保存してあります。 共有状態にあり、マクロを有効にしてもらいたいので、 (1)開くときに保護解除 (2)保存のときに、保護をかけて保存後、(まだ閉じるとは限らないので)保護解除 ということをやろうとし、以下のように書きました。 エクセルごとではなく、このファイルのみ終了しようとすると、 開いた後と上書保存後に保護を解除する為、 ファイルを終了する時には必ず「変更を保存しますか?」と訊かれ、 その時に「はい」を選択すると、一度はそのファイルが終了するのですが、 すぐに マクロを含むファイルを開くときに出るメッセージ「セキュリティ警告マクロ マクロ有効 マクロ無効 詳細」が出て、また開こうとします。 保存「いいえ」を選択すると、普通に終了します。 エクセルごとを終了すれば保存「はい」にしても、普通に終了します。 このファイルのみ終了する時、保存の確認で、「はい」を選び、普通に終了するには、何を直したらよいでしょうか? その前に、根本的に間違ってたりしますでしょうか・・・。 よろしくお願いします。 ThisWorkbookに、 Private Sub Workbook_Open() ActiveSheet.Unprotect Password:="(パスワード)" End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ActiveSheet.Protect Password:="(パスワード)" Application.OnTime Now, "保護解除" End Sub 標準モジュールに、 Sub 保護解除() ActiveSheet.Unprotect Password:="(パスワード)" End Sub

  • マクロ BeforePrintイベントがマクロ構文上のprintの前に実行できない

    エクセルのマクロで「ThisWorkbook」に  Private Sub Workbook_BeforePrint(cancel As Boolean)イベントを 記載しています。 エクセルの印刷ボタンやプレビューでは、上記イベントが実行されますが、マクロモジュール内のPrintやPrintPreviewの前には、実行されません。マクロの実行過程をステップインで追ってみると、PrintやPrintPreviewの前にPrivate Sub を読みにいくようなのですが実行はされないようで、非常に困っております。 どなたか詳しい方ご教授お願いいたします。

  • EXCELマクロを無効にして開く方法

    掲題の通りなのですが、EXCEL2007で作成されたマクロ有効ファイル(XLSM形式)を マクロ無効の状態で開く方法が分からず困っております。 マクロの内容は Workbook_Open 処理で、特定セルに入力されている EXCELファイルを開き、自身は閉じるというものです。 Private Sub Workbook_Open() Dim FileName As String '1ファイル目 Range("A2").Select FileName = ActiveCell.FormulaR1C1 Workbooks.Open FileName:=FileName ThisWorkbook.Activate '2ファイル目 Range("A3").Select FileName = ActiveCell.FormulaR1C1 Workbooks.Open FileName:=FileName ThisWorkbook.Activate ・・・・・・繰り返し DoEvents ThisWorkbook.Close End Sub 上記の特定セルに設定してあるファイルパスを変更するためには マクロを無効にして開かなければなりません。 マクロのセキュリティを変更して、「すべてのマクロを無効にする」を設定して 該当のファイルを開けば良い事は分かっているのですが、他に分かりやすい方法で マクロ無効状態で開く方法があれば、ご教授頂ければと思います。

  • マクロ実行後エクセルを閉じたい

    2つの別々のファイルを開いて片方からもう片方にコピーして 保存して終了する。(両方とも閉じる) というマクロを作ったのですが コピー終了後に実行したマクロ付きのエクセルも閉じてデスクトップ上には何も開いていない状態にしたいのですがworkbookのところに 下記の命令を記述してもうまくいきません。 Application.Run "XXXXXX" ThisWorkbook.Save ThisWorkbook.Saved = True If Workbooks.Count <= 1 Then Application.Quit ThisWorkbook.Close False マクロ付きのエクセルも一旦は閉じるのですがその後に 別の白紙のブックが開いてしまうのです。 続けて他のマクロをスケジュールで実行したいのですが実行時に 「既にエクセルが開いています」みたいな警告が表示され 実行できません。 エクセルを完全に閉じるようにするにはどうしたらいいのでしょうか?

  • Excelマクロのエラー

    お世話になります。 マクロは、超初心者で只今、本やネットで勉強中なのですが、本の通りに作成しましたが、 エラーが出てしまいます。 急いでおりまして、大変お手数ですがご教示お願いできますでしょうか? Excel2007でマクロを作成中(実際に業務で使用する環境は2003です)。 2点あります。 (1)サブフォルダ内の全ブックを開く  ファイルは開くのですが、下記のエラーが出てしまいます。  C:¥...... "\web保存\"が見つかりません。ファイル名およびファイルの保存場所が  正しいかどうかを確認してください。 (2)開いたファイルをhtm保存する。  htm保存できるのですが、ファイル名が「●●●.xls.htm」  となってしまい、元のファイル名の.xlsの拡張子が付いたままです。  ファイル名を変えず、「●●●.htm」となるようにしたいです。 どうぞ宜しくお願い致します。 (1)サブフォルダ内の全ブックを開く Sub 全ブックを開く() Dim パス名 As String Dim ファイル名 As String パス名 = ThisWorkbook.Path & "\web保存\" ファイル名 = Dir(パス名 & "*.xls*") Do While ファイル名 <> " " Workbooks.Open パス名 & ファイル名 ファイル名 = Dir() Loop End Sub (2)開いたファイルをhtm保存する Sub htm保存() Dim wb As Workbook Dim wbname As String For Each wb In Workbooks wb.Activate If wb.Name <> ThisWorkbook.Name Then wb.SaveAs FileName:=ThisWorkbook.Path & "\" & wb.Name & ".htm", FileFormat:=xlHtml, CreateBackup:=False wb.Close savechanges:=False End If Next End Sub

  • エクセルでブックを閉じたときマクロを終了させるには

    現在、以下のようなマクロを組んでいます。 --------------------------------------- Dim 利用制限時間 As Integer Private Sub Workbook_Open() If Not ThisWorkbook.ReadOnly Then 利用制限時間 = 10 '分 + 起動時刻:Now 警告時刻 = Now + 10 * TimeValue("00:01:00") '分に変換 Application.OnTime 警告時刻, "ThisWorkbook.利用制限ご注意" End If End Sub Private Sub 利用制限ご注意() 警告文 = "共有ファイルを開いて" + CStr(利用制限時間) + "分経過しました。" + vbCrLf 警告文 = 警告文 + "使用しない場合は終了してください。" MsgBox 警告文, vbCritical, "共有ファイルの利用について" Workbooks("共有ファイル.xls").Close End Sub --------------------------------------- しかし、10分たたずにブックのみ終了し、エクセルのみの起動をしていても10分後には、「共有ファイルを開いて10分経過しました」と出てきます。 エクセルを終了させればよいのでしょうが、ブックを終了させただけでマクロも同時に終了できないでしょうか?

  • excelファイルが意図せず起動

    下記を参考にして、起動時にタイマーを設定してexcelファイルを5分後に自動的に 保存・終了するようにしています。 http://okwave.jp/qa/q2911086.html しかし実際5分を待たず、手動でそのexcelファイルを終了した場合、 後でそのexcelファイルが自動で起動して、そのまま終了しているようです。 この症状をなくしたい場合どのように、記述を加えればよいか教えていただけないでしょうか? 記述は下記です。 '標準プロシージャ Public Operated As Boolean Sub SetTimer() Application.OnTime Now + TimeValue("00:05:00"), "CloseMe" End Sub Sub CloseMe() If Operated Then Operated = False SetTimer Exit Sub End If 'ブックの上書き保存 ActiveWorkbook.Save ' 保存確認を避けるため、保存済みにする ThisWorkbook.Saved = True ' 他にブックが開いていなければ、Excelを終了する If Workbooks.Count <= 1 Then Application.Quit ' 本ブックをClose ThisWorkbook.Close False End Sub 'ワークブックプロシージャ Private Sub Workbook_Open() Operated = False SetTimer End Sub Private Sub Workbook_BeforePrint(Cancel As Boolean) Operated = True End Sub Private Sub Workbook_Deactivate() Operated = True End Sub Private Sub Workbook_Activate() Operated = True End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) Operated = True End Sub

  • アクセスからエクセルのマクロを実行したいのですが

    Sub エクセルのVBA実行する() Dim xlsWB As Object Dim MyFileName As String MyFileName = "C:\test.xlsx" Set xlsWB = GetObject(MyFileName) xlsWB.Application.Run xlsWB.Name & "!マクロ" Set xlsWB = Nothing End Sub と言うコードを作ったのですが エクセルファイルにはパスワードがかかっています。 パスワード付のエクセルファイルを開きマクロを実行するにはどうすればいいでしょうか?

専門家に質問してみよう