2017-09-14 18 views
1

2つ目のコードを1つのワークシートに追加しようとしていて、「曖昧な名前が検出されました」というエラーが発生し続けます。私は2つのコードを組み合わせる必要があるが、そうすることに問題があることを理解する。曖昧な名前が検出されました:Worksheet_change

Private Sub Worksheet_Change(ByVal Target As Range) 


     'are changes made within answer range? 

    Set isect = Application.Intersect(Target, Range("Answers")) 

    If Not (isect Is Nothing) Then 

     For Each chng In Target.Cells 

      'Get row number 

      startY = Impact.Range("Answers").Row 
      targetY = chng.Row 
      row_offset = (targetY - startY) + 1 

      rating_type = Impact.Range("Impacts").Cells(row_offset, 1) 

      If rating_type = "Major/V.High" Then cols = 16711884 
      If rating_type = "Significant/High" Then cols = 255 
      If rating_type = "Important/Moderate" Then cols = 49407 
      If rating_type = "Minor/Low" Then cols = 5287936 
      If rating_type = "" Then cols = 16777215 

      Impact.Range("Ratings").Cells(row_offset, 1).Interior.Color = cols 
      Impact.Range("Impacts").Cells(row_offset, 1).Interior.Color = cols 

     Next chng 

    End If 

End Sub 
Private Sub Worksheet_Change(ByVal Target As Range) 
' To Select Multiple Items from a Drop Down List in Excel 
Dim Oldvalue As String 
Dim Newvalue As String 
Application.EnableEvents = True 
On Error GoTo Exitsub 
If Target.Address = "$C$2" Then 
    If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then 
    GoTo Exitsub 
    Else: If Target.Value = "" Then GoTo Exitsub Else 
    Application.EnableEvents = False 
    Newvalue = Target.Value 
    Application.Undo 
    Oldvalue = Target.Value 
     If Oldvalue = "" Then 
     Target.Value = Newvalue 
     Else 
     If InStr(1, Oldvalue, Newvalue) = 0 Then 
      Target.Value = Oldvalue & ", " & Newvalue 
     Else: 
     Target.Value = Oldvalue 
     End If 
    End If 
    End If 
End If 
Application.EnableEvents = True 
Exitsub: 
Application.EnableEvents = True 
End Sub 

期待していた誰かが、このエラーを回避するために、2つを結合する方法を知っている:ここでは2つのコード、他の下の一つがあります。

ありがとうございます!

+0

シートモジュールに2つの個別の変更イベントコードを使用することはできません。複数の範囲で変更を追跡する必要がある場合は、IFおよびElseIfブロック内の1つの変更イベントコードで条件を結合できます。エラーのあいまいな名前は自明なので、同じ名前のマクロが2つあります。 – sktneer

+0

同じ名前のプロシージャが2つあります。この時点では、この名前はイベントハンドラ用に予約されていても問題ありません。 1つのコードモジュールに同じ名前のプロシージャを2つ持つことはできません。ワークシートの変更でもっと多くのことを行う必要がある場合は、新しいコードを既存の 'Worksheet_Change'ハンドラにコピーします。すでに存在するコードとどのように組み合わされるべきかだけを知っています。 – GSerg

答えて

0

私のコメントに基づいて、以下のサンプルコードに示すように、複数の範囲の変更を追跡できます。

Private Sub Worksheet_Change(ByVal Target As Range) 
'Exit the sub if more than one cells are changed at the same time 
If Target.CountLarge > 1 Then Exit Sub 

'Disable the event so that if the code changes the cell content of any cell, the code is not triggered again 
Application.EnableEvents = False 

'Error handling to skip the code if an error occurs during the code execution and enable the events again 
On Error GoTo ErrorHandling 

'Change event code will be triggered if any cell in column A is changed 
If Not Intersect(Target, Range("A:A")) Is Nothing Then 
    MsgBox "The content of a cell in colunm A has been changed." 

'Change event code will be triggered if any cell in column C is changed 
ElseIf Not Intersect(Target, Range("C:C")) Is Nothing Then 
    MsgBox "The content of a cell in colunm C has been changed." 

'Change event code will be triggered if any cell in column E is changed 
ElseIf Not Intersect(Target, Range("E:E")) Is Nothing Then 
    MsgBox "The content of a cell in colunm E has been changed." 
End If 

ErrorHandling: 
Application.EnableEvents = True 
End Sub 
関連する問題