VBA練習問題
VBA100本ノック 80本目:読み取り専用で保存できないブックにする

VBAを100本の練習問題で鍛えます
公開日:2021-02-02 最終更新日:2021-02-03

VBA100本ノック 80本目:読み取り専用で保存できないブックにする


ブックを読み取り専用に設定し、かつ、上書き保存も名前を付けて保存も出来ないように設定する問題です。


ツイッター連動企画です。
ツイートでの見やすさを考慮して、ブック・シート指定等を適宜省略しています。

VBAテスト用のサンプルデータはご自身でご用意ください。


出題

出題ツイートへのリンク

#VBA100本ノック 80本目
このブックは変更してほしくないので、以下の動作にしたい。
・開かれたら読み取り専用に設定
・上書き保存や名前を付けて保存をしようとしたら、保存せずに強制的にブックを閉じる
・閉じる時の保存確認メッセージも出さない
※VBA作成中は気を付けて!


※少し追加訂正※
読み取り専用による、以下のメッセージが出てしまうのは構いません。

マクロ VBA 100本ノック


VBA作成タイム

この下に頂いた回答へのリンクと解説を掲載しています。
途中まででも良いので、できるだけ自分でVBAを書いてみましょう。


他の人の回答および解説を見て、書いたVBAを見直してみましょう。


頂いた回答

解説

読み取り専用にするには、Workbook_OpenでChangeFileAccessメソッドにxlReadOnlyを指定します。
閉じる・保存は、BeforeCloseとBeforeSaveです。
引数CancelにTrueを入れると、そのイベントはキャンセルされます。
Saved = Trueこれは保存後に変更されていない状態にします。

Private Sub Workbook_Open()
  Me.ChangeFileAccess xlReadOnly
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Me.Saved = True
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Cancel = True
  Me.Saved = True
  If Application.Workbooks.Count > 1 Then
    Me.Close SaveChanges:=False
  Else
    Application.Quit
  End If
End Sub

Sub 開発保存用()
  On Error Resume Next
  Application.EnableEvents = False
  Me.ChangeFileAccess xlReadWrite
  Me.Save
End Sub


最後の部分はVBA作成中の保存に使ったものをそのまま残しました。
イベントを入れた後では、保存できなくて何度か書き直した人もいるかも知れません、ゴメンナサイ。
一度経験しておけば実際に必要になった時に役立つと思います。
補足はありません。


補足

補足はありません。


サイト内関連ページ

第63回.ブックを開く(Open)
・Workbooks.Openメソッド ・Openメソッドの使用例 ・Openメソッドの戻り値の使い方 ・Workbooks.Addメソッド ・Openメソッドの関連記事
第64回.ブックを閉じる・保存(Close,Save,SaveAs)
・ブックを閉じる ・ブックを上書き保存 ・ブックに名前を付けて保存 ・ブックのコピーを保存 ・ブックを閉じる・保存の実践例
第124回.Workbookのイベントプロシージャー
・Workbookのイベント一覧 ・イベントプロシージャー追加のVBE操作 ・Workbook_Open:Workbookのイベント ・Workbook_BeforeClose:Workbookのイベント ・Workbook_SheetChange:Workbookのイベント
ブックが閉じる時に自動実行(Workbook_BeforeCloseとAuo_Close)
・Workbook_BeforeClose ・Auto_Close ・Workbook_BeforeCloseとAuto_Closeの実行順序 ・Workbook_BeforeCloseとAuto_Closeの違い




同じテーマ「VBA100本ノック」の記事

77本目:シート挿入イベント

・出題 ・頂いた回答 ・解説 ・補足 ・サイト内関連ページ
78本目:グラフのデータ範囲拡張
・出題 ・頂いた回答 ・解説 ・補足 ・サイト内関連ページ
79本目:Wordにセル範囲を図として挿入
・出題 ・頂いた回答 ・解説 ・補足 ・サイト内関連ページ
80本目:読み取り専用で保存できないブックにする
81本目:全フィルターの絞り込解除
・出題 ・頂いた回答 ・解説 ・補足 ・サイト内関連ページ
81本目:全フィルターの絞り込解除
・出題 ・頂いた回答 ・解説 ・補足 ・サイト内関連ページ
82本目:ブックのドキュメントプロパティを取得
・出題 ・頂いた回答 ・解説 ・補足 ・サイト内関連ページ
83本目:請求書を作成してPDF出力
・出題 ・頂いた回答 ・解説 ・補足 ・サイト内関連ページ
84本目:ブックの自動バックアップ
・出題 ・頂いた回答 ・解説 ・補足 ・サイト内関連ページ
85本目:請求日から入金予定日を算出
・出題 ・頂いた回答 ・解説 ・補足 ・サイト内関連ページ
86本目:全シートの総当たり表を作成
・出題 ・頂いた回答 ・解説 ・補足 ・サイト内関連ページ


新着記事NEW ・・・新着記事一覧を見る

TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.条件分岐(Select Case)|VBA入門
9.メッセージボックス(MsgBox関数)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ