- 締切済み
Excel2003でブックごとにコピー&ペースト不可の制限
過去の記事なども調べ 下記でアプリケーション単位での設定はわかりました。 しかし全ブックに影響がでるのはこまるのでこれをブック単位に設定することはできますでしょうか。 お願いします! ▽ソース Sub Auto_Open() Call DisEnableKeys1 Call DisEnableKeys2 End Sub Sub DisEnableKeys1() Dim eFlg As Boolean eFlg = False 'サブルーチンにしてトグルも可能 With Workbook .CommandBars("Worksheet Menu Bar").Controls("編集(&E)").Controls("貼り付け(&P)").Enabled = eFlg .CommandBars("Cell").FindControl(, 22).Enabled = eFlg If eFlg = False Then .OnKey "^v", "DummyMacro1" Else .OnKey "^v" End If End With End Sub Sub DisEnableKeys2() Dim eFlg As Boolean eFlg = False 'サブルーチンにしてトグルも可能 With Workbook .CommandBars("Worksheet Menu Bar").Controls("編集(&E)").Controls("コピー(&C)").Enabled = eFlg .CommandBars("Cell").FindControl(, 19).Enabled = eFlg If eFlg = False Then .OnKey "^c", "DummyMacro2" Else .OnKey "^c" End If End With End Sub Sub DummyMacro1() MsgBox "貼り付けは禁止されています。", vbInformation End Sub Sub DummyMacro2() MsgBox "コピーは禁止されています。", vbInformation End Sub
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- VBA を使用してexcel起動時に 右クリックメニューの行削除や列削除を無効にしようとするとエラーが出ることがある。
お世話になります。 VBA を使用してexcel起動時に 右クリックメニューの行削除や列削除を無効して、下記VBAを作成しました。 しかしながら、起動時(実行時)に 「実行時エラー 5 プロシージャの呼び出し、または引数が不正です。」が出ることがあります。 でないときもあるのですが、 デバック時にとまるところは、毎回変わり(1)~(5)のどれかで止まります。 使用したい環境はexcel2007,excel2003で正常に動くようにしたいのですが、何卒よろしくお願いします。 *************ソース********************* Private Sub Workbook_Open() InsertEnabled False End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) InsertEnabled True End Sub Private Sub InsertEnabled(flg As Boolean) With Application (1) Application.CommandBars("Worksheet Menu Bar").Controls("挿入(&I)").Enabled = flg (2) Application.CommandBars("Cell").Controls("挿入(&I)...").Enabled = flg (3)Application.CommandBars("Cell").Controls("削除(&D)...").Enabled = flg (4)Application.CommandBars("Row").Controls("挿入(&I)").Enabled = flg (5)Application.CommandBars("Row").Controls("削除(&D)").Enabled = flg .CommandBars.FindControl(, 296).Enabled = flg .CommandBars.FindControl(, 293).Enabled = flg End With End Sub
- ベストアンサー
- オフィス系ソフト
- エクセル ルーチンマクロ
以前コピー・貼り付けを停止させる為に、下記マクロを参照させて頂いたのですが、 '--------------------------------------------------------------- Sub DisableCommandButtons(Cmd_bln As Boolean) 'コピー・貼り付けを停止させるサブルーチン・マクロ Dim cmd As Variant Dim Cmdb As Object Dim CmdNames As Variant CmdNames = Array("Worksheet Menu Bar", "Cell", "Column", "Row") 'ショートカットのインスタンス If Cmd_bln = False Then Application.OnKey "^c", "" Application.OnKey "^v", "" Application.OnKey "^x", "" Else Application.OnKey "^c" Application.OnKey "^v" Application.OnKey "^x" End If 'コマンドボタンのEnable For Each cmd In CmdNames If cmd = "Worksheet Menu Bar" Then With Application.CommandBars(cmd).Controls(2) .Controls(3).Enabled = Cmd_bln .Controls(4).Enabled = Cmd_bln .Controls(5).Enabled = Cmd_bln End With Else With Application.CommandBars(cmd) .FindControl(, 19).Enabled = Cmd_bln 'Copy .FindControl(, 22).Enabled = Cmd_bln 'Paste .FindControl(, 21).Enabled = Cmd_bln 'Cut End With End If Next cmd End Sub '--------------------------------------------------------------- このマクロを実行した所、コンテキストメニュー及びショートカットキーのコピー、貼付が無効になりました。 EnableCommandButtons というマクロを別に作り ショートカットのインスタンスの If Cmd_bln = False Then を If Cmd_bln = True Then に 書き換えて、実行した所、ショートカットキーは有効になったのですが コンテキストメニューのコピー、貼付を有効にするやり方がわかりません。 以前、 同じ質問させていただき、ご回答頂いたのですが、別のPCでは、その方法でもダメなことが分かりました。 OSはXP Pro エクセルはは2003です どなたか、助けていただけないでしょうか? よろしくお願い致します。
- ベストアンサー
- オフィス系ソフト
- エクセル ルーチンマクロ
エクセルにて、コピー貼付を禁止するマクロを、教えてGooの過去のQ&Aから、参照させていただきました。 '--------------------------------------------------------------- Sub DisableCommandButtons(Cmd_bln As Boolean) 'コピー・貼り付けを停止させるサブルーチン・マクロ Dim cmd As Variant Dim Cmdb As Object Dim CmdNames As Variant CmdNames = Array("Worksheet Menu Bar", "Cell", "Column", "Row") 'ショートカットのインスタンス If Cmd_bln = False Then Application.OnKey "^c", "" Application.OnKey "^v", "" Application.OnKey "^x", "" Else Application.OnKey "^c" Application.OnKey "^v" Application.OnKey "^x" End If 'コマンドボタンのEnable For Each cmd In CmdNames If cmd = "Worksheet Menu Bar" Then With Application.CommandBars(cmd).Controls(2) .Controls(3).Enabled = Cmd_bln .Controls(4).Enabled = Cmd_bln .Controls(5).Enabled = Cmd_bln End With Else With Application.CommandBars(cmd) .FindControl(, 19).Enabled = Cmd_bln 'Copy .FindControl(, 22).Enabled = Cmd_bln 'Paste .FindControl(, 21).Enabled = Cmd_bln 'Cut End With End If Next cmd End Sub '--------------------------------------------------------------- このマクロを実行した所、コンテキストメニュー及びショートカットキーのコピー、貼付が無効になりました。 しかし、マクロを有効にしたエクセルファイルを閉じても、他のエクセルファイルもコピー、貼付が無効になってしまいました。 コピー、貼付を有効にするためのマクロを動かさないとダメなのか?と思い、色々試してみたのですが、うまくいきません。 EnableCommandButtons というマクロを別に作り ショートカットのインスタンスの If Cmd_bln = False Then を If Cmd_bln = True Then に 書き換えて、実行した所、ショートカットキーは有効になったのですが コンテキストメニューのコピー、貼付を有効にするやり方がわかりません。 どなたか、助けていただけないでしょうか? よろしくお願い致します。
- ベストアンサー
- オフィス系ソフト
- Excel2007互換モードでの右クリックロジック
100件程度の実績のあるソフトですが、あるお客様のみ不思議な現象が発生しています。 そのお客様はWindowsXP & Excel2007の組み合わせで、ソフトは互換モードで動作しています。 Option Compare Text Option Explicit Sub migi_del() Dim icbc Application.CommandBars("cell").Reset For Each icbc In Application.CommandBars("cell").Controls icbc.Delete Next icbc End Sub Sub migi_add() Dim icbc Application.CommandBars("cell").Reset For Each icbc In Application.CommandBars("cell").Controls icbc.Delete Next icbc With Application.CommandBars("cell").Controls _ .Add(Type:=msoControlButton, Temporary:=True) .Caption = "Message!" .OnAction = "aaa" End With End Sub Sub migi_addTag() Dim icbc Application.CommandBars("cell").Reset For Each icbc In Application.CommandBars("cell").Controls icbc.Delete Next icbc With Application.CommandBars("cell").Controls _ .Add(Type:=msoControlButton, Temporary:=True) .Caption = "Message!" .OnAction = "aaa" .Tag = "aaa" End With End Sub Sub migi_Rest() Dim icbc Application.CommandBars("cell").Reset End Sub Sub aaa() MsgBox "OK" End Sub Sub Sample() Application.CommandBars("Row").Reset Application.CommandBars("Column").Reset End Sub の何れの操作を行っても、右クリックは標準のものが表示されてしまいます。 WindowsXP & Excel2007の組み合わせの他のお客様ではこのような現象は出ていません。 何方か理由をご存知の方はいらっしゃいませんか?
- ベストアンサー
- その他(プログラミング・開発)
- VBA 保存方法を教えて下さい
Private Sub Workbook_BeforeClose(Cancel As Boolean) If MsgBox("×ボタンは使用できません。" & vbCr & _ "よろしいですか?", vbInformation + vbOKOnly) = vbOK Then Cancel = True End If End Sub 上記の様にEXCELワークブックに記述しましたが、 別に設置した「保存終了ボタン」で終了できなくなってしまいました。 Workbook_BeforeClose が邪魔しているようです。 どうすれば解決できるでしょうか? 「保存終了ボタン」に記述しているコードは下記です。 Sub 保存終了() ActiveWorkbook.Save CommandBars("Worksheet Menu Bar").Enabled = True Application.CommandBars("Standard").Visible = True Application.CommandBars("Formatting").Visible = True Application.CommandBars("Drawing").Visible = True With Application .DisplayFormulaBar = True .ShowWindowsInTaskbar = True End With Application.WindowState = xlMaximized Application.Quit MsgBox "終了します" End Sub 宜しくお願いします。
- ベストアンサー
- Visual Basic
- エクセル2003で作成したVBAを2007で使用したい
エクセル2003で下記のようなVBAを作成していました。 作成した物を使用者が印刷設定を変更できないように ブックを開くと同時に印刷ボタンなどを非表示にしていたのですが・・・ 2007でも使用出来るようにしたいと思ったのですが 2007ではこのままではエラーが出てしまうようです。 2007はまったく扱ったことがないのでどのようにすればよいかわかりません。 どなたかご教授いただけたらと思います。 Private Sub Workbook_Open() Application.DisplayStatusBar = False 'ステータスバー非表示 'ブックを開く時ページ設定と印刷を非表示 On Error Resume Next Application.CommandBars("Worksheet Menu Bar").Controls("ファイル(&F)") _ .Controls("ページ設定(&U)...").Enabled = False Application.CommandBars("Worksheet Menu Bar").Controls("ファイル(&F)") _ .Controls("印刷(&P)...").Enabled = False Application.CommandBars("Worksheet Menu Bar").Controls("ファイル(&F)") _ .Controls("印刷プレビュー(&V)").Enabled = False Application.CommandBars("Worksheet Menu Bar").Controls("ファイル(&F)") _ .Controls("印刷範囲(&T)").Enabled = False Application.CommandBars("Standard").Enabled = False End Sub
- ベストアンサー
- オフィス系ソフト
- Excel2003で作成したマクロが2000で不具合が生じました。
Excel2003で作ったマクロを2000で実行したところこの命令でエラーになってしまいました。恐らく参照設定の問題だと思いますが、どの参照が問題なのでしょうか? If Environ("COMPUTERNAME") = "Z7890580" Then Exit Sub End If このVBAのブックの特定のシートで右クリックでオプション選択できるようになっていましたが、上記エラーが生じた後、そのPCでエクセルを実行すると、このブックを閉じても常に右クリックするとオプションが表示されるようになってしまいました。 どのようにすれば出ないようになるのでしょうか? よろしくお願い申し上げます。 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Application.CommandBars("Cell").Reset With Application.CommandBars("Cell").Controls.Add .BeginGroup = True .Caption = "ReadOnlyで開く" .FaceId = 59 .OnAction = "Selection_File_Open" End With End Sub
- ベストアンサー
- オフィス系ソフト
- エクセル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
- ベストアンサー
- オフィス系ソフト
- Excel 数式バーを非表示にしたい(VBA)
ツール-オプション-表示-数式バーのチェックを外せば 数式バーを非表示にできますが、VBAでやりたいと思います。 次の様に記述してみましたが、書式バーの「数式バー(F)」のボタンが非表示になるだけで数式バー自体は非表示になりません。 Private Sub Workbook_Open() Application.CommandBars("formatting").Controls(23).Visible = False End Sub 次の様に記述してみても今度は「数式バー(F)」のボタンが操作不可になるだけで数式バー自体は非表示になりません。 Private Sub Workbook_Open() Application.CommandBars("formatting").Controls(23).Enabled = False End Sub 他にも試すのですが、エラーになったりで答えに辿り着けず・・ どなたかヒントだけでもお願いします。
- ベストアンサー
- オフィス系ソフト
- VBA コマンドバーを消した後に残る空白部分
お世話になります。 ExcelVBAで、コマンドバーの類を全て消去した後に残る、 空白部分ができる原因が解りません。 この部分をダブルクリックすると、エラーになって強制終了に なってしまいます。 完全に消してしまいたいのですが、この状況になってしまう、 原因と対策を教えてください。 内容は、『システム』という名のシートにある『ロック』ボタンを 押すと、コマンドバーを全て消去して、Sheet1に切り替わるといった 流れです。 ↓モジュール側 ------------------------------------------------------------- Dim myCB As CommandBar Public Sub onCmdBarAttr() DoEvents With Application For Each myCB In Application.CommandBars myCB.Enabled = True Next myCB .CommandBars("Standard").Visible = True .CommandBars("Formatting").Visible = True .CommandBars("Visual Basic").Visible = True .CommandBars("Worksheet Menu Bar").Enabled = True .CommandBars("CELL").Enabled = True ' タスクバーに表示させる .ShowWindowsInTaskbar = True ' 数式バーを表示 .DisplayFormulaBar = True ' ステータスバーを表示 .DisplayStatusBar = True End With End Sub Public Sub offCmdBarAttr() Dim myCB As CommandBar On Error Resume Next For Each myCB In Application.CommandBars myCB.Enabled = False Next myCB On Error GoTo 0 With Application .CommandBars("Worksheet Menu Bar").Enabled = False .CommandBars("CELL").Enabled = False ' 数式バーを消去 .DisplayFormulaBar = False ' ステータスバーを消去 .DisplayStatusBar = False ' タスクバーに表示させない .ShowWindowsInTaskbar = False End With End Sub ' シートロック Public Sub protectSheet(ByVal stSheetName As String) Application.ScreenUpdating = False ' 一旦シート保護をかけ直す With Worksheets(stSheetName) .Activate .Unprotect .Protect UserInterfaceOnly:=True ' カーソルの移動範囲を設定する .ScrollArea = "$A$1" ' 左上セルを選択 .Range("H16").Select ' 保護されたセルは選択不可にする .EnableSelection = xlNoRestrictions End With Application.ScreenUpdating = True End Sub ' シートロック解除 Public Sub unprotectSheet(ByVal stSheetName As String) ' 一旦シート保護をかけ直す With Worksheets(stSheetName) .Unprotect ' スクロール範囲を解除する .ScrollArea = "" ' 保護されたセルでも選択可能にする .EnableSelection = xlUnlockedCells End With End Sub Public Sub setBookAttribute(ByVal bFlg As Boolean) With Windows(ThisWorkbook.Name) ' タブを設定 .DisplayWorkbookTabs = bFlg ' スクロールバーを設定 .DisplayHorizontalScrollBar = bFlg .DisplayVerticalScrollBar = bFlg ' グリッドを設定 .DisplayGridlines = bFlg ' 行列数表示を設定 .DisplayHeadings = bFlg End With End Sub ↓シート側 ------------------------------------------------------ Private Sub btnProtect_Click() ' アプリケーション全体の処理 Call Module1.offCmdBarAttr ' シート単位の処理 Call Module1.protectSheet("Sheet1") ' ブック単位の処理 Call setBookAttribute(False) Worksheets("Sheet1").Activate End Sub Private Sub btnUnprotect_Click() Call Module1.onCmdBarAttr Call Module1.unprotectSheet("Sheet1") Call setBookAttribute(True) End Sub 以上、よろしくお願いいたします。
- ベストアンサー
- Visual Basic
お礼
指定したいブックに下記を記述 Private Sub Workbook_Activate() Call DisEnableKeys1 Call DisEnableKeys2 End Sub ------------------------------------ 標準モジュールに下記を記述 Sub DisEnableKeys1() Dim eFlg As Boolean eFlg = False 'サブルーチンにしてトグルも可能 With Application .CommandBars("Worksheet Menu Bar").Controls("編集(&E)").Controls("貼り付け(&P)").Enabled = eFlg .CommandBars("Cell").FindControl(, 22).Enabled = eFlg If eFlg = False Then .OnKey "^v", "DummyMacro1" Else .OnKey "^v" End If End With End Sub Sub DisEnableKeys2() Dim eFlg As Boolean eFlg = False 'サブルーチンにしてトグルも可能 With Application .CommandBars("Worksheet Menu Bar").Controls("編集(&E)").Controls("コピー(&C)").Enabled = eFlg .CommandBars("Cell").FindControl(, 19).Enabled = eFlg If eFlg = False Then .OnKey "^c", "DummyMacro2" Else .OnKey "^c" End If End With End Sub Sub DummyMacro1() MsgBox "貼り付けは禁止されています。", vbInformation End Sub Sub DummyMacro2() MsgBox "コピーは禁止されています。", vbInformation End Sub ------------------------------------ してみましたが、やはりエクセルのアプリ全体にかかってしまいます。。。
補足
お返事ありがとうございます。 確かに元は、[With Workbook]が、[With Application] でした 汗 自分でいじってる間にそのまま保存しちゃってました…。 Activate, Deactiveateとはどのように使えばいいんでしょうか…。 教えてくださいorz サブルーチンは標準モジュールにいれてしまえばいいんですよね?