• ベストアンサー

VBAでAccessから他の複数のExcelを操作するとき、マクロを無効にして開きたい

当社ではある報告のExcel雛型があり、各社員が雛型に入力したExcelそのものを社内メールに添付させて受け取っていますが、今回集約のためのAccessを作ってそのExcelの各セル番地を一覧で別のExcelに集約したいと考えています(一括して処理したいExcelの数は500件程度)。 Excel雛型には、各社員には余計な操作をさせたくないということで、メニューバー等々をVBAで非表示にしてあり、×ボタンも使用不可にしています(「保存して閉じる」ボタンを別に用意)。 ところが、以下のコードを雛型のExcelのThisWorkbookに入れているばっかりに、集約用のAccessからExcelを操作する際に、自分で仕込んだメッセージ(「×ボタン使用不可」)が表示されてしまい、最初のExcelをうまく閉じることができず、繰り返し複数のExcelを処理することができません。 *************************** Private Sub Workbook_BeforeClose(Cancel As Boolean) If CloseMode = False Then Cancel = True MsgBox "×ボタン使用不可" End If End Sub (※標準モジュールに Public CloseMode As Boolean を宣言して、別に用意した「保存して閉じる」ボタンをクリックしたときにCloseMode = Trueとしている。) *************************** そもそもExcelを開く際にマクロを無効にして開くことができれば閉じるときにこんなことにならずに済むと思うのですが。。。 Application.AutomationSecurity = msoAutomationSecurityForceDisable も試してみましたが、うまくいかないようです。 また、変数「CloseMode」に対して、集約用のAccessからExcelを開いたときに値を入れることができればいいとも思うのですが、スコープについて調べたところでは難しいかなと感じています。 (※Excel雛型のコードはさわれないので「参照設定」を変更するのもできないと思われます。) そんな小細工を施したExcelを何事もなく開いて中身のセル番地をコピーして閉じる方法をご存じでしたらご教授願います。 質問の内容もわかりにくくてすみません。。。 よろしくお願いいたします。<m(__)m>

質問者が選んだベストアンサー

  • ベストアンサー
  • Koba5
  • ベストアンサー率55% (11/20)
回答No.1

Application.EnableEvents = False を試してください 参考URL http://sei.qee.jp/docs/program/vba/excel/noMacro/index.html

edgwconan
質問者

お礼

早速の回答ありがとうございました! お礼が遅くなってすみません。 試したところ、うまくいきました。 この1行でよかったんですね。。。 いろいろ調べてみたんですが、これにはたどりつきませんでした。 本当にありがとうございます。<m(__)m> 参考URLも参考にさせていただきます。

その他の回答 (1)

回答No.2

Appliction.EnableEvents = False 以外では、 Application.Run <「CloseMode」を書き換えているサブルーチン> として「CloseMode」を変更することかな。 http://officetanaka.net/excel/vba/tips/tips09.htm

edgwconan
質問者

お礼

早速の回答ありがとうございます。 Appliction.Runもまったく知りませんでしたので勉強になります。 参照設定とか難しいこと考えなくてもこれでいけるんですね! ありがとうございました。<m(__)m>

関連するQ&A

  • エクセルVBAにて保存するとき

    Private Sub Workbook_BeforeClose(Cancel As Boolean) If MsgBox("エクセルを終了してもよろしいですか?", vbYesNo) = vbNo Then Cancel = True Exit Sub End If Application.DisplayAlerts = False Application.Quit End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) MsgBox "そのボタンでは保存できません。" & vbCrLf & _ "雛形は残しておきましょう" & vbCrLf & _ "" & vbCrLf & _ "ツールバーの「マクロなし出力」から保存できます。" Cancel = True End Sub という二つのマクロをThisworkbookにいれてあるんですが、 この二つを有効(今は2つ目を'でコメント状態にしてあるので保存可)にすると保存できなくて困っています。 二つを有効にした時はどのようにほぞんすればいいですか?

  • エクセルの特定シート(複数)を印刷不可にするVBA

    教えてください。VBA超初心者です。 エクセルで、特定の複数のシート(指定シート)を印刷不可にする方法はありますでしょうか? いろいろと調べてみたところ、特定シート(一つ)を指定する場合はわかりました。 BBシート印刷不可。 ========================== Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name <> "BB" Then Exit Sub MsgBox "印刷できません" Cancel = True End Sub '========================== できれば、3つあるシートのうち、 AAシートは印刷可能。 BBシートとCCシートは、印刷不可。 としたいのです。 ご伝授いただけると助かります。よろしくお願いします。

  • マクロ無効時に特定のシートを表示させない方法

    EXCEL[2010]上で印刷不可をマクロ(Visual Basic)設定したファイルを作成しております。 しかし、困ったことに、ファイルを開く時にマクロを無効化されてしまうと、印刷が可能となってしまうことに気が付きました。 そのため、「エクセル無効で開く場合は、sheet1(=何も情報を記載しない)を開き、有効で開いた場合にのみsheet2(=情報あり)を表示する」設定ができないものか悩んでおります。 過去の質問でも挙がっておりましたので、参考に試行錯誤してみたもののうまくいきません。 どなたかお助けいただけないでしょうか ちなみに、印刷不可の設定については、以下のとおり書いております。 Private Sub Workbook_BeforePrint(Cancel As Boolean) MsgBox "このExcelシートは、印刷できません", vbExclamation Cancel = True End Sub お手数をおかけします。 勉強不足と重々承知しておりますが、何卒ご教示いただければ幸いです。

  • エクセルマクロ

    エクセルマクロでダブルクリックしたら入力規制を解除するようにしたいです。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _ Cancel As Boolean) With Selection.Validation .Delete .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _ :=xlBetween .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With End Sub でうまくいったのですが、シートの保護をしていると対象セルを保護しない、にしていてもできません。 何かよい方法はありませんか? 入力規制をしてリストを選択にしている場所に、直接入力したい場合があるのでそれを簡単にダブルクリックで解除できないか、というのが狙いです。 よろしくお願い致します。

  • AccessからExcelが開かない

    Access2000 の●●mdb から Excel2007 のAAA.xls を開こうとしますが オートメーションエラー(サーバーによって例外が返されました) が表示され開きません。 ●●mdb と AAA.xls は同じフォルダーに入れてます。 Accessの「参照設定」では、   Microsoft Excel 12.0 Object Library を選んでます。 ボタン(Cmd1)を押して表示させたいので Private Sub Cmd1_Click() Dim Appexcel As New Excel.Application Dim wb As Excel.Workbook Dim strfile As String strfile = CurrentProject.Path & "\AAA.xls" Set Appexcel = New Excel.Application Set wb = Appexcel.Workbooks.Open(strfile) Appexcel.Visible = True End Sub のように書いてますが、どうもうまく開いてくれません。 どうすれば表示させることができますか。

  • エクセルのマクロ設定について

    クリックすると、日付が表示されるように、下記のマクロ設定してあります。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("C4:C30")) Is Nothing Then Exit Sub If ActiveCell = "" Then ActiveCell = Date Cancel = True End If End Sub C4~C30とG4~G30の2箇所にしたいのですが、式はどうしたらいいのでしょうか。 よろしくお願いします。

  • EXCEL VBA BeforePrintイベント時のプレビューについて

    お世話になります。 早速ですが、以下のコードでBeforePrintのイベントを利用していますが、 プリントボタンやCtrl+Pでは正常に動作するのですがプレビューボタンを押されたら Cancel=Trueが効かず、プレビューが表示され、ユーザーフォームも開くので Excelを制御出来なくなってしまいます。(タスクマネージャで落とすしかない) プレビューでもCancel=Trueにする方法、またはプレビュー自体を禁止する方法 がありましたらご教授ください。 Private Sub Workbook_BeforePrint(Cancel As Boolean) If Worksheets("設定").Range("B31").Value = True Then  Cancel = True  F_Print.Show 'F_Printはユーザフォーム End If End Sub 環境:Excel2000 SP3

  • VBAでファイルを閉じる時に、他のエクセルファイルを閉じるには?

    VBAで、 Private Sub Workbook_Open() Workbooks.Open FileName:="バス時刻表.xls",ReadOnly:=True End Sub で、バス時刻表.xlsを自動的にオープンした後、 閉じる時に、 Private Sub Workbook_BeforeClose(Cancel As Boolean) Workbooks("バス時刻表.xls").Close End Sub で記述したら、エラーとなります。 どのようにすればいいのでしょうか? よろしくお願いします。

  • Excel VBA 終了時の処理

    Excelを終了時にフルスクリーン(リボンなどが非表示の状態)から解除するコードを書きたいのです。 Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.DisplayFullScreen = False 'フルスクリーン化解除 End Sub というコードを書きましたが、Excel自体を×ボタンでクローズした場合は正常に動きますが、 Excelを起動したままPCをシャットダウンすると解除されません。 次回Excelファイルを開くときにはフルスクリーンで出てきてしまいます。 シャットダウン時には、Excelも勝手にクローズされ、その際にマクロが動くものだと思っていましたが... これを回避するコードなどありましたらご教授ください。 環境:windows7 Excel2010 (2013でも動くようにしたいです)

  • フォームのボタンからのみexcelを終了したい

    おねがいします。 都合上、フォームのボタンからだけexcelを終了したのです。 Private Sub CommandButton1_Click() Application.DisplayAlerts=False Application.Quit End Sub それに伴い、 右上のexcelのxボタン、シートのxボタンを無効化または非表示にしたいです。 Private Sub Workbook_BeforeClose(Cancel As Boolean)      If CloseMode = 0 Then     Cancel = 1   End If End Sub これで、エクセルxボタンは無効になりましたが、 フォームからの終了も出来なくなってしまいました。 フォームからのみ終了する方法を教えてください。

専門家に質問してみよう