EXCELのVBAマクロで、プログラミングをしてシート保護を
パスワードでロックするのですが、ウィンドウ枠の固定や解除までは、ロックできません。
ロックするには、どうしたらよいのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (1件)

ロックする方法はわかりませんがこういう方法もありますよ


----------------------------------------------------

メニューバーのウィンドウ枠固定又はウィンドウ枠固定の解除をメニューバーから非表示にしてシートを変更したら元に戻す
Sub a()
For Each i In CommandBars.ActiveMenuBar.Controls
If (i.Caption = "ウィンドウ(&W)") Then
For Each j In i.CommandBar.Controls
If (j.Caption = "ウィンドウ枠の固定(&F)") Then
j.Visible = False
End If
If (j.Caption = "ウィンドウ枠固定の解除(&F)") Then
j.Visible = False
End If
Next j
End If
Next i
End Sub


Sub b()
For Each i In CommandBars.ActiveMenuBar.Controls
If (i.Caption = "ウィンドウ(&W)") Then
For Each j In i.CommandBar.Controls
If (j.Caption = "ウィンドウ枠の固定(&F)") Then
j.Visible = True
End If
If (j.Caption = "ウィンドウ枠固定の解除(&F)") Then
j.Visible = True
End If
Next j
End If
Next i
End Sub

Private Sub Worksheet_Activate()
a
End Sub

Private Sub Worksheet_Deactivate()
b
End Sub

-----------------------------------------------------

意図しているものと違っていたらすみません
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルでウィンドウの枠固定が解除される

エクセルでウィンドウの枠を固定して使用していますが、たまに次に開いた時解除されてしまっていることがありますが、これはファイル毎に設定がかかっているのではないのですか? 解除されないようにするにはどのようにすればよいのかご存じの方教えてください。よろしくお願いします。

Aベストアンサー

> たまに次に開いた時解除されてしまっている
もしかして他の方も同じファイルを使用されているのでしょうか?

ウィンドウ枠はシート毎に設定がかかるようになっています。
「ツール」-「保護」-「ブックの保護」で、「ウィンドウ」にチェックを入れると、どのシートでもウィンドウ枠の固定の解除ができなくなりますが、それと同時に右上の×印なども消えてしまい、ブックを閉じることもできなくなってしまいます。

解除されないようにする方法はちょっと判りませんでしたが、マクロを使って、ブックを開くたびに自動的にウィンドウ枠を固定する、という方法ではいかがでしょうか。

1. 設定したいブックを開きます。
2. Alt + F11(もしくは「ツール」-「マクロ」-「Visual Basic Editor」)で、Microsoft Visual Basic という画面を開きます。
3. 左側のエクスプローラのツリーのような画面(表示されていなければ「表示」-「プロジェクト エクスプローラ」)で、設定したいブックにある「ThisWorkbook」をダブルクリックします。
4. 右側のフィールドに、このコードを貼りつけます。シート名とセル番地は設定したいブックに合わせたものに変更してください。

Private Sub Workbook_Open()

'画面を固定してマクロの操作を表示しません
Application.ScreenUpdating = False

'複数のシートで指定したい場合はこの下4行を
'コピー貼りつけし、シート名とセル番地を変更します。

'設定したいシートを選択します
'("Sheet1"の部分に該当するシート名を入れます)
Sheets("Sheet1").Select

'とりあえず現在のウィンドウ枠固定を解除します
ActiveWindow.FreezePanes = False

'固定する位置を決定します
'("A2"の部分には固定したい箇所のセル番地を入れます)
Range("A2").Select

'ウィンドウ枠の固定をします
ActiveWindow.FreezePanes = True

'画面の固定を解除します
Application.ScreenUpdating = False

End Sub

5. ファイルを保存してから閉じ、再び開くと自動的にウィンドウ枠が設定されます。

> たまに次に開いた時解除されてしまっている
もしかして他の方も同じファイルを使用されているのでしょうか?

ウィンドウ枠はシート毎に設定がかかるようになっています。
「ツール」-「保護」-「ブックの保護」で、「ウィンドウ」にチェックを入れると、どのシートでもウィンドウ枠の固定の解除ができなくなりますが、それと同時に右上の×印なども消えてしまい、ブックを閉じることもできなくなってしまいます。

解除されないようにする方法はちょっと判りませんでしたが、マクロを使って、ブックを開...続きを読む

Qエクセルでメッセージボックスにパスワードを入力し、ブックの保護を解除するマクロを教えて下さい

ブックを保護するマクロと、解除するマクロをそれぞれパスワード付きで作り、ボタンに設定しました。
Sub ブック保護()
  ThisWorkbook.Protect Password:="1234"
End Sub

Sub ブック保護解除()
  ThisWorkbook.Unprotect Password:="1234"
End Sub

保護する際は良いのですが、解除する際にパスワードの入力を求められません。
これだと、パスワードを知らない人でも保護が解除でき、パスワードを設定した意味がなくなってしまいます。
ブック保護解除ボタンを押すと、パスワードの入力を求められるようにするにはどうしたらよいでしょうか。
ご教授お願い致します。

Aベストアンサー

こんにちは。
Sheet上またはUSER Form上にText Boxを配置して、パスワードを入力させる
Text Box はプロパティにPasswordChar というのがあるのでこれを * にする。

USER Formが苦手な場合はInputBoxでもできるようですが、
”InputBox Daniel Klann Password" で検索するとたくさん引っかかってきたのでご参考まで。

隠す必要がないのであればInputBoxで十分ですね。
ThisWorkbook.Protect Password:=InputBox("Password?")
すみません、動作確認まではしてません。

Qシート保護の解除の仕方(パスワードなし)

以前、こちらで作業方法について質問した時に、パスワードを設定せずにシートの保護をする方法を教えていただきました。
方法としては、単純に「ツール」から「シートの保護」を選び、パスワードを何も入力せずに「OK」をクリックするのです。
そうすると、ロックされたセルを修正する時に、「ツール」から「シートの保護の解除」を選択すると、自動的に保護が解除されます。
しかし、その一つのセルにしか有効ではなく、二つ目のセルを修正しようとすると、また「ツール」から・・・と
一度にたくさんの修正をする時にはとても不便です。

それならば、と思い、パスワードを設定して保護をしてみたのですが、
状況は変わらず、解除時にパスワードを入力してもやはり一つのセルにしか有効ではありませんでした。

そもそもパスワードなしで保護をしたからなのか、それとも全く別の原因があるのか、見当がつきません。

どなたか力を貸して下さい!!

Aベストアンサー

> そうすると、ロックされたセルを修正する時に、「ツール」から「シートの保護の解除」を選択すると、自動的に保護が解除されます。

はい、そうなりますね。

> しかし、その一つのセルにしか有効ではなく、二つ目のセルを修正しようとすると、また「ツール」から・・・と

ここが理解できません。
まさかとは思いますが、ひょっとして一つ目のセルを修正したあとで再度シートに保護をかけてませんか?
通常は、パスワードの有無にかかわらず、一度シートの保護を解除すれば、いくつでもセルを修正できるはずですが・・・・。

QEXCELマクロでシート保護の解除をしたいです

システム抽出画面(Excel)にO23の場所から28行づつ"K"を入れていくというのです
が、
数字の合計を取る場所で、シートの保護が掛かっています

シートの保護が掛かっていれば次の処理(j+56)などをさせるようには
どのようにすればいいでしょうか?(↓のはずっとKを入れていくだけです)


Application.WindowState = xlMaximized

j = 23
Do Until j > 10000000
Range("O" & j).Select

ActiveCell.FormulaR1C1 = ""
ActiveCell.FormulaR1C1 = "k"
j = j + 28


Loop


イメージです↓
----------------------------------


(O,23) k入力

----------------------------------


(O,23+28) k入力

----------------------------------

k ← 保護されていてエラー


----------------------------------

k ← ここも入れたいけど処理ストップ

----------------------------------

システム抽出画面(Excel)にO23の場所から28行づつ"K"を入れていくというのです
が、
数字の合計を取る場所で、シートの保護が掛かっています

シートの保護が掛かっていれば次の処理(j+56)などをさせるようには
どのようにすればいいでしょうか?(↓のはずっとKを入れていくだけです)


Application.WindowState = xlMaximized

j = 23
Do Until j > 10000000
Range("O" & j).Select

ActiveCell.FormulaR1C1 = ""
ActiveCell.FormulaR1C1 = "k"
j = j + 28


...続きを読む

Aベストアンサー

う~ん
>シートの保護が掛かっていれば次の処理(j+56)などをさせるようには
シートの保護が掛かっていて処理できない所は処理せず
次の処理に移行するということ?
即ち、エラーを無視して処理を継続するでいいのかな?
であれば、次のコードを追加してください


On Error Resume Next  '←エラーより前であれば良いので追加してください
j = 23
Do Until j > 10000000
    ・
    ・
    ・


では、如何ですか?

QエクセルVBA 保護シート&フィルタ実行 全シート

VBA超初心者です。

たくさんのシートのあるエクセルで、
シート保護後もフィルタを使用できるようにVBAを設定したいと思ってます。
(現在エクセル2000を使用してます)

ネットで調べてVBAを設定してみました。
しかし下記のようにするとコンパイルエラーになってしまうのですが、
正しい方法を教えていただけると助かります。

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Application.CommandBars("Cell").Reset
End Sub

Private Sub Workbook_Open()
  With Application.CommandBars("Cell").Controls.Add( _
           Type:=msoControlButton, Before:=1, Temporary:=True)
    .Caption = "AutoFilter"
    .OnAction = "ThisWorkbook.filter"
  End With
  With Worksheets.Select
    .Unprotect
    .EnableAutoFilter = True
    .Protect UserInterfaceOnly:=True
  End With
End Sub

Private Sub filter()
  On Error Resume Next
  Selection.AutoFilter
End Sub

VBA超初心者です。

たくさんのシートのあるエクセルで、
シート保護後もフィルタを使用できるようにVBAを設定したいと思ってます。
(現在エクセル2000を使用してます)

ネットで調べてVBAを設定してみました。
しかし下記のようにするとコンパイルエラーになってしまうのですが、
正しい方法を教えていただけると助かります。

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Application.CommandBars("Cell").Reset
End Sub

Private Sub Workbook_Open()
  With Applicatio...続きを読む

Aベストアンサー

変更前:
 With Worksheets.Select
  .Unprotect
  .EnableAutoFilter = True
  .Protect UserInterfaceOnly:=True
 End With

変更後:
 dim h as worksheet
  :
 For Each h In Worksheets
 With h
  .Protect UserInterfaceOnly:=True
  .EnableAutoFilter = True
 End With
 Next


このカテゴリの人気Q&Aランキング

おすすめ情報