• ベストアンサー

エクセルVBA/原因不明の保護解除?!

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

質問者が選んだベストアンサー

  • ベストアンサー
  • taocat
  • ベストアンサー率61% (191/310)
回答No.2

こんにちは。 原因は、Protectで、UserInterFaceonly を使った時のバグです。 最後のProtectからそれを外してください。 処理前にはそれ付きでProtectしてますから、 外しても問題は無いですよね。 もちろん最後の Cells.Interior.ColorIndex = 0 'シートをもとにもどす と順番を逆にしないといけませんが。 ------------------------------------------------- Cells.Interior.ColorIndex = 0 'シートをもとにもどす .Protect Password:="aaa", DrawingObjects:=True, Contents:=True, Scenarios:= _ True'オブジェクトも保護 -------------------------------------------------- 以上です。

merlionXX
質問者

お礼

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

merlionXX
質問者

補足

ありがとうございます。 バグでしたか!? ただし、2003では解消されているようですね。 今、手元にある2003でやってみましたが再現できませんでした。 連休明けに2000で試してみます。

その他の回答 (1)

  • stouma
  • ベストアンサー率35% (142/399)
回答No.1

面白いプログラムですね。 さて、私のPCでも動作確認に対しました。 Excel2003 Sheet1にてマクロを起動させました。 終了後、一度Excel自体も終了し起動しましたが、 Sheet1は保護されてましたよ。 当然他シートは保護されてませんけどね。(ActiveSheet)

merlionXX
質問者

お礼

ごめんなさい。 コードの改行が変になっちゃいました。 Sub HENDAYO() ActiveSheet.Protect Password:="aaa", DrawingObjects:=True, Contents:=True, Scenarios:= _ True, UserInterfaceonly:=True ActiveWorkbook.Close End Sub 以上です。

merlionXX
質問者

補足

早速ありがとうございます。 エクセルのバージョンを書かなかったですね、すみません。2000です。 話を簡単にするために下記のように書き直して試しました。 Sub HENDAYO() ActiveSheet.Protect Password:="aaa", DrawingObjects:=True, Contents:=True, Scenarios:= _ True, UserInterfaceonly:=True ActiveWorkbook.Close End Sub やはり保護されていません。 ひょっとして保存されてないのかとおもい、シートに変更を咥えたらちゃんと反映してましたので、保護だけが反映しないようです。 ActiveWorkbook.Saveを書き加えれば保護されてます。 変だよ~!

専門家に質問してみよう