
お世話になります。
会社で、チーム員全体で、共有し、編集している、エクセルファイルがあるのですが、年配の方が、エクセルを使いこなすのが、今のところ難しく、どこへでも、関係のないデータを、貼り付け、保存してしまい、
それ以前に、正しく、表に入力をした人のデータはかき消されてしまったりしています。そこで、なんでもかんでも貼り付けをする癖を正すため、その表内は、貼り付け禁止にできないかと思いまして、質問しました。私は、VBAの基礎は解るので、色々と調べてみたのですが、貼り付け禁止にするという、やり方は探し出せませんでした。
お忙しいところ、すみませんが、思いつく方、アイディアを頂けませんでしょうか?
何卒、宜しくお願い致します。
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
こんにちは。
貼り付け禁止には、二つの方法があります。ひとつは、貼り付けキー自体を、Enable=False にすることです。どちらか好きなほうを一つ使うと良いと思います。
最初だけ、Auto_Open を実行すれば、後は、開いたときに設定されます。
解除の仕方は、お分かりになると思いますが、
'Enable の復活
Enable =True にすればよいです。
'クラス側の設定の解除
Erase ClassBtns
'ショートカットキー解除
Application.OnKey "^v", ""
を使えばよいでしょう。
'-------------------------------------
'標準モジュール
Sub Auto_Open()
Call DisEnableKeys
End Sub
Sub DisEnableKeys()
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", "DummyMacro"
Else
.OnKey "^v"
End If
End With
End Sub
Sub DummyMacro()
MsgBox "貼り付けは禁止されています。", vbInformation
End Sub
'=================================================
もう一つの方法は、貼り付けのすべてのキーをインスタンスでつぶしてしまえばよいと思います。上とは一緒に使わないほうがよいでしょう。
'標準モジュール
Private ClassBtns(1) As New Class1
Public Pastechk As Boolean
Sub Auto_Open()
Call NewBtnSetting
End Sub
Sub NewBtnSetting()
With Application
Set ClassBtns(0).myNewBtn = .CommandBars("Worksheet Menu Bar").Controls("編集(&E)").Controls("貼り付け(&P)")
Set ClassBtns(1).myNewBtn = .CommandBars("Cell").FindControl(, 22)
Application.OnKey "^v", "DummyMacro"
End With
End Sub
Sub DummyMacro()
MsgBox "貼り付けは禁止されています。", vbInformation
End Sub
'----------------------------------------
'Class1モジュール
Private WithEvents NewBtn As Office.CommandBarButton
Public Property Set myNewBtn(ByVal myBtn As CommandBarButton)
Set NewBtn = myBtn
End Property
Private Sub NewBtn_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
'二重呼び出しの禁止
If Pastechk = False Then
MsgBox "貼り付けは禁止されています。", vbInformation
Pastechk = True
Else
Pastechk = False
End If
CancelDefault = True
End Sub
No.7
- 回答日時:
No6,ですが、色々アイデアを考えることは頭の体操になって面白いな、ということでもう一案。
最初の質問の意図に戻って考えてみると、
問題はその年配の人にあるわけですから、その人だけコピペ禁止で入力のみさせ、他の人には普通に作業してもらう方がいいような気がします。
既出のアイデアを利用。
具体的にはブックを開く時その年配の人とその他の人で別々のパスワードを入力させ、それにより別々の画面を表示させる
年配の人には、メニューバー、ツールバー、右クリックのメニュー非表示でかつ、Ctrl+C,V禁止
その他の人には、通常の画面。
これらをWorkBook Openイベントでして、年配の画面はBeforSaveやBeforCloseイベントなど適当なイベントで通常の画面に戻しておく。
先の投稿で言い忘れましたので、一言。
Merlion師匠のアイデアは、Good Job!! だと思います。。(^o^)/^
No.6
- 回答日時:
こんばんは。
NO4の回答のお礼のコードは、コピペだけでなく入力についても
いちいち確認することになっていますが、
それって「問題の年配の方」にはいいのかも知れませんが、
普通に入力できる人には非常に煩わしいと思いますが、如何でしょう。
で、上記も勘案して以下のようにしてはどうでしょう。
(1)セルひとつへの入力は、ふつうに入力できるようにする(確認メッセージなし)
(2)セルひとつのコピペは、メッセージで確認する
(3)複数セルの処理は、入力もコピペも無条件にダメとし、その由メッセージを表示する
(4)行の挿入は1行でも複数行でも可能とする
どのシートでも上記動作になるようコードは、ThisWorkBookモジュールに。
'---------------
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Ans As Integer
If Target.Count = 1 Then
If Application.CutCopyMode Then
Ans = MsgBox("貼り付けたデータは正しいですか?", vbYesNo, "確認")
If Ans = vbNo Then
MsgBox "正しいデータを貼り付けて下さいな"
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End If
Application.CutCopyMode = False
End If
End If
End Sub
'---------------
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Count = 1 Then Exit Sub
If Target.Columns.Count = 256 Then Exit Sub
MsgBox "複数セルはいやよ!", vbCritical, "確認"
Target.Cells(1).Select
Application.CutCopyMode = False
End Sub
'---------------
複数セルに対しては上記コードのように、貼り付ける前、又は、入力する前の、セル範囲を選択した時点で判断した方がいいですよね。
先ず、新しいブックで上記コードをお試しください。
No.5
- 回答日時:
> 行挿入だけは、させて欲しいと言われました。
merlionXXです。
では、あらたにダブルクリックイベントを利用しましょうか。
下記のコードを追加しで、行を挿入したい箇所でダブルクリックしてみてください。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
On Error GoTo line
Application.EnableEvents = False
Target.Insert Shift:=xlDown
line:
Application.EnableEvents = True
End Sub
No.4
- 回答日時:
> 実際的に、コードを書けなかったのですが、
#1です。
標準モジュールではなく該当のシートのモジュールに以下をコピペしてください。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
Exit Sub
Else
MsgBox "複数セルを同時に変更しないでねん。!"
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End If
End Sub
お世話になっておりますm(__)m
本当に有難うございました!!
教えて頂いた、ソースを参考に、下記のソースにアレンジし、
チームに配布したところ、使用者(ご本人以外)は大喜びでした!
これで、チームの春も近いと思われます*^^*
が、使用者の一人から、一つだけリクエストが来まして、
行挿入だけは、させて欲しいと言われました。
ですが、下記のソースでは、行挿入も禁止しています。
どうにか、アレンジできる方法はありませんでしょうか?
お時間ある時にでも、ご教示願います。m(__)m
----------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Ans As Integer
If Target.Count = 1 Then
Ans = MsgBox("今、貼り付けたデータ(入力したデータ)は、正しいですか?確認してください。", vbYesNo)
If Ans = vbNo Then
MsgBox "データを消去します。入力し直して下さい。"
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End If
Exit Sub
Else
MsgBox "複数セルを同時に変更する事はできません。一データずつ、入力して下さい。"
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End If
End Sub
----------------------------------------------------------------
No.3
- 回答日時:
再度のこんにちは。
>Ctrl+C,V が動作しないようにしておく、という方法
簡単には標準モジュールにプロシージャーを2つ置いて、
それに、Ctrl+CとVのショートカットキーを割り当てるだけです。
例えば、標準モジュールに以下があるとして。
--------------- Ctrl+C を割り当て----------
Sub Ctrl_C()
MsgBox "Ctrl+C は使わんでね"
End Sub
--------------- Ctrl+V を割り当て----------
Sub Ctrl_V()
MsgBox "Ctrl+V は使わんでね"
End Sub
----------------------------------------------
以上です。
早々にお返事有難うございましたm(__)m フカブカ
簡潔で、とても解り易い回答で、感激しました。
大変、助かりました。
これで、等チームの、深刻な悩みも、かなり楽になるはずです!!
深謝、深謝
No.2
- 回答日時:
こんにちは。
>関係のないデータを、貼り付け、保存してしまい
年配にしろそうでないにしろ正しいデータの上に関係ないデータを貼り付けたりするのは、エクセルの使い方というより、仕事そのものを理解していないからではありませんか。
「コピー&ペースト禁止!!」と言えば済む問題だと思いますが。
ま、それはそれとして、一案。
【入力のみ】のことであれば、そしてVBAを使いこなせるということなので
●メニューバー、ツールバーを全て消す
●右クリックも使えなくする
●Ctrl+C,Vが動作しないようにしておく
なんて方法もありかも知れません。
以上です。
早々に、アドヴァイス有難うございました。
早速、メニューバーが出ないようにしてみたり、右クリックができないようにしてみたりしました。
癖を直す、強制ギブスのように、しばらくこれで活用しようかと思っています。
後、一つの、Ctrl+C,V が動作しないようにしておく、という方法
が解りません。もし、御存知でしたら、教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) 【マクロ】同じフォルダ内にある複数ブックから1つのブック内の1シートにデータを集めたい 6 2022/09/28 18:16
- Visual Basic(VBA) エクセル 2つの列にある値の完全一致を抜き出すVBA 15 2022/12/15 03:22
- Excel(エクセル) 文字化け。メモ帳でUTF-8に変換後、エクセルへ貼り付けたいです。 3 2022/08/14 07:21
- Excel(エクセル) VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください 2 2022/05/17 16:26
- Excel(エクセル) Excelの関数についておしえてください。 3 2023/04/20 18:36
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- PDF PDFの表がエクセルに貼り付けられなくなってしまいました。 5 2022/06/03 09:07
- 教育学 エクセルで小数点以下を四捨五入について教えてください。 2 2023/04/05 17:33
- Visual Basic(VBA) VBA初心者です。電話番号の数字の前に0を表示させたいです。 2 2022/12/14 03:58
このQ&Aを見た人はこんなQ&Aも見ています
-
EXCELでのコピー&ペーストを含む複製処理の禁止方法について
Excel(エクセル)
-
エクセルファイルを値でのみしか貼り付けできないようにする
Excel(エクセル)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
-
4
貼り付けをマクロで禁止させたい。
Excel(エクセル)
-
5
EXCEL、セルのコピー・貼り付けを禁止したい
Excel(エクセル)
-
6
Word2013: コピー、切り取り、貼り付けの禁止をVBAで行う方法
Word(ワード)
-
7
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
8
シートを保護しても入力規則を使えるようにしたい
Excel(エクセル)
-
9
シートが保護されている状態で、セルを選択した時に表示されるメッセージ
Visual Basic(VBA)
-
10
Excel2013で切り取り禁止
Visual Basic(VBA)
-
11
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
12
VBAのテキストボックスに文字列を貼り付ける方法
Access(アクセス)
-
13
エクセルVBA/イベント発生でコピペ不能はなぜ?
Excel(エクセル)
-
14
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
15
Excelのデータ内の図 コピー禁止できますか
Excel(エクセル)
-
16
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
17
エクセル 入力規則 貼付しても規則が変わらないようにするには?
Excel(エクセル)
-
18
すでにコピーした情報を貼り付けたらイベントを発生
PowerPoint(パワーポイント)
-
19
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
20
Excelの条件付き書式を崩されたくない
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルテキストボックスの文...
-
EXCELマクロ 保護されているシ...
-
Windowsで動くVBAがmacOSで動か...
-
データが入力されている隣のセ...
-
エクセルVBA(実行時エラー438...
-
GrapeCityのSpreadの複数セルの...
-
VBAで丸をつけたいです。
-
VBAで、貼り付け禁止命令を実現...
-
Swing 編集不可でも選択可能なJ...
-
メッセージを1度だけ表示したい。
-
セルに数値が入力されたら別の...
-
ダブルクリックすると現在の時...
-
エクセルのVBAでダブルクリック...
-
VBA セルに合わせて移動するが...
-
マクロ初心者です。何が動かな...
-
VBAのListBoxで複数選択して...
-
[VBA]型が一致しません
-
エクセルVBA セル選択後にカレ...
-
VBAについて教えてください。 E...
-
【マクロ】A列にある、日付(本...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データが入力されている隣のセ...
-
EXCELマクロ 保護されているシ...
-
エクセルテキストボックスの文...
-
VBAで、貼り付け禁止命令を実現...
-
エクセルVBA(実行時エラー438...
-
【VBA】InputBoxで文字をセルに...
-
VBA セルに合わせて移動するが...
-
Windowsで動くVBAがmacOSで動か...
-
ダブルクリックすると現在の時...
-
メッセージを1度だけ表示したい。
-
ハイパーリンクされているファ...
-
Swing 編集不可でも選択可能なJ...
-
VBAで丸をつけたいです。
-
(VBA)アクティブセルを起点に...
-
Excel VBA セルを指定個数ラン...
-
【VBA】参照値を1ずつ増やして...
-
エクセルのVBAでダブルクリック...
-
セル色を5秒間隔で変える
-
StringGridでの文字入力制限
-
アクティブセルの行のセルを複...
おすすめ情報