【入門編】【初心者】「読み取り専用推奨」属性を設定して別名保存し、他ユーザーによる不用意な編集を防止するセキュリティマクロ – PowerPoint VBA解析バイブル

スポンサーリンク
スポンサーリンク

「上書きミス」という悲劇を未然に防ぐ。配布用ファイルをスマートに作る「読み取り専用推奨」設定の極意

「ああっ! 修正版を作ったつもりが、マスターファイルを上書きしてしまった……」

プログラミングを学び始めたばかりの頃や、マクロの記録機能から一歩踏み出したばかりの時、誰もが一度は経験する「絶望の瞬間」があります。特に、皆さんが丹精込めて作ったプレゼン資料を社内やクライアントに配布する際、このミスは致命傷になりかねません。

こんにちは。今日は、そんな「うっかりミス」という名のバグを、技術の力で未然に防ぐためのスマートな手法をお伝えします。

今回のテーマは、「読み取り専用推奨」属性を自動で付与して、別名で保存するセキュリティマクロです。

「単に名前を変えて保存するだけなら、手動でもできるじゃないか」と思うかもしれません。しかし、エンジニアの視点は違います。「ミスが起こる余地を、設計段階でゼロにする」ことこそが、真の自動化なのです。

さあ、一緒にマスターしていきましょう。

1. 「読み取り専用」と「読み取り専用推奨」の違いを知る

まず、設計思想の整理から始めましょう。ここを混同すると、後で「思った通りに動かない!」と躓く原因になります。

  • 読み取り専用 (Read-Only):

ファイル自体に強力なロックがかかります。編集するにはパスワードが必要な状態です。これは「守り」が強すぎることがあり、受け取った側が「ちょっとメモを書き込みたいだけなのに……」とストレスを感じることもあります。

  • 読み取り専用推奨 (Read-only Recommended):

ファイルを開いた瞬間に、「このファイルは読み取り専用で開くことをお勧めします。読み取り専用で開きますか?」というダイアログを表示させます。

今回のゴールは後者です。「編集はできるけれど、まずは『読み取り専用』であることを意識させる」。この「優しさ」と「注意喚起」のバランスこそが、プロフェッショナルな配布資料の作法なのです。

2. 実装:配布用ファイルを自動生成するマクロ

それでは、実際にコードを書いていきましょう。
以下のコードは、「現在のファイル名に `_配布用` という文字を付け加えて、読み取り専用推奨設定をオンにして保存する」という動きをします。

Option Explicit

''' <summary>
''' 現在のプレゼンテーションを「読み取り専用推奨」設定にして、別名で保存するマクロ
''' </summary>
Sub SaveAsDistributionVersion()
    Dim currentPath As String
    Dim currentName As String
    Dim folderPath As String
    Dim extension As String
    Dim newFileName As String
    Dim newPath As String
    
    ' --- 1. エラーハンドリングの設定 ---
    ' 万が一、保存先が書き込み禁止だったり、ファイルが開けなかったりした場合に備えます
    On Error GoTo ErrorHandler

    ' --- 2. 現在のファイル情報の取得 ---
    ' ActivePresentationオブジェクトから、現在のパスとファイル名を取得します
    currentPath = ActivePresentation.FullName
    
    ' ファイルが一度も保存されていない(パスが存在しない)場合のガード
    If currentPath = "" Then
        MsgBox "このファイルはまだ一度も保存されていません。先に一度手動で保存してください。", vbCritical
        Exit Sub
    End If

    ' パス、ファイル名、拡張子をバラバラに分解します(ここが設計の肝です)
    folderPath = Left(currentPath, InStrRev(currentPath, "\"))
    currentName = Mid(currentPath, InStrRev(currentPath, "\") + 1)
    extension = Mid(currentName, InStrRev(currentName, "."))
    
    ' ファイル名から拡張子を除いた部分を取得
    Dim baseName As String
    baseName = Left(currentName, InStrRev(currentName, ".") - 1)

    ' --- 3. 新しいファイル名の構築 ---
    ' 元のファイル名に「_配布用」を付与します
    newFileName = baseName & "_配布用" & extension
    newPath = folderPath & newFileName

    ' --- 4. 属性の設定と保存実行 ---
    ' ここが本題!プレゼンテーションの「読み取り専用推奨」プロパティをTrueにします
    ActivePresentation.ReadOnlyRecommended = True
    
    ' SaveAsメソッドを使用して、新しいパスに保存します
    ' FileFormat:=ppSaveAsDefault は、現在の標準形式(.pptx等)で保存することを意味します
    ActivePresentation.SaveAs Filename:=newPath, FileFormat:=ppSaveAsDefault

    ' 完了通知
    MsgBox "配布用ファイルを作成しました:" & vbCrLf & newFileName, vbInformation, "完了"

    Exit Sub

ErrorHandler:
    ' エラーが発生した場合、ユーザーに分かりやすいメッセージを表示します
    MsgBox "エラーが発生しました。" & vbCrLf & _
           "エラー番号: " & Err.Number & vbCrLf & _
           "エラー内容: " & Err.Description, vbCritical, "エラー"
End Sub

3. コードの深層解剖:なぜこう書くのか?

「マクロの記録」では決して辿り着けない、プロの書き方のポイントを解説します。

① オブジェクトのプロパティを操る

コード内の `ActivePresentation.ReadOnlyRecommended = True`。
これが今回の魔法の言葉です。PowerPointという巨大なオブジェクトの中には、目に見えない膨大な「設定(プロパティ)」が眠っています。私たちはVBAを通じて、その中の特定のスイッチを「ON」にしているのです。

② 文字列操作の重要性(パスの分解)

`InStrRev` という関数を使っていますね。これは「文字列を後ろから検索して、指定した文字が何番目にあるかを探す」関数です。
ファイルパスは `C:\Users\Documents\Presentation.pptx` のように構成されていますが、どこがフォルダで、どこがファイル名かを正確に切り分けないと、保存時にファイルが壊れたり、意図しない場所に保存されたりします。
「文字列を正しく分解・結合する能力」は、自動化エンジニアにとっての基礎体力です。

③ エラーハンドリング(守りの設計)

`On Error GoTo ErrorHandler`。
これがないコードは、実戦では使えません。例えば、保存しようとしているフォルダが「読み取り専用」だった場合、マクロは突然止まり、ユーザーを混乱させます。エラーをキャッチして「何が起きたか」を伝える。これが、使う人を思いやるエンジニアの作法です。

4. 陥りやすいエラーと対策

このマクロを使う際に、初心者がハマりやすいポイントをいくつか挙げておきます。

1. 「一度も保存していない新規ファイル」で実行した

  • 原因:ファイルパスが存在しないため、`InStrRev` がエラーを起こします。
  • 対策:コード内の「ガード」部分(`If currentPath = “” Then`)がそれを防いでいます。

2. 「同名の配布用ファイル」が既に開いている

  • 原因:Windowsの仕様上、開いているファイルには上書き保存できません。
  • 対策:エラーハンドリングが起動し、エラー内容を表示します。実行前に、既に作成済みの配布用ファイルが開いていないか確認しましょう。

最後に:一歩先へ進むあなたへ

今回のマクロは、単に「ファイルを保存する」だけのものではありません。「作業用(マスター)」と「配布用」という、データのライフサイクル(寿命と役割)を明確に分けるための仕組みです。

「マクロの記録」は、いわば「決まった動きを録画する」ものです。
しかし、今回学んだように「もしエラーが起きたら?」「ファイル名をどう組み立てるか?」といったロジック(論理)を組み立てる力こそが、あなたの価値を高めます。

ここをクリアすれば、PowerPoint VBAの基本はバッチリですよ。
次は、PDFへの一括変換や、大量のファイル名の一括変更など、さらに高度な自動化の世界へ踏み出してみましょう。

応援しています。また次の記事でお会いしましょう!

タイトルとURLをコピーしました