No.6ベストアンサー
- 回答日時:
遅くなりました。
Excelの2002などで、試験していませんが、たぶん、標準モジュールの部分を入れ替えれば大丈夫なはずです。
'-----------------------------------------------------------------
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
'-----------------------------------------------------------------
できました!
本当、ありがとうございました。
せっかく教えていただいたソース、自分なりに分析して自分の知識にしていく所存です。
300ポイントほど差し上げたいところですが、システム上不可能なのが残念です。
心の中では20ポイントどころではない感謝をしていますので……。
No.5
- 回答日時:
こんぱんは。
>FindControl(, 19).Enabled = Cmd_bln 'Copy
>↑上記ステップにて
>実行時エラー'91':
>オブジェクト変数または With ブロック変数が設定されていません。
少し、時間をください。一応、Excelのバージョンを教えておいてください。
それは、たぶん、ここの部分です。
For Each cmd In Array(1, 20, 24, 25)
Indexの番号にしたのが間違いでした。それは、Excel全バージョンで共通ではないようです。
この回答への補足
再度のご回答、本当にありがとうございます。
試したのはExcel2002(自宅PC)です。
しかし、実際に実行したいのは会社の環境で、ほとんどが2003ですが2002も少数ながら混在しています。
よろしくお願いします。
No.4
- 回答日時:
#3 の訂正です。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With Worksheets("Sheet1")
'プロテクトの保護を解除すれば、コピー等は出来ます。
.Unprotect Password:="xxx" '←ここ
'パスワードを入れればパスワードが必要でした。
End With
End Sub
なお、Application.CutCopyMode での制御は、少なくとも、Copy は効きます。
貼り付け場所を制限させるだけですから、あまり芳しくありません。
このほかにも、プロテクトせずに、ExcelのCopy/Paste のすべての機能を不可にする方法があります。
なお、以下をそれぞれのモジュールに貼り付けたら、一旦、保存して起動してください。これは、すべてのシートに適用されます。そのブックを閉じれば、機能は回復します。なお、私は、ひさびさに、この種のマクロを書いたので、抜け落ちがあるかもしれませんが、その時は、ご容赦願います。十分にテストをしてみてください。
'-----------------------------------------------------------------
'標準モジュール
Sub DisableCommandButtons(Cmd_bln As Boolean)
'コピー・貼り付けを停止させるサブルーチン・マクロ
Dim cmd As Variant
Dim Cmdb As Object
'ショートカットのインスタンス
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 Array(1, 20, 24, 25) '"Menubar","Cell","Column","Row"
If cmd = 1 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
'-----------------------------------------------------------------
'ThisWorkbook モジュールへ
Private Sub Workbook_Open()
Call DisableCommandButtons(False)
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call DisableCommandButtons(True)
End Sub
'-----------------------------------------------------------------
この回答への補足
コメントが遅くなって大変申し訳ありませんでした。
ご回答いただいた通りに記述してみましたが、
オープン時・クローズ時に
.FindControl(, 19).Enabled = Cmd_bln 'Copy
↑上記ステップにて
実行時エラー'91':
オブジェクト変数または With ブロック変数が設定されていません。
となります。
どのように変更すればよろしいでしょうか?
No.3
- 回答日時:
プロテクトの一環として考えてよろしいのでしょうか?
もし、そうでしたら、VBEditor 画面を開いて、ThisWorkbook モジュールに、以下のようなマクロを登録します。一旦保存して、再度立ち上げれば、設定されています。セルの選択が出来ませんから、当然、コピーが出来ません。
'ThisWorkbook モジュール
Private Sub Workbook_Open()
With Worksheets("Sheet1")
'ロックしていないセルのみ許可
.EnableSelection = xlUnlockedCells
.Protect Password:="xxx", UserInterfaceOnly:=True
End With
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With Worksheets("Sheet1")
'プロテクトの保護を解除すれば、コピー等は出来ます。
.Unprotect
End With
End Sub.
No.2
- 回答日時:
ご回答、ありがとうございます。
マクロで対応するつもりでいました。
他の機能についても大変参考になりました。
が、目的については正常に機能せず……。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロVBA別Excelブックにデータ転記 2 2022/07/10 23:35
- Excel(エクセル) Excelに文字データのみを貼り付けたい 8 2023/05/03 15:38
- Excel(エクセル) 複数のExcelブックのシート1の内容を1つのExcelブックにコピー貼り付けたいのでvbaコードを 7 2023/02/10 23:20
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/04 17:58
- Excel(エクセル) Excel 4 2023/05/28 00:13
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Excel(エクセル) Excelにて、セルに入力してある文字の中から文字と最後の数字のみ切り取り貼り付けるVBA 5 2022/12/27 08:40
- Excel(エクセル) ExcelVBA メモ帳を起動し名前を付けて指定フォルダに保存 2 2022/04/18 13:15
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Excel(エクセル) エクセル ブック間のコピー 5 2022/04/24 08:11
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
EXCELでのコピー&ペーストを含む複製処理の禁止方法について
Excel(エクセル)
-
VBAで、貼り付け禁止命令を実現したい(エクセル)
Visual Basic(VBA)
-
Excelファイルをコピー不可にする設定
Excel(エクセル)
-
-
4
エクセルファイルを値でのみしか貼り付けできないようにする
Excel(エクセル)
-
5
エクセル/シート保護でドラッグ&ドロップを不可としたいのです。
Excel(エクセル)
-
6
エクセル 入力規則 貼付しても規則が変わらないようにするには?
Excel(エクセル)
-
7
貼り付けをマクロで禁止させたい。
Excel(エクセル)
-
8
Excel 条件によって入力禁止にする
Excel(エクセル)
-
9
Excelのデータ内の図 コピー禁止できますか
Excel(エクセル)
-
10
ロックしたセルのコピー&貼り付け
Excel(エクセル)
-
11
別シートのマクロを実行する方法
Excel(エクセル)
-
12
EXCELの特定セルを編集不可・コピー可能・数式非表示の状態にすることは可能か?
Excel(エクセル)
-
13
右クリックから切り取り、コピー、貼り付けができなくなりました
Excel(エクセル)
-
14
EXCELで複数のシートを一度に「シートの保護」することはできますか?
Excel(エクセル)
-
15
【緊急】エクセルVBA(2003)でのショートカットキーの無効化について
Visual Basic(VBA)
-
16
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
17
Excelで書式の変更を禁止しデータ入力だけ許可したい
Excel(エクセル)
-
18
Excelで保護のかかったシートのコピー
Excel(エクセル)
-
19
エクセルVBA/イベント発生でコピペ不能はなぜ?
Excel(エクセル)
-
20
エクセルマクロを有効にしないとファイルが開けないようにする方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル:マクロ「Application...
-
エクセルの2ページ目の作り方
-
エクセルのアポストロフィを一...
-
エクセルで勝手に「折り返して...
-
Excel 行の連続データを列に参...
-
EXCELシートをPowerPointにきれ...
-
「選択範囲を解除してアクティ...
-
EXCELのオートフィルの設定を変...
-
メールソフト「サンダーバード...
-
Excelに、ダブルクォーテーショ...
-
エクセルでの行数・列数を指定...
-
Excel)軽いデーターのはずなの...
-
EXELで複数のとびとびのセルを...
-
エクセルオートフィルで書式を...
-
Excelでコピーした行の挿入を繰...
-
EXCEL数値が存在する列の項目名...
-
エクセル・数値が変化したらカ...
-
エクセルで隣接していない複数...
-
フォームのテキストボックスの...
-
Excelの連続データから数行おき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル:マクロ「Application...
-
エクセルの2ページ目の作り方
-
エクセルのアポストロフィを一...
-
Excel 行の連続データを列に参...
-
エクセルで勝手に「折り返して...
-
Excelでコピーした行の挿入を繰...
-
EXCELのオートフィルの設定を変...
-
EXCELシートをPowerPointにきれ...
-
エクセルで、選択範囲の数値全...
-
Excel)軽いデーターのはずなの...
-
メールソフト「サンダーバード...
-
エクセルでの行数・列数を指定...
-
「選択範囲を解除してアクティ...
-
Excelに、ダブルクォーテーショ...
-
エクセル 別シートへのコピー...
-
エクセルオートフィルで書式を...
-
エクセルで値だけコピーして背...
-
EXELで複数のとびとびのセルを...
-
Excelで、横並べのデータを縦並...
-
エクセル・数値が変化したらカ...
おすすめ情報