プロが教えるわが家の防犯対策術!

先日、下記のコードを教えて頂きました。
Private Sub Workbook_Open()
Dim tmp, dNow
tmp = Split(ThisWorkbook.Name, ".")
If Split(ThisWorkbook.Name, ".")(UBound(tmp)) <> "xlsm" Then
dNow = Format(Now, "yyyy/mm/dd")
With Worksheets("指定シート")
If dNow >= Format(.Range("D39"), "yyyy/mm/dd") _
And dNow <= Format(.Range("E39"), "yyyy/mm/dd") Then
MsgBox ("「締め切りが完了しました」"), 16
Exit Sub
End If
End With
End If
End Sub
D39~E39の期間中にブックを開くと警告文が表示されます。
警告文が表示され、「OK」を押すと次からは期間中でも警告文を非表示に出来る方法を教えてください。
このブックはテンプレート(ひな形)として使用しており、一度警告文が表示されれば役割は完了です。
よろしくお願いします。

質問者からの補足コメント

  • 回答ありがとう御座います。
    貴者のそのブックのセルに「警告文表示済み」を書き込んでおいて、
    VBAで判定する
    を利用したいのですが、
    詳しいコードを教えて頂けますか。
    よろしくお願いします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/01/21 12:22

A 回答 (4件)

多分こんな感じです。


検証していません。

If dNow >= Format(.Range("D39"), "yyyy/mm/dd") _
And dNow <= Format(.Range("E39"), "yyyy/mm/dd") _
And .Range("Z39").Value = "警告文表示済み"
Then
MsgBox ("「締め切りが完了しました」"), 16
.Range("Z39").Value = "警告文表示済み"
Exit Sub
End If
    • good
    • 0
この回答へのお礼

回答ありがとう御座います。
参考にさせて頂きます。

お礼日時:2023/01/21 13:57

こんにちは



実現するためには、「一度実行した」ことをどこかに記録しておく必要があります。

例えば、非表示シートを用意しておいて、実行したらその指定セルに「済」などと記入しておく。
(非表示シートではなくて、どこかの空きセルを利用しても良いです)
マクロの最初でこのセルをチェックして、記載があれば中断するような仕組みです。
(記入時に、マクロでブックを保存しておく必要があります)


他の方法としては、「当該マクロそのものをマクロから書き換える」という方法も考えられます。
こちらであれば、記録場所も不要になるので、非表示シートのようなものも不要です。
例えば、以下のような感じ。

Sub Delete_Open_Proc()
Const tgt = "Workbook_Open"
With ThisWorkbook.VBProject.VBcomponents("ThisWorkbook").CodeModule
.DeleteLines .ProcStartLine(tgt, 0), .ProcCountLines(tgt, 0)
End With
ThisWorkbook.Save
End Sub

※ コードの内容を理解できない場合は使用しないでください。
※ マクロからの変更を許可しておく必要があります。
    • good
    • 0
この回答へのお礼

回答ありがとう御座います。
参考にさせて頂きます。

お礼日時:2023/01/21 13:57

そのブックのセルに「警告文表示済み」を書き込んでおいて、


VBAで判定するのはいかがでしょうか?
この回答への補足あり
    • good
    • 0

>>次からは


それは無理。「OK」を押された事をプログラムの変数にメモして置かないと出来ないが、次回立ち上げた時にはリセットされてしまう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!