エクセルのルーチンマクロでコピー・貼り付けを停止する方法

このQ&Aのポイント
  • エクセルのルーチンマクロを使用してコピー・貼り付けを停止する方法を教えてください。
  • マクロを実行すると、コンテキストメニューとショートカットキーのコピーと貼り付けが無効になりましたが、コンテキストメニューのコピーと貼り付けを有効にする方法が分かりません。
  • 以前は同じ方法でうまくいきましたが、別のPCではうまくいきません。OSはXP Proで、エクセルは2003です。助けていただけないでしょうか?
回答を見る
  • ベストアンサー

エクセル ルーチンマクロ

以前コピー・貼り付けを停止させる為に、下記マクロを参照させて頂いたのですが、 '--------------------------------------------------------------- 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です どなたか、助けていただけないでしょうか? よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.2

> 「コンパイルエラー 引数の数が一致していません。または、不正なプロパティを指定しています」 Sub DisableCommandButtons(Cmd_bln As Boolean) の引数を変更したのでしょうか? では、やり方を変えて、 Sub EnableCommandButtons() 'コピー・貼り付けを有効にするマクロ  'ショートカットのインスタンス   Application.OnKey "^c"   Application.OnKey "^v"   Application.OnKey "^x"  'コマンドボタンのEnable   With Application.CommandBars("Worksheet Menu Bar").Controls(2)    .Controls(3).Enabled = True    .Controls(4).Enabled = True    .Controls(5).Enabled = True   End With   CommandBars("Cell").Reset   CommandBars("Column").Reset   CommandBars("Row").Reset End Sub

sakura_002
質問者

お礼

直りました。ありがとうございます。 コピー、貼り付けしたら直りました。内容は良くわかっていません。 勉強不足で申し訳ありません。 本当にありがとうございます。

その他の回答 (1)

  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.1

VBE の 画面で「イミディエイトウィンドウ」を表示し、 DisableCommandButtons True と入力し、エンターキー。 多分、これで大丈夫。

sakura_002
質問者

補足

ありがとうございます。早速試したのですがVBE の 画面で「イミディエイトウィンドウ」を表示させたところ、次のようになっていました。 --------------------- [auto_open] < [SetupFunctionIDs] < [SetupFunctionIDs] > [PickPlatform] < [PickPlatform] > [VerifyOpen] < [VerifyOpen] > 1 [RegisterFunctionIDs] < [RegisterFunctionIDs] > [auto_open] > --------------------- どこに入力すれば良いのか、わからないのでとりあえず2通り試したのですが、 最後の[auto_open] >の後に、教えていただいたDisableCommandButtons Trueを入力したのですが次のようにエラーが表示されました。 「コンパイルエラー 修正候補 式」 次に、イミディエイトウィンドウ内を全て削除し、DisableCommandButtons Trueを入力したのですが次のようにエラーが表示されました。 「コンパイルエラー 引数の数が一致していません。または、不正なプロパティを指定しています」 わかり難くて申し訳ございません。これで状況、伝わりますでしょうか?

関連するQ&A

  • エクセル ルーチンマクロ

    エクセルにて、コピー貼付を禁止するマクロを、教えて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 に 書き換えて、実行した所、ショートカットキーは有効になったのですが コンテキストメニューのコピー、貼付を有効にするやり方がわかりません。 どなたか、助けていただけないでしょうか? よろしくお願い致します。

  • 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つの Private Sub Worksheet_Change(ByVal Target As Range)を1つのシートで実行させたいのですが、 当方、初心者なので組み合わせ方が分かりません。 よろしくお願いします。 ===No1=== Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Target = StrConv(Target, vbUpperCase) Application.EnableEvents = True End Sub ===No2=== Private Sub Worksheet_Change(ByVal Target As Range) Dim Ans As Integer If Target.Count = 1 Then Ans = MsgBox("コピーは禁止!!", vbCritical) MsgBox "データを消去します。" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If If Target.Count = 1 Then Exit Sub Else MsgBox “複数セルのコピー禁止!" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If End Sub ------------ 上記の2つを1つのシートで動作させたいのですが、うまくいきません。 単体では、動作します。

  • PowerPointでマクロをショートカットキーに割り当てる方法

    現在、エクセルで以下のようなマクロをアドインとして作成して、「CTRL+,」と「CTRL+.」で表示倍率を変えれるようなショートカットを割り当ててます。 同じことをパワーポイントでアドインを作成してやろうとすると、Application.OnKeyのところでエラーになってしまいます。同じVBAでも違うんでしょうか。 PowerPointで同じことをやろうとするとどうすればいいでしょうか? ご存知の方がいらっしゃれば教えてください。 ==================================================== Option Explicit Sub auto_open() Start 1 End Sub Sub Start(num%) Dim myBar As CommandBar Dim myCtrl As CommandBarControl Application.OnKey "^{.}", "Zoomup" Application.OnKey "^{,}", "Zoomdown" End Sub Sub Zoomup() If ActiveWindow.Zoom < 390 Then ActiveWindow.Zoom = ActiveWindow.Zoom + 5 End If End Sub Sub Zoomdown() If ActiveWindow.Zoom > 10 Then ActiveWindow.Zoom = ActiveWindow.Zoom - 5 End If End Sub

  • 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

  • マクロ(メニュー選択できないような)を教えてください。

    エクセル2003や2007でセル上で右クリックしたときに、 表示されるインスタントメニューで、切り取り(T) をグレー表示にして選択できないようなマクロを次のようにしてあります。 同様に、コピー(C)、貼り付け(P)、形式を選択して貼り付け(S)もグレー表示にして選択できないようにしたいと思います。 マクロ記述を教えてください。よろしくお願いします。 Sub MenuOff() Dim CBar Set CBar = Application.CommandBars("Cell").Controls With CBar For i = 1 To .Count If (.Item(i).Caption Like "切り取り*") Then .Item(i).Enabled = False Exit For End If Next i End With End Sub

  • エクセルのマクロについて

    Sub ア_Click() Dim i As Long With ActiveSheet For i = 5 To .Cells(Rows.count, "C").End(xlUp).Row If InStr(.Cells(i, "C"), "ア") = 0 Then If InStr(.Cells(i, "D"), "ア(半角)") = 0 and .Cells(i,"D")<>"" Then MsgBox i & "行目" Cells(i, 2).Offset(0, -1).Value = "★" End If End If Next i End With End Sub このエクセルマクロはC列に「ア」があって、D列に「ア(半角)」の文字がない場合はメッセージというマクロなのですが、このマクロをア~ンまで同じ作業をしたいのですが、ひとまとめにマクロを組む事はできるのでしょうか?できる場合どのようにすれば良いでしょうか? 下記のようにして見たのですができませんでした。 Sub ア_Click() Dim i As Long With ActiveSheet For i = 5 To .Cells(Rows.count, "C").End(xlUp).Row If InStr(.Cells(i, "C"), "[ア-ン]") = 0 Then If InStr(.Cells(i, "D"), "[ア-ン](半角)") = 0 and .Cells(i,"D")<>"" Then MsgBox i & "行目" Cells(i, 2).Offset(0, -1).Value = "★" End If End If Next i End With End Sub

  • エクセルのマクロについて教えて下さい。

    エクセル2000を使用している初心者です。 マクロは昨日ここで、ご指導いただいたばかりです。 過去ログを参考にあるホームページから 赤いフォントを数えるマクロを、カレンダーの 年間休日数を数えるためにコピーしました。 1日かかって、動作する様にはなったのですが 私が範囲指定している場所の個数より多く、また シート全体の赤いフォントの個数よりも多い様なので す。以下にコピーしますのでどこがおかしいのか ご指導願えないでしょうか。 Sub 休日検索() Dim myRng As Range Dim myFlag As Byte Dim myBoldCnt As Long, myRedCnt As Long Dim myBoldOrRedCnt As Long, myBoldAndRedCnt As Long For Each myRng In Range("検索範囲")※私の書き換えたのはここだけ myFlag = 0 With myRng If .Font.Color = RGB(255, 0, 0) Then myFlag = myFlag + 1 If .Font.Bold Then myFlag = myFlag + 2 End With If myFlag And 1 Then myRedCnt = myRedCnt + 1 If myFlag And 2 Then myBoldCnt = myBoldCnt + 1 If myFlag And 3 Then myBoldOrRedCnt = myBoldOrRedCnt + 1 If myFlag = 3 Then myBoldAndRedCnt = myBoldAndRedCnt + 1 Next MsgBox "太字" & vbtab & vbtab & myBoldCnt & vbcrlf _ & "赤" & vbtab & vbtab & myRedCnt & vbcrlf _ & "太字または赤" & vbtab & myBoldOrRedCnt & vbcrlf _ & "太字かつ赤" & vbtab & myBoldAndRedCnt End Sub

  • エクセルVBAのエラーについて

    お世話になります。 エクセルでマクロを作成しているのですが、 デバッグ中にマクロを無効にするを選択した後 マクロを有効にするで起動すると「MicrosoftExcel は動作を停止しました」になります。 終了させてマクロを無効にするで上書きをして 再起動すると動作します。 原因は何なのでしょうか? コードは以下です。 ・ThisWorkbook_Open ActiveWorkbook.Application.Visible = False UserForm1.Show ・UserForm_Activate Set clsUsrfrm = New kroboCls ・クラス側 コンストラクタ With UserForm1 Set EV_pg = .MultiPage1 Set EV_cmbKind = .cmbKind Set EV_cmdUpdate = .cmdUpdate Set EV_cmdDel = .cmdDel Set EV_cmdHistExcel = .cmdHistExcel Set EV_cmdMoveExcel = .cmdMoveExcel Set Ev_cmdEnd = .cmdEnd Set EV_cmd1s = .cmd1s Set EV_cmd2s = .cmd2s Set EV_cmd3s = .cmd3s Set EV_cmd4s = .cmd4s Set EV_cmd5s = .cmd5s Set EV_ScmdUpdate = .ScmdUpdate Set EV_Scmds = .scmds Set EV_ScmdBack = .ScmdBack Set EV_ScmdNext = .ScmdNext Set EV_cmdHistExcel = .ScmdHistExcel Set EV_ScmdMoveExcel = .ScmdMoveExcel End With If initDisp() = False Then Call errProc("kRoBOCls-Class_Initialize", "initDisp-err") End if Private Function initDisp() As Boolean Dim i As Integer On Error GoTo errTrap initDisp = True With UserForm1 With .cmbKind .Clear .AddItem "値上がり" .AddItem "値下がり" .AddItem "ストップ高" .AddItem "ストップ安" .AddItem "出来高" .AddItem "時価総額上位" .AddItem "時価総額下位" .AddItem "単元株価格上位" .AddItem "単元株価格下位" .AddItem "配当利回り" .AddItem "高PER" .AddItem "低PER" .AddItem "高PBR" .AddItem "低PBR" .ListIndex = 0 End With .op50.Value = True .dateTime = "------" For i = 1 To 60 .Controls("op" & i).Enabled = False .Controls("op" & i).Value = False Next For i = 1 To 10 .Controls("DEL" & i).Enabled = False Next .cmd1s.Enabled = False .cmdHistExcel.Enabled = False .cmdMoveExcel.Enabled = False .cmd2s.Enabled = False .cmd3s.Enabled = False .cmd4s.Enabled = False .cmd5s.Enabled = Falss .SdateTime = "----------" .ScmdBack.Enabled = False .ScmdNext.Enabled = False .ScmdHistExcel.Enabled = False .ScmdMoveExcel.Enabled = False .scmds.Enabled = False For i = 1 To 50 .Controls("J" & i).TextAlign = fmTextAlignRight .Controls("C" & i).TextAlign = fmTextAlignRight .Controls("T" & i).TextAlign = fmTextAlignRight .Controls("R" & i).TextAlign = fmTextAlignRight .Controls("Z" & i).TextAlign = fmTextAlignRight .Controls("H" & i).TextAlign = fmTextAlignRight .Controls("D" & i).TextAlign = fmTextAlignRight Next End With Exit Function errTrap: initDisp = False End Function とりあえず、関係しそうなところを入れました。 よろしくお願いいたします。

  • エクセルのマクロを利用して

    マクロ初心者でです。 いろんなサイトから引用させて頂き次のようなマクロを作成しました。 実行すると、日付と担当者氏名(A1)がファイル名となるものです。 そこで教えて頂きたいのですが、実行すると保存先がマイドキュメントに なるのですが、これを例えば「C:\日報」というフォルダが指定されるようにしたいのですが、 自分なりに、いろいろ試したのですが全くできません。 宜しくお願い致します。 Sub 名前をつけて保存() Dim SaveFileName As String, re As Variant With Sheets("sheet1").Range("A1") If .Value = "" Then MsgBox "名前が入力されていません", vbExclamation Exit Sub Else SaveFileName = Format(Now, "yyyymmdd") & "_" & .Value End If End With re = Application.GetSaveAsFilename(SaveFileName) If re = False Then MsgBox "保存を中止しました", vbExclamation Else MsgBox "日報をを保存しました", vbInformation End If End Sub

専門家に質問してみよう