人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

最後の質問!
力が無いくせにチャレンジし後に引けなくなりました。
どうか皆様のお知恵拝借したく宜しくお願い致します。

コメント欄のコードを見て下さい。

ファイルは常にシートの保護がかかっている状態(またはマクロが動作し終わった後も保護がかかる状態)ということを念頭に置いておいて下さい。

やりたいこと

1)タイムカードのシートはこの内容でもマクロ開始前・開始後もきちんとシートの保護がかかった状態になりますが、
業務報告書のシートに、シートの保護をかけると、
業務報告シートに移った途端動かない・または不明な動作をする。
業務報告書のシートにあらかじめシートの保護がかかった状態でも、マクロが動作し、尚且つマクロを動かした後でも
業務報告シートに、シートの保護がかかっている状態にする。

2)ファイル名を変えても何ら問題なくマクロが動くようにしたい。
(これは何ら問題ないとは思いますが念の為に書いておきます)

お願い致します。
結果、全てできた場合、ポイントははずみます。

●質問者: msvista
●カテゴリ:コンピュータ
✍キーワード:コメント欄 コード タイムカード チャレンジ ファイル
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● Mook
●200ポイント ベストアンサー

質問に対する回答としては、シート保護に関して処理の前後に書かなくとも ThisWorkbook の下に

 ActiveSheet.Unprotect Password:="1111"
 ActiveSheet.Protect Password:="1111", DrawingObjects:=True, contents:=True, UserInterfaceOnly:=True

と書いておくことで、

・マクロを無効にした場合シート保護がかかった状態のままとなる。

・ファイルをどのタイミングで終了しても(途中・保存してもしなくても)、シートに保護がかかった状態になる。

ことが実現されます。

(標準モジュールからはProtect、Unprotectの記述を削除します。)



回答としては直接関係ありませんが、下記にコメントされたコードの不要な部分をまとめると次のようになります。

Sub ClearAll()
 ActiveSheet.Range("B2,D2,D8:F38").ClearContents
 Sheets("ジョブ?").Cells.ClearContents
 Sheets("タイムカード").Range("B2,D2,D8:F38").ClearContents

 With Sheets("業務報告書")
 Range("A12:A51,D12:D51,AI12").ClearContents
 With Range("A12:A51,D12:D51")
 With .Borders
 .LineStyle = xlContinuous
 .Weight = xlThin
 .ColorIndex = xlAutomatic
 End With
 .Borders(xlInsideHorizontal).Weight = xlHairline
 .Interior.ColorIndex = 35
 End With
End Sub

Sub データ消去()
 If vbYes = MsgBox("すべてクリアしてもいいですか?", vbYesNo, "確認") Then
 ClearAll
 End If
End Sub

Private Sub CommandButton1_Click()
 ThisWorkbook.Saved = True
 ThisWorkbook.Close
End Sub

Sub CloseFile()
 If MsgBox("上書きをしてもいいですか", vbYesNo) = vbYes Then
 ThisWorkbook.Save
 Else
 ThisWorkbook.Saved = True
 End If
 ThisWorkbook.Close
End Sub

ただし、先頭の

ActiveSheet.Range("B2,D2,D8:F38").ClearContents

はデータ消去を実行した(そのトリガとなるボタンがある)ときにアクティブなシートが対象になりますので、

Sheets(シート名).Range("B2,D2,D8:F38").ClearContents

と修正したほうがよいでしょう。

もしこれが「タイムカード」シートであるなら、記述自体2重になっているので不要となります。


http://officetanaka.net/excel/vba/speed/s2.htm

http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_030_090.html

◎質問者からの返答

ありがとうございます。

ws.Unprotect Password:="1111"

このコマンドを使うとデバックは中断します。

と表示されます。

またファイルを開くとパスワードが違いますと表示されます。

パスワードは全て”1111”なのですが。

ちなみに複数のシートに、シートの保護をかけたいので

コメント欄の内容を試しています。

あと一歩なのですが・・・

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ