Looking for help to improve the efficiency of my VBA code here. Not sure how i can set it up that if i have 10 row in B (B5 to B10), that it will automatically populate the:
Without manually specifying it row by row in the code itself
Example:
-If i set value of B9 as 2, it populate the values of the cells D9 and E9
-If i set value of B6 as 1, it populate the value of the cell D6
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B5")) Is Nothing Then
Select Case Target.Value
Case Is = 1
Range("D5").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Case Is = 2
Range("D5").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Range("E5").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Case Is = 3
Range("D5").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Range("E5").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Range("F5").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Case Else
Range("D5:F5").Value = ""
End Select
End If
If Not Intersect(Target, Range("B6")) Is Nothing Then
Select Case Target.Value
Case Is = 1
Range("D6").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Case Is = 2
Range("D6").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Range("E6").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Case Is = 3
Range("D6").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Range("E6").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Range("F6").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Case Else
Range("D6:F6").Value = ""
End Select
End If
If Not Intersect(Target, Range("B7")) Is Nothing Then
Select Case Target.Value
Case Is = 1
Range("D7").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Case Is = 2
Range("D7").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Range("E7").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Case Is = 3
Range("D7").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Range("E7").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Range("F7").Value = "• Course Name:" & vbNewLine & "• No. Of Slides Affected:" & vbNewLine & "• No. of Activities Affected:"
Case Else
Range("D7:F7").Value = ""
End Select
End If
End Sub
If I understand what you're trying to do, perhaps the following using Resize
and Target.Row
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.CountLarge <> 1 Then Exit Sub
If Not Intersect(Target, Me.Range("B5:B10")) Is Nothing Then
Dim rw As Long
rw = Target.Row
Dim txt As String
txt = "• Course Name:" & vbNewLine & _
"• No. Of Slides Affected:" & vbNewLine & _
"• No. of Activities Affected:"
Select Case Target.Value
Case 1 To 3
Me.Range("D" & rw).Resize(, Target.Value).Value = txt
Case Else
Me.Range("D" & rw & ":F" & rw).Value = ""
End Select
End If
End Sub
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.