Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12982 / 13646 ツリー ←次へ | 前へ→

【7624】Protect UserInterFaceonly:=Trueについて ろば 03/9/10(水) 14:45 質問
【7626】Re:Protect UserInterFaceonly:=Trueについて INA 03/9/10(水) 16:36 回答
【7629】Re:Protect UserInterFaceonly:=Trueにつ... Asaki 03/9/10(水) 17:18 発言
【7630】Re:Protect UserInterFaceonly:=Trueにつ... ろば 03/9/10(水) 18:28 お礼
【7631】Re:Protect UserInterFaceonly:=Trueにつ... BOTTA 03/9/10(水) 18:34 回答
【7632】Re:Protect UserInterFaceonly:=Trueにつ... Asaki 03/9/10(水) 19:25 発言
【7633】Re:Protect UserInterFaceonly:=Trueにつ... BOTTA 03/9/10(水) 20:10 お礼
【7635】Re:Protect UserInterFaceonly:=Trueにつ... INA 03/9/10(水) 20:52 回答
【7637】Re:Protect UserInterFaceonly:=Trueにつ... Asaki 03/9/10(水) 21:32 回答
【7638】Re:Protect UserInterFaceonly:=Trueにつ... ろば 03/9/11(木) 0:17 発言
【7639】Re:Protect UserInterFaceonly:=Trueにつ... INA 03/9/11(木) 8:18 回答

【7624】Protect UserInterFaceonly:=Trueについて
質問  ろば  - 03/9/10(水) 14:45 -

引用なし
パスワード
   シートの保護をVBAで実行する場合のことで
質問させていただきます。
VBAでのみシートの変更が可能であるように
保護をかけるつもりで、

Private Sub Workbook_Open()

  Dim i As Integer

  For i = 1 To Sheets.Count
  Sheets(i).Protect UserInterFaceonly:=True, Password:="password"
  Next i

End Sub

と書きましたが、VBAでセルの書き込みができません。
この、ProtectメソッドのUserInterFaceonly:=Trueの部分は
はプロシージャを出ると効力を持たなくなるのでしょうか。
ブックを閉じるまで、効力を持たせる方法をご存知でしたら
お教えください。

【7626】Re:Protect UserInterFaceonly:=Trueにつ...
回答  INA  - 03/9/10(水) 16:36 -

引用なし
パスワード
   >VBAでのみシートの変更が可能であるように保護をかけるつもりで、
>
>Private Sub Workbook_Open()
>  Dim i As Integer
>
>  For i = 1 To Sheets.Count
>  Sheets(i).Protect UserInterFaceonly:=True, Password:="password"
>  Next i
>End Sub
>
>と書きましたが、VBAでセルの書き込みができません。
>この、ProtectメソッドのUserInterFaceonly:=Trueの部分は
>はプロシージャを出ると効力を持たなくなるのでしょうか。
>ブックを閉じるまで、効力を持たせる方法をご存知でしたら
>お教えください。
マクロで保護を掛けても、手動の場合と同じです。
1度保護を掛けたら、解除しない限り継続します。
当然、保護中はマクロでも保護の影響を受けます。

【7629】Re:Protect UserInterFaceonly:=Trueにつ...
発言  Asaki  - 03/9/10(水) 17:18 -

引用なし
パスワード
   みなさま、こんにちは。

>VBAでセルの書き込みができません。
この処理の直前に
MsgBox Sheet1.ProtectionMode
という処理を入れたら、何が表示されるでしょうか?
"True"なら UserInterFaceonly のモードになっているということのようです。

【7630】Re:Protect UserInterFaceonly:=Trueにつ...
お礼  ろば  - 03/9/10(水) 18:28 -

引用なし
パスワード
   ▼Asaki さん:
>みなさま、こんにちは。
>
>>VBAでセルの書き込みができません。
>この処理の直前に
>MsgBox Sheet1.ProtectionMode
>という処理を入れたら、何が表示されるでしょうか?
>"True"なら UserInterFaceonly のモードになっているということのようです。

当初、ThisWorkBook モジュールの中の
Private Sub Workbook_Open()プロシージャに
書いていました。そうすると、
MsgBox Sheet1.ProtectionMode
の表示は、Falseでした。
しかし、別の方法を考えて、
VBAを動かすユーザフォームのモジュールの中の
Sub UserForm_Initialize()プロシージャ
に書くと、表示はTrueになって、VBAからの
書き込みができるようになりました。

理由は良くわからないもものの、おかげさまで
何とか解決しそうです。謝謝。

【7631】Re:Protect UserInterFaceonly:=Trueにつ...
回答  BOTTA  - 03/9/10(水) 18:34 -

引用なし
パスワード
   ろばさん、こんにちは。
UserInterFaceOnlyは、一度保存してしまうと無効になるようです。

Private Sub Workbook_Open()
  Dim i As Integer

  For i = 1 To Sheets.Count
    ' ↓一度解除して
    Sheets(i).Unprotect ("password")
    ' ↓再度、Protect
    Sheets(i).Protect UserInterFaceOnly:=True, Password:="password"
  Next i
End Sub

としてみては。

【7632】Re:Protect UserInterFaceonly:=Trueにつ...
発言  Asaki  - 03/9/10(水) 19:25 -

引用なし
パスワード
   >UserInterFaceOnlyは、一度保存してしまうと無効になるようです。

無効になるのは、保存ではなく、閉じた場合ではないでしょうか?
2000では、ブックを閉じない限り、無効にはならないようですが。

【7633】Re:Protect UserInterFaceonly:=Trueにつ...
お礼  BOTTA  - 03/9/10(水) 20:10 -

引用なし
パスワード
   Asakiさん、こんばんは。
>>UserInterFaceOnlyは、一度保存してしまうと無効になるようです。
>
>無効になるのは、保存ではなく、閉じた場合ではないでしょうか?
>2000では、ブックを閉じない限り、無効にはならないようですが。
おっしゃるとおりです。
「保存して閉じてもう一度開くと」と言いたかったのです。

【7635】Re:Protect UserInterFaceonly:=Trueにつ...
回答  INA  - 03/9/10(水) 20:52 -

引用なし
パスワード
   何をしたいかという点から、もう一度・・・

>VBAでのみシートの変更が可能であるように保護をかけるつもりで
ということは、
1.シートの保護を手動で掛けてパスワードを設定しておく。
2.マクロを実行するとシートの保護を解除して、シートを処理(編集)する。
3.マクロ終了時に、再度パスワードを掛けてシートを保護する。

これでマクロを実行しているときのみ編集されることになります。
また、マクロを無効で開いても、シートは保護されていて編集不能となる。

 勘違いしているかな・・・

【7637】Re:Protect UserInterFaceonly:=Trueにつ...
回答  Asaki  - 03/9/10(水) 21:32 -

引用なし
パスワード
   >1.シートの保護を手動で掛けてパスワードを設定しておく。
>2.マクロを実行するとシートの保護を解除して、シートを処理(編集)する。
>3.マクロ終了時に、再度パスワードを掛けてシートを保護する。
>
>これでマクロを実行しているときのみ編集されることになります。
>また、マクロを無効で開いても、シートは保護されていて編集不能となる。

似たようなことですが、
1.シートの保護を手動で掛けてパスワードを設定しておく。(これは同じ)
2.ブックオープン時に、UserInterfaceOnly:=True で再度プロテクトをかける
でも上手くいくかと思います。

これだと、
>また、マクロを無効で開いても、シートは保護されていて編集不能となる。
も満たされます。

ただ、質問者の方は、この方法で上手くいかなかったようなので、そこが???なんですが。
Openからセルへの書き込み処理に至る途中で、UserInterfaceOnly:=True でないモードで、
再度Protectを実行していた、という可能性が考えられますが、他にも原因があるんでしょうか。

【7638】Re:Protect UserInterFaceonly:=Trueにつ...
発言  ろば  - 03/9/11(木) 0:17 -

引用なし
パスワード
   ▼BOTTA さん:
>ろばさん、こんにちは。
>UserInterFaceOnlyは、一度保存してしまうと無効になるようです。
>
>Private Sub Workbook_Open()
>  Dim i As Integer
>
>  For i = 1 To Sheets.Count
>    ' ↓一度解除して
>    Sheets(i).Unprotect ("password")
>    ' ↓再度、Protect
>    Sheets(i).Protect UserInterFaceOnly:=True, Password:="password"
>  Next i
>End Sub
>
>としてみては。

通常、ユーザフォーム上のオブジェクトを使って、フォームへの
書き込み等をしますので、
Sub UserForm_Initialize()プロシージャに
Sheets(i).Protect UserInterFaceOnly:=True, Password:="password"
を書きましたら、閉じて開いても、VBAを使っての書き込みができたので
取り合えず、用が足りました。
しかし、本来はPrivate Sub Workbook_Open()に書くべきなのでしょうか...?

【7639】Re:Protect UserInterFaceonly:=Trueにつ...
回答  INA  - 03/9/11(木) 8:18 -

引用なし
パスワード
   >しかし、本来はPrivate Sub Workbook_Open()に書くべきなのでしょうか...?
Openで、UserFormをshowしているのであれば、同じ事ですので、
作者の好みだと思いますよ。
まあ、UserFormの処理ではなく、ブックの処理なので、Workbook_Openに
記述した方が、分かり易いかもしれないですね。

12982 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free