1

ユーザーがセル B、C、または D をクリックしたかどうかに応じてセル A の値を変更するという単純なタスクを実行しようとしています。何らかの理由で、以下のコードは最初の with ステートメントでのみ機能します (この場合、これにより、セル A の値が「低」に設定されます)。BまたはCをクリックしても機能しない理由を誰か知っていますか? このコードに関するヘルプは素晴らしいでしょう! ありがとうございました!

Sub Worksheet_SelectionChange(ByVal Target As Range)

With Target

If Not Intersect(.Cells, Columns(1)) Is Nothing Or .Count > 1 Then Exit Sub
Sheets("Sheet1").Range("A" & ActiveCell.row).Value = "Low"

If Not Intersect(.Cells, Columns(2)) Is Nothing Or .Count > 1 Then Exit Sub
Sheets("Sheet1").Range("A" & ActiveCell.row).Value = "Medium"

If Not Intersect(.Cells, Columns(3)) Is Nothing Or .Count > 1 Then Exit Sub
Sheets("Sheet1").Range("A" & ActiveCell.row).Value = "High"

End With

End Sub
4

2 に答える 2

8

最初のステートメントが最初の列でない場合、ルーチンは終了します。テストを変更すると、もう少し成功するでしょう

また、特定の列を探しているので、select case ステートメントでそれらをチェックして、混雑を緩和します。

Sub Worksheet_SelectionChange(ByVal Target As Range)

With Target

    if .Count > 1 then exit sub
    Select Case .column
        Case 2
            Sheets("Sheet1").Range("A" & ActiveCell.row).Value = "Low"
        Case 3
            Sheets("Sheet1").Range("A" & ActiveCell.row).Value = "Medium"
        Case 4
            Sheets("Sheet1").Range("A" & ActiveCell.row).Value = "High"
    end Select
End With

End Sub
于 2013-01-26T03:10:38.787 に答える
1

これを試して:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rOut As Range

With Target
   Set rOut = Me.Range("A" & .Row)
   If .Count = 1 Then
       If Not Intersect(.Cells, Columns(2)) Is Nothing Then
            rOut.Value = "Low"
       Else
            If Not Intersect(.Cells, Columns(3)) Is Nothing Then
                rOut.Value = "Medium"
            Else
                If Not Intersect(.Cells, Columns(4)) Is Nothing Then
                    rOut.Value = "High"
                End If
            End If
        End If
    End If
End With

End Sub
于 2013-01-26T02:50:58.063 に答える