Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA用于根据用户选择设置特定单元格值_Excel_Vba - Fatal编程技术网

Excel VBA用于根据用户选择设置特定单元格值

Excel VBA用于根据用户选择设置特定单元格值,excel,vba,Excel,Vba,在这里寻找帮助来提高我的VBA代码的效率。 不确定如何设置,如果B中有10行(B5到B10),它将自动填充: 如果B的值为1,则该行的D列 如果B的值为2,则更新D和E 如果B的值为3,则更新D、E和F 无需在代码本身中逐行手动指定 例如: -如果我将B9的值设置为2,它将填充单元格D9和E9的值 -如果我将B6的值设置为1,它将填充单元格D6的值 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Tar

在这里寻找帮助来提高我的VBA代码的效率。 不确定如何设置,如果B中有10行(B5到B10),它将自动填充:

  • 如果B的值为1,则该行的D列
  • 如果B的值为2,则更新D和E
  • 如果B的值为3,则更新D、E和F
无需在代码本身中逐行手动指定

例如:

-如果我将B9的值设置为2,它将填充单元格D9和E9的值

-如果我将B6的值设置为1,它将填充单元格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

如果我理解您的意图,可以使用
Resize
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
Private子工作表\u更改(ByVal目标作为范围)
如果Target.CountLarge 1,则退出Sub
如果不相交(目标,Me.Range(“B5:B10”))则为零
变暗rw为长
rw=Target.Row
以字符串形式显示文本
txt=“•课程名称:”&vbNewLine&_
“•受影响的幻灯片数量:”&vbNewLine&_
“•受影响的活动数量:”
选择Case Target.Value
案例1至3
Me.Range(“D”和rw).Resize(,Target.Value).Value=txt
其他情况
Me.Range(“D”和rw&“:F”和rw).Value=“”
结束选择
如果结束
端接头

是的,太完美了!帮我省了几个小时的c&p:-)很乐意帮忙!若我为B5设置了一个值2,它将用数据填充2个单元格。如果我要向该单元格添加额外的文本,那么如果我将B5更新为1,它将被删除。它重置文本值。如果更改仍在范围内,是否有保存更改的方法?是。听起来代码应该只在问题范围当前为空时添加文本?可能值得作为一个新问题提问,因为我不确定我是否理解细节。请随意点击我这里的链接太多。