- ベストアンサー
エクセル「読み取り専用」を変更出来なくする設定は?
エクセル2000です。 BOOKの属性を「読み取り専用」としているのですが、この属性を変更不可と出来ないものでしょうか?設定したときのやりかたと同じですが、開く前のBOOKのアイコンを右クリックして「プロパティ」の「全般」で、中にある「属性」の「読み取り専用」のチェックをはずすと簡単に変わってしまいます。 VBAでWorkbook_BeforeSaveを使って上書き保存が出来ないようにすることは十分可能でしょうが、できればせっかく用意されている「読み取り専用」という属性を活かしたいと思い質問いたしました。 よろしくおねがいいたします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
結局、EXCELに詳しい人には何の効果もありませんが こんな方法も、あるよ程度で Private Sub auto_oren() ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly, Notify:=False End Sub Sub 解除() ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, Notify:=True End Sub 上記をコピペして、保存終了 ファイルを開いて、マクロを有効(無効にされると意味が無くなる) 「読み取り専用」になるでしょ 誤保存の予防ぐらいにはなるかな? 参考までに
その他の回答 (7)
- onlyrom
- ベストアンサー率59% (228/384)
またまたまた登場、onlyromです。 イルカに怒られたらしいですね。。(^^;;; ヘルプもGoogleも、GetAttrで検索してみましょう。 今回の質問関連についてのアドバイス(と言うほどでもないですが)はこれで終了ということで。。(^^;;; また、色々な質問を期待しています。
お礼
本当に何度もすみませんでした。 ヘルプでGetAttrで検索しましたがNotifyについては一切記載がありませんでした。Gogleでやっと見つけました。 ただ、VBAで開く際の使用例(VBAでOpenするときの)ばかりで、保存の際の例は見つけられませんでした。 多分、開いた際の他で使用中のメッセージの違いだろうとあたりをつけ、実験で確かめようと、会社のサーバーに、引数をそれぞれFalseとTrueにした2つを置いて、開いた状態で他のPCからも開いてみました。 残念ながら結果に差異は見つけられませんでした。 あきらめます。
- onlyrom
- ベストアンサー率59% (228/384)
またまた登場、onlyromです。 >ただ、下で質問したNotifyはヘルプにも見当たらないのですが・・・。 えっ?? 当方のヘルプ(xl2000)にはちゃんと載ってますが。。(^^;;; ヘルプを読む限りにおいては、 その引数は、省略(TRUE)した方がいいような。。。。 後は、MSDNやGoogleで調べてみましょう!!
お礼
何度もありがとうございます。 わたしの2000のヘルプの使い方がおかしいのかもしれません。 VBE画面のメニューから「ヘルプ」、「MicrosoftVisualBasicヘルプ」でイルカが出てきます。「何について調べますか?」と出るので「Notify」といれて検索を押すと、「質問の意味がわかりません」と怒られてしまいます。 もちろんGoogleでも検索しましたが、Notify自体についての解説が見つけられませんでした。 すみません。
- onlyrom
- ベストアンサー率59% (228/384)
>GetAttr(ThisWorkbook.FullName) = vbReadOnly >では、常にFalseになってしまいます。なぜでしょう? ファイルの属性というのは複数設定できますよね? 読み取り専用とか、隠しファイルやアーカイブ等。 デフォルトではアーカイブ属性がついています。 ゆえに、 ReadOnlyのみついてると思っても アーカイブ属性もついてるので上記コードではできないのです。 Msgbox GetAttr(ThisWorkbook.FullName) としてしてみればそれらが数値で表示されます。 数値の意味は、GetAttrのヘルプ参照のこと!! で、ReadOnlyのチェックはどうするかというと、 AND演算子を使って、 if GetAttr(ThisWorkbook.FullName) And vbReadOnly Then とします。 また簡単には ReadOnlyプロパティを使って、 if Thisworkbook.ReadOnly then なお、アーカイブ属性など不明な用語はご自分でお調べください。(^^;;;
お礼
onlyromさま、ありがとうございます。 If ThisWorkbook.ReadOnly Then 判定出来るんですね! とても助かりました。 > 不明な用語はご自分でお調べください。 はい、おっしゃるとおりでございます。 ただ、下で質問したNotifyはヘルプにも見当たらないのですが・・・。
- hige_082
- ベストアンサー率50% (379/747)
Private Sub auto_open() On Error Resume Next ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly, Notify:=False End Sub 一行追加してください
お礼
何度もありがとうございます。 Thisworkbookモジュールに以下のコードで記載しようと思いますが、後学のため「読み取り専用」かどうかを取得できないものかと思い質問いたしました。 あと、何度も質問してもうしわけないのですが、Notify:=False は何をしているのでしょうか? Private Sub Workbook_Open() On Error Resume Next ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly, Notify:=False On Error GoTo 0 'その他のコード End Sub
補足
GetAttrで取得できるようなのですが、 GetAttr(ThisWorkbook.FullName) = vbReadOnly では、常にFalseになってしまいます。なぜでしょう? 失敗例 'Private Sub Workbook_Open() ' If GetAttr(ThisWorkbook.FullName) = vbReadOnly Then ' MsgBox "このファイルは「読み取り専用」です。変更した内容を保存する場合は別名で保存してください。" ' Else ' ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly, Notify:=False ' MsgBox "このファイルを既定の「読み取り専用」に戻しました。" ' End If 'その他のコード 'End Sub 現在の応急対応 Private Sub Workbook_Open() 'その他のコード MsgBox GetAttr(ThisWorkbook.FullName) = vbReadOnly On Error GoTo msg ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly, Notify:=False MsgBox "このファイルを既定の「読み取り専用」に戻しました。", vbExclamation Exit Sub msg: MsgBox "このファイルを「読み取り専用」です。変更した内容を保存する場合は別名で保存してください。", vbInformation End Sub
- hige_082
- ベストアンサー率50% (379/747)
#3です 間違えた Private Sub auto_oren()'・・・× Private Sub auto_open()'・・・○ に、訂正です ごめん
お礼
ありがとうございました。 了解です。
- onlyrom
- ベストアンサー率59% (228/384)
テンプレート(xlt)にしておくとか。 ただ、VBAにしろ何にしろそれなりに詳しい人がいたらダメですが。
お礼
テンプレートですか、考えたこともありませんでした。 検討します。 ありがとうございました。
- will_a
- ベストアンサー率22% (4/18)
2000は手元にないんですが、 名前をつけて保存する際のダイアログ中に、 ツール→全般オプションでパスワード設定をすれば、書き込み不可にできるのではないでしょうか
お礼
さっそくありがとうございます。 書き込みパスワードの設定で書き込みを不可とする方法は存じておりますが、この方法だと開く際にパスワードを要求されてしまいます。 開くのは誰でも開け、ロックされていないところは自由に書き込みもできるようにしたいけど、そのまま上書き保存されては困るということなんです。 勝手を申してすみません。 (o。_。)oペコッ
お礼
ありがとうございます。 これはいい方法ですね! ただ、もとのBOOKが読み取り専用だとエラーになるようです。 もとのファイルが読み取り専用だと何もしない。 そうでなければ読み取り専用にするというようにするにはどう変えればよいのでしょうか?