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

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

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


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


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

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


出題

出題ツイートへのリンク

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


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

マクロ VBA 100本ノック


頂いた回答

解説

読み取り専用にするには、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)
他のブックを開く方法です。しかし、これが結構いろいろあるのです。Excelで開くことが出来るファイルはCSV等のテキストファイルもありますが、ここではエクセルファイル限定で説明します。テキストファイルやCSVについては、別の記事を参考にして下さい。
第64回.ブックを閉じる・保存(Close,Save,SaveAs)
ワークブックを閉じる場合や保存する場合のVBAの説明です。閉じる時に保存するか保存しないかを指定できます、また、ブックを保存するにも、上書きなのか別ファイルにするのか等によってVBAの記述がそれぞれ違ってきます。ブックを閉じる ブックを閉じるには、WorkbookのCloseメソッドを使用します。
第124回.Workbookのイベントプロシージャー
Workbookのイベントプロシージャーは、ブックに対し特定の操作(これがイベント)が行われた時に実行されます。イベントは、手動でもVBAでも、どちらで操作が行われても発生します。Workbookのイベントは多数用意されています。
ブックが閉じる時に自動実行(Workbook_BeforeCloseとAuo_Close)
Excelブックを閉じる時にVBAを自動実行させる方法として、Workbook_BeforeClose Auo_Close この2通りの方法があります。それぞれの簡単な説明と、動作の違いを解説します。Workbook_BeforeClose Workbook_Closeは、ブックが閉じられたときに起動されるブックの…




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

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


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

キーボード操作だけで非表示列を表示|エクセル雑感(2021-05-11)
変数を考えることはロジックを考える事|エクセル雑感(2021-04-11)
RangeオブジェクトのFor EachとAreasについて|VBA技術解説(2021-04-08)
PropertyのSetはLetでも良い|VBA技術解説(2021-03-31)
エクセル麻雀ミニゲーム|VBAサンプル集(2021-03-09)
VBA100本ノック 100本目:WEBから100本ノックのリストを取得|VBA練習問題(2021-03-03)
VBA100本ノック 魔球編:2桁の最小公倍数|VBA練習問題(2021-02-02)
Select Caseでの短絡評価(ショートサーキット)の使い方|VBA技術解説(2021-01-03)
VBA100本ノック 迷宮編:巡回セル問題|VBA練習問題(2020-12-31)
VBA100本ノック 魔球編:閉領域の塗り潰し|VBA練習問題(2020-12-16)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.Excelショートカットキー一覧|Excelリファレンス
3.RangeとCellsの使い方|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.ひらがな⇔カタカナの変換|エクセル基本操作
8.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
9.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
10.セルに文字を入れるとは(Range,Value)|VBA入門




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


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



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