LoginSignup
1
1

More than 3 years have passed since last update.

Excel VBA で シートを開くとき、必ずマクロを有効化してシートの更新をしてもらえるようにしてみた

Last updated at Posted at 2020-05-12

Excel VBA で シートを開くとき、必ずマクロを有効化してシートの更新をしてもらえるようにしてみた

Excelでワークブックを開くとき、セキュリティの警告が出ているとマクロが実行されない。
マクロ警告.png
これは、セキュリティ的には、本来正しい動き。
でも、マクロを動かしてもらわないと、業務が成り立たないときがある。

Excelで更新されたとき、この変更されたデータを、外部データに更新させるというマクロが組み込んでした。
しかし、Excelブックを開くとき、PC環境によってはマクロを有効化されないまま、シートだけを更新して、マクロが実行されない(ボタンを押すが、無反応の)まま、上書き保存して終わりが多い。

今回追加するマクロは、Excelブックを開いたとき、必ずマクロを有効化しないと、データ更新シートが表示されないようにした。
そのとき、必ずマクロを有効「コンテンツの有効化ボタン」を押してもらえるように、警告シートだけを表示するようにして、マクロを有効化できたら、業務で使うシートに表示を切り替えるようにした。
シート切り替え.png

警告シートの準備

コンテンツ有効化になっていないときは、Sheet1を表示するように、同じブック内に新たにシートを準備する。ここでは、Sheet1とした。
Sheet1以外のシートは非表示にしている。

追加するマクロ

マクロの有効化がされると、警告シートは非表示となり隠れ、そのほかのシートを表示する。
Excelブックを保存するときは、
 ・ Sheet1のみを再び表示
 ・ Sheet1以外のワークシートを非表示
にして、Excelブックを保存するようにマクロを作成してみた。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Call ctrlVisible(False)
End Sub

Private Sub Workbook_Open()
    Call ctrlVisible(True)
End Sub

Private Sub ctrlVisible(sheetMode As Boolean)
    If sheetMode = False Then
        Sheet1.Visible = True
    End If

    For Each objSheet In ThisWorkbook.Worksheets
        If objSheet.Name <> "Sheet1" Then
            objSheet.Visible = sheetMode
        End If
    Next

    If sheetMode = True Then
        Sheet1.Visible = False
    End If

End Sub
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1