下記のコードを実行すると、終了後次回立ち上げたとき、シートの保護が解除されています。
コードではオブジェクトを含めてシートを保護し、終了時には「保存」をしているのですが、なぜか次の立ち上げでは保護が解除されています。
原因がわかりません。お助けください。
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
No.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で試してみます。
No.1
- 回答日時:
面白いプログラムですね。
さて、私の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を書き加えれば保護されてます。
変だよ~!
ごめんなさい。
コードの改行が変になっちゃいました。
Sub HENDAYO()
ActiveSheet.Protect Password:="aaa", DrawingObjects:=True, Contents:=True, Scenarios:= _
True, UserInterfaceonly:=True
ActiveWorkbook.Close
End Sub
以上です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaでセルに入力したときに,その横にあるセルを保護し入力不可にするマクロを作りたいです。 2 2022/04/24 20:59
- その他(Microsoft Office) エクセル VBAについて 2 2022/09/21 22:21
- Visual Basic(VBA) ExcelVBA ドロップボックスで月を選択するとそれ以降のデータが残るようにしたい。 3 2022/12/16 14:53
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) VBAでシートの保護をかける際に「書式設定の変更」を有効にする 1 2023/04/17 18:18
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別のシートから値を取得するとき
-
特定の文字を含むシートだけマ...
-
VBA 入力月で該当シートを選択...
-
VBA 存在しないシートを選...
-
Excel VBA 複数行を数の分だけ...
-
別のシートを参照して計算する方法
-
ユーザーフォームに入力したデ...
-
実行時エラー1004「Select メソ...
-
excelのマクロで該当処理できな...
-
【ExcelVBA】全シートのセルの...
-
実行時エラー'1004': WorkSheet...
-
Excel チェックボックスにチェ...
-
セルのコピーで「オブジェクト...
-
エクセルVBAでダブルクリックを...
-
複数シートに色付きセル(条件つ...
-
重複するidをデータごとにまと...
-
一括印刷マクロ シート名を数字...
-
VBA 最終行まで数式をコピーする
-
Excel マクロについての相談
-
エクセルのシート名変更で重複...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
ユーザーフォームに入力したデ...
-
【ExcelVBA】全シートのセルの...
-
同じ作業を複数のシートに実行...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
XL:BeforeDoubleClickが動かない
-
ExcelVBA シート名を複数セルか...
-
実行時エラー'1004': WorkSheet...
-
VBA 存在しないシートを選...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ブック名、シート名を他のモジ...
-
【Excel VBA】Worksheets().Act...
-
ExcelのVBAのマクロで他のシー...
-
エクセルのシート名変更で重複...
-
特定の文字を含むシートだけマ...
-
シートが保護されている状態で...
-
Excel マクロについての相談
-
VBA 検索して一致したセル...
おすすめ情報