Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


72266 / 76738 ←次へ | 前へ→

【8957】Re:バッティング
回答  りん E-MAIL  - 03/11/11(火) 20:00 -

引用なし
パスワード
   学生です さん、こんばんわ。

イベントモジュール内で実行することでまたイベントがおきないように、
  Application.EnableEvents = False
を設定します。

ただし、このコマンドは強烈なので
  Application.EnableEvents = True
を忘れると、その後イベントが起きませんので、必ず忘れずに戻しましょう。
何かのエラーで中断して戻りそびれると困るので、Resumeで必ず通るようにしてあります。

Private Sub Worksheet_Change(ByVal Target As Range)
  'イベントキャンセル
  Application.EnableEvents = False
  Dim MyR As Range, セル As Range, r1 As Range, r2 As Range
  '
  On Error Resume Next
  Set MyR = Columns("A:A").SpecialCells(xlCellTypeConstants, 23)
  'Targetが複数セルの場合もないとはいえない
  Set r1 = Target.SpecialCells(xlCellTypeConstants, 23)
  On Error GoTo 0
  If (Not r1 Is Nothing) And (Not MyR Is Nothing) Then
   For Each r2 In r1
     With r2
      If .Value <> "" Then
        For Each セル In MyR
         If (.Value = セル.Value) And (.Address <> セル.Address) Then
           .Select
           MsgBox .Value & "は、入力済みです", vbInformation
           .ClearContents
         
           Exit For
         End If
        Next
      End If
     End With
   Next
  End If
  '終了
ExitMacro: 'TAG
  Set MyR = Nothing: Set セル = Nothing: Set r1 = Nothing
  'イベント監視開始
  Application.EnableEvents = True
Exit Sub
errout:
  MsgBox Error(Err), vbExclamation, "エラーで中断"
  Resume ExitMacro
End Sub

こんな感じです。

0 hits

【8929】バッティング 学生です 03/11/10(月) 11:53 質問
【8930】Re:バッティング つん 03/11/10(月) 12:50 回答
【8932】Re:バッティング 学生です 03/11/10(月) 14:28 質問
【8933】Re:バッティング つん 03/11/10(月) 14:57 発言
【8935】Re:バッティング 学生です 03/11/10(月) 15:00 回答
【8957】Re:バッティング りん 03/11/11(火) 20:00 回答

72266 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free