- ベストアンサー
エクセルマクロ初心者が複数のWorksheet_Changeを1つのシートで実行する方法
- エクセルマクロ初心者が複数のWorksheet_Changeを1つのシートで実行させる方法について教えてください。
- Private Sub Worksheet_Change(ByVal Target As Range)を2つ組み合わせて1つのシートで動作させたいのですが、うまくいきません。単体では動作します。
- 初心者なので組み合わせ方が分かりません。どのようにすれば複数のWorksheet_Changeを1つのシートで動作させることができるでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
質問の趣旨は明確ではないが、たぶん下記のようにやりたいのかなと思う。 入力の範囲は特定していない。 特にコピー元の特定はわからないから、Excelからのコピーだけはできないようにしてあるつもり。 Private Sub Worksheet_Change(ByVal Target As Range) f = True For Each c In Target If c <> "" Then f = False Next If f Then Exit Sub With Application .EnableEvents = False If Target.Count > 1 Then MsgBox "複数セルへの入力はダメです。" .Undo .CutCopyMode = False .EnableEvents = True Exit Sub End If If .CutCopyMode <> False Then MsgBox "コピーは禁止!!" & Chr(10) & "データを消去します。" .Undo .CutCopyMode = False Else Target = StrConv(Target, vbUpperCase) End If .EnableEvents = True End With End Sub
その他の回答 (1)
- WindFaller
- ベストアンサー率57% (465/803)
見た感じ、イベントで、MsgBox を出すのは、あまりうまくありませんから、本当に実用に耐えるものかどうかはなんとも言えませんが、テスト段階でしょうか? 1> Target = StrConv(Target, vbUpperCase) 2>"コピーは禁止!!", これらは、同じセル(列)で行おうとしているのでしょうか? そもそも、これをお使いなろうとしているExcelのバージョンはいくつなのでしょうか? それによっても、コードが変わるのではないかと思います。
補足
excel 2010を使用しています。 No1はcaps lockで入力規則でABCなどの『半角英数』大文字を入力させたいため、「a」と入力されたら「A」に強制変換。 No2は他のシートやブックからのコピー防止です。 1つのセルのみと2つ以上セルをコピーしようとした時にキャンセルさせるためです。 私を含めて初心者が多いので、この2つの条件が必要と思いお願いしたところでした。 よろしくお願いします。
お礼
私が期待した通りの動作でした。 情報不足で申し訳ありませんでした。 ご回答いただきました内容を理解するため頑張っていきます。 本当に助かりました。 ありがとうございました。