|
こんにちは よろしくお願い致します
やりたいことは、
特定のシートのみ行列の挿入削除を制御したいです
通常は禁止、挿入削除したい場合はメニュバーに追加した独自メニュから
実施したいと思っています
判定は、c3の値が 制御シート の時です
後、同一プロセスの他のブックには影響させない
シートの保護での方法もあるかなと思ったのですが
組合せがうまく出来ずにvbaのほうが楽な気がしましたが
どうも、他でコピーモードだったり、クリップボードに値があると
シート上で右クリックからのポップアップメニューでは
行挿入がグレーアウトにならないような状況があったりするようです
なぜうまくいかないか色々テストしたのですがわかりませんでした
後、一般機能 シート保護での方法もご教授頂けると助かります
アドバイスよろしくお願い致します
/標準モジュール///////////////////////////////////
'行挿入削除 禁止
Sub unEnabled_set()
Dim ct As Object
Dim ct1 As Object
Application.ScreenUpdating = False
Application.CutCopyMode = False
For Each ct In CommandBars("Worksheet menu bar").Controls 'メニューバー/編集/削除 グレー表示セット
'Debug.Print ct.Caption
If ct.Caption = "編集(&E)" Then
For Each ct1 In ct.Controls
'Debug.Print ct1.Caption
If ct1.Caption = "削除(&D)..." Then
'Debug.Print ct1.Caption & "Enabled"
ct1.Enabled = False 'False
End If
Next
'追加
ElseIf ct.Caption = "挿入(&I)" Then
For Each ct1 In ct.Controls
'Debug.Print ct1.Caption
If ct1.Caption = "セル(&E)" Then
'Debug.Print ct1.Caption & "Enabled"
ct1.Enabled = False 'False
ElseIf ct1.Caption = "行(&R)" Then
'Debug.Print ct1.Caption & "Enabled"
ct1.Enabled = False 'False
ElseIf ct1.Caption = "列(&C)" Then
'Debug.Print ct1.Caption & "Enabled"
ct1.Enabled = False 'False
End If
Next
End If
'DoEvents
Next
'DoEvents
ActiveSheet.Range("A3").Select 'セル範囲選択時の削除 グレー表示セット
For Each ct In CommandBars("cell").Controls
Debug.Print ct.Caption
If ct.Caption = "挿入(&I)..." Then
'Debug.Print ct.Caption & "Enabled"
ct.Enabled = False 'False
ElseIf ct.Caption = "削除(&D)..." Then
ct.Enabled = False 'False
End If
'DoEvents
Next
'DoEvents
ActiveSheet.Rows(2).Select '行選択時の削除 グレー表示セット
For Each ct In CommandBars("Row").Controls
Debug.Print ct.Caption
If ct.Caption = "挿入(&I)" Then '列範囲選択時
'Debug.Print ct.Caption & "Enabled"
ct.Enabled = False 'False
ElseIf ct.Caption = "削除(&D)" Then
ct.Enabled = False 'False
End If
'DoEvents
Next
'DoEvents
ActiveSheet.Columns(2).Select '列選択時の削除 グレー表示セット
For Each ct In CommandBars("Column").Controls
'Debug.Print ct.Caption
If ct.Caption = "挿入(&I)" Then '列範囲選択時
'Debug.Print ct.Caption & "Enabled"
ct.Enabled = False 'False
ElseIf ct.Caption = "削除(&D)" Then
ct.Enabled = False 'False
End If
'DoEvents
Next
'DoEvents
'ActiveSheet.cell(1, 1).Select
ActiveSheet.Range("A1").Select
Application.ScreenUpdating = True
End Sub
'行挿入削除 可
Sub Enabled_set()
Dim ct As Object
Dim ct1 As Object
Application.ScreenUpdating = False
Application.CommandBars("Worksheet menu bar").Reset
Application.CommandBars("cell").Reset
Application.CommandBars("Row").Reset
Application.CommandBars("Column").Reset
Application.ScreenUpdating = True
End Sub
/ThisWorkbookモジュール///////////////////////////////////
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'MsgBox Sh.Cells(1, 3).Value
If Sh.Cells(1, 3).Value = "制御シート" Then
'Call AddControl
'DoEvents
Call unEnabled_set
'DoEvents
Else
Call Enabled_set
End If
End Sub
Private Sub Workbook_Activate()
'MsgBox Sh.Cells(1, 3).Value
If ActiveSheet.Cells(1, 3).Value = "制御シート" Then
'Call AddControl
'DoEvents
Call del_unEnabled_set
'DoEvents
Else
Call Enabled_set
End If
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Call Enabled_set
End Sub
|
|