質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

5009閲覧

あるファイルのVBAのマクロを常に有効にする

Tetsuya3456

総合スコア22

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/07/29 14:48

編集2019/08/21 14:24

こんばんは。

表題の通り、あるファイルのVBAのマクロを常に有効にして開けるようにしたいです。

・デジタル署名
・「信頼できる場所」の設定

は会社の規定上、実現不可でしたので、

https://www.saka-en.com/office/vba-open-the-macro-enabled-fibly/

のやり方を参照してダミー用シートを作成して、コンテンツを有効化にしないと編集用シートが開けないようにしました。

私が実現したいマクロは、下記の通りです。

保存されていない状態(ワークブックのSavedプロパティがfalseの場合)で閉じる「保存しますか?」とメッセージが表示される。

→「はい」を選択すると、上書き保存をしてダミーシートのみを表示にして保存
→「キャンセル」を選択すると、前回上書き保存したところまでの状態でダミーシートのみを表示にして保存

上記URLのマクロは「キャンセル」を選択すると、閉じる処理がキャンセルされる形です。

何か良い方法があればご教授頂けると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Secret

2019/07/29 15:47

そのURLのサイトは閉鎖されていないですか? 何よりも質問者さんのコードを提示されるほうが良いかと思います。
guest

回答3

0

こんばんは。

教えて頂いた方法や自分でも色々試して、実際に使うユーザーに様々試してもらったもらった結果、下記の対応策になりました。

1.BeforecloseイベントにSavedプロパティがFalseの場合、「ファイルを保存しますか?」というMsgboxを出す。

2.「いいえ」が選択された場合、Savedプロパティをtrueにして「Workbooks.open Thisworkbook.path & Thisworkbook.name」で同じファイルを開いて保存していない部分の情報を破棄する。

3.ユーザーには「いいえ」を押して同ファイルが開いた後に再度×でファイルを閉じるようにしてもらう。

3の行動をユーザーにとってもらうことが少し面倒ですが、この方法が一番無難そうな形になりました。

回答を頂き、ヒントが得られました。
ありがとうございましたm(__)m

(2020/7/6 追記)
最終的にベストアンサーの方のやり方で実装することになりました。

追記がだいぶ遅くなってしまい、大変申し訳ありません。

投稿2019/08/08 13:43

編集2020/07/06 11:31
Tetsuya3456

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

質問を根底から覆すかもしれませんが、VBSを使うという手はどうでしょうか?

VBS

1Dim Obj 2 3Set Obj = WScript.CreateObject("Excel.Application") 4Obj.Visible = True 5CreateObject("WScript.Shell").AppActivate Obj.Caption 6Obj.Workbooks.Open "ここに起動するExcelファイルのフルパスを入力" 7Obj.Application.Run "ここに実行するプロシージャ名を入力"

上記のコードをメモ帳などに入力して、拡張子をvbsに変更します。
メモ帳の文字コードはANSIが良いです。UTF-8で保存するとエラーが出るかと思います。
(規定がANSIですので、気にする必要はないかもしれません)

VBSファイルを実行して、狙い通りに動けばOKです。

起動時に自動実行させる適当なプロシージャがない場合は、中身が空っぽのダミーのプロシージャを作って、それを指定してください。とにかく、VBSから1つでもプロシージャが動けば、他のプロシージャも警告なしで動くはずです。

投稿2019/07/30 05:54

Secret

総合スコア220

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tetsuya3456

2019/07/30 07:44

ご回答ありがとうございます。 VBSを知らなかったので、検索して試してみます! ありがとうございます。
guest

0

ベストアンサー

閉じる時にどうこうするのではなく、
保存時にダミー用シートを有効にして保存するようにするのはどうでしょう。

Private Sub Workbook_AfterSave(ByVal Success As Boolean) Sheets("Sheet2").Visible = True Sheets("Sheet1").Visible = False ActiveWorkbook.Saved = True End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Sheets("Sheet1").Visible = True Sheets("Sheet2").Visible = False End Sub

キャンセル時云々は
http://officetanaka.net/excel/vba/file/file03.htm
の、『ブックが変更されたか?』が参考になると思います。

投稿2019/07/30 00:54

torisan

総合スコア678

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tetsuya3456

2019/07/30 07:43

ご回答頂きありがとうございます。 AftersaveとBeforeSaveのイベントプロシージャは知りませんでした。 また、URLも非常にわかりやすい内容ですね! 試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問