アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記のコードを実行すると、終了後次回立ち上げたとき、シートの保護が解除されています。
コードではオブジェクトを含めてシートを保護し、終了時には「保存」をしているのですが、なぜか次の立ち上げでは保護が解除されています。
原因がわかりません。お助けください。

Sub Test01()
Dim s, i, cr
With ActiveSheet
.Protect Password:="aaa", DrawingObjects:=False, Contents:=True, Scenarios:= _
True, UserInterfaceonly:=True 'オブジェクトのみ保護解除
Cells.Interior.ColorIndex = 1 'シートを黒色に
Set s = .Shapes.AddShape(msoShape4pointStar, 100#, 125#, 200#, 200#) '星を配置
s.Fill.Visible = msoTrue
s.Fill.Solid
Randomize
cr = Int((30 * Rnd) + 1)
s.Fill.ForeColor.SchemeColor = cr '色をランダムに
For i = 1 To 300 '点滅
s.Visible = False
DoEvents
s.Visible = True
DoEvents
Next
s.Delete '星を削除
.Protect Password:="aaa", DrawingObjects:=True, Contents:=True, Scenarios:= _
True, UserInterfaceonly:=True 'オブジェクトも保護
Cells.Interior.ColorIndex = 0 'シートをもとにもどす
End With
ActiveWorkbook.Close '終了する
End Sub

A 回答 (2件)

こんにちは。



原因は、Protectで、UserInterFaceonly を使った時のバグです。

最後のProtectからそれを外してください。
処理前にはそれ付きでProtectしてますから、
外しても問題は無いですよね。

もちろん最後の
Cells.Interior.ColorIndex = 0 'シートをもとにもどす
と順番を逆にしないといけませんが。

-------------------------------------------------
Cells.Interior.ColorIndex = 0 'シートをもとにもどす

.Protect Password:="aaa", DrawingObjects:=True, Contents:=True, Scenarios:= _
True'オブジェクトも保護
--------------------------------------------------

以上です。

この回答への補足

ありがとうございます。

バグでしたか!?

ただし、2003では解消されているようですね。
今、手元にある2003でやってみましたが再現できませんでした。

連休明けに2000で試してみます。

補足日時:2005/03/19 17:08
    • good
    • 0
この回答へのお礼

2000で確認がとれました。
おっしゃるとおりでした。
ありがとうございました。

お礼日時:2005/03/22 13:03

面白いプログラムですね。



さて、私のPCでも動作確認に対しました。
Excel2003

Sheet1にてマクロを起動させました。
終了後、一度Excel自体も終了し起動しましたが、
Sheet1は保護されてましたよ。
当然他シートは保護されてませんけどね。(ActiveSheet)

この回答への補足

早速ありがとうございます。
エクセルのバージョンを書かなかったですね、すみません。2000です。

話を簡単にするために下記のように書き直して試しました。

Sub HENDAYO()
ActiveSheet.Protect Password:="aaa", DrawingObjects:=True, Contents:=True, Scenarios:= _
True, UserInterfaceonly:=True ActiveWorkbook.Close
End Sub

やはり保護されていません。
ひょっとして保存されてないのかとおもい、シートに変更を咥えたらちゃんと反映してましたので、保護だけが反映しないようです。
ActiveWorkbook.Saveを書き加えれば保護されてます。
変だよ~!

補足日時:2005/03/18 17:31
    • good
    • 0
この回答へのお礼

ごめんなさい。
コードの改行が変になっちゃいました。

Sub HENDAYO()
ActiveSheet.Protect Password:="aaa", DrawingObjects:=True, Contents:=True, Scenarios:= _
True, UserInterfaceonly:=True
ActiveWorkbook.Close
End Sub

以上です。

お礼日時:2005/03/18 17:38

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