Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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_Dynamic - Fatal编程技术网

Excel 在VBA中逐行应用代码的动态代码

Excel 在VBA中逐行应用代码的动态代码,excel,vba,dynamic,Excel,Vba,Dynamic,Excel表格 我有以下代码,对应于工作表中的一行。我的问题是,如何编写这样的代码,使其连续地逐行应用代码,直到到达最后一行?那么,我该如何编写一个动态代码,如果我添加了新行,它将识别如何将代码应用于这些新行 对于上下文来说,这段代码所做的是接受用户输入,从March中减去该值,直到没有更多的用户输入要减去,或者March的值为0。如果三月是0,我们还没有减去所有的用户输入,那么我们就转到二月,做同样的事情,以此类推直到一月 Sub variance_sub() Dim reduce

Excel表格

我有以下代码,对应于工作表中的一行。我的问题是,如何编写这样的代码,使其连续地逐行应用代码,直到到达最后一行?那么,我该如何编写一个动态代码,如果我添加了新行,它将识别如何将代码应用于这些新行

对于上下文来说,这段代码所做的是接受用户输入,从March中减去该值,直到没有更多的用户输入要减去,或者March的值为0。如果三月是0,我们还没有减去所有的用户输入,那么我们就转到二月,做同样的事情,以此类推直到一月

Sub variance_sub()

    Dim reduce As Double, c As Range, diff As Double

    reduce = InputBox("what is the Variance required? (Pressure use a positive number)")

    Set c = ActiveSheet.Range("T7") 'march cell



    If reduce = 0 Then
        MsgBox "No further action required"
    ElseIf reduce > 0 Then      'This is for a pressure'
        Do
            If c.Value >= reduce Then
                c.Value = c.Value - reduce
                reduce = 0
            Else
                diff = reduce - c.Value
                c.Value = 0
                reduce = diff
            End If
            If c.Column > 1 Then Set c = c.Offset(0, -1) 'move left if we can
        Loop While reduce > 0 And c.Column >= 18
    Else
        c.Value = c.Value + reduce
    End If

End Sub
比如:

Sub variance_sub()

    Dim reduce As Double, c As Range, diff As Double, rng As Range

    reduce = InputBox("what is the Variance required? (Pressure use a positive number)")
    'get range to process
    With ActiveSheet
        Set rng = .Range("T7:T" & .Cells(.Rows.Count, "T").End(xlUp).Row) 'march cell
    End With

    'loop through range
    For Each c In rng.Cells   

        If reduce = 0 Then
            Debug.Print "No further action required" 'probably don't want msgbox
        ElseIf reduce > 0 Then      'This is for a pressure'
            Do
                If c.Value >= reduce Then
                    c.Value = c.Value - reduce
                    reduce = 0
                Else
                    diff = reduce - c.Value
                    c.Value = 0
                    reduce = diff
                End If
                If c.Column > 1 Then Set c = c.Offset(0, -1) 'move left if we can
            Loop While reduce > 0 And c.Column >= 18
        Else
            c.Value = c.Value + reduce
        End If

    Next c 

End Sub

对不起,我不知道有一个接受按钮。一直都是唐纳克斯。所以,你想要的不是T7,而是T8等等?如果是这样的话,基本上你只需要把所有这些都打包在一个循环中,这个循环贯穿T7:T?。谢谢你,我最终创建了以下内容,只是因为电子表格中有一些细微差别没有显示在屏幕截图中。Numrows=Range(“C7”,Range(“C7”).End(xlDown)).Rows.Count-2“不能是黑色的新行添加”否则这将变得混乱“x=0的MsgBox Numrows减少=输入框(“所需的方差是多少?(压力使用正数)”)设置c=ActiveSheet.Cells(7+x,20)“有些行被突出显示为某种颜色,公式无法应用于该颜色,但在询问之前,我想尝试一下如何合并该条件。