如何基于其他按公式自动更改的单元格运行宏

时间:2016-11-10 11:43:51

标签: excel vba excel-vba

根据主题,我需要的是基于其他单元格运行宏。

情况如下:

  1. 单元格G3直到行尾包含使用公式=IF(B3="";"";(SUMIF('Incoming Goods'!$F$3:$F$1048576;'Current Stock'!B3;'Incoming Goods'!$M$3:$M$1048576)-(SUMIF('Outgoing Goods'!$D$4:$D$1048576;'Current Stock'!B3;'Outgoing Goods'!$J$4:$J$1048576))))的数据 - >我需要将此公式转换为VBA

  2. 细胞H3应该包含:如果G3.value = 0那么"缺货",否则" "

  3. 每当G3中的数据自动更改或此工作表上的任何其他数据更改时,必须计算此工作表。

    已经尝试过此代码:

    Private Sub Worksheet_Calculate()
        Dim Current As Worksheet
        Dim Rng1 As Range
        Dim Target As Range
    
        Set Current = Worksheets("Current Stock")
        Set Rng1 = Current.Range("G:G")
        Set Target = Range("H:H")
    
        For Each Rng1 In Target
            If Rng1.Value2 = "0" Then
                Target.Value2 = "Out Of Stock"
            Else
                Exit Sub
            End If
        Next 
    End Sub
    

    但是,上面的代码不起作用。已尝试使用Private Sub Selection Change()Private Sub Selection Change(),但仍无效。

    有什么建议吗?

    提前致谢

2 个答案:

答案 0 :(得分:0)

第一部分的答案如下:

ActiveCell.FormulaR1C1 = _
        "=IF(R[2]C[1]="""","""",(SUMIF('Incoming Goods'!R3C6:R1048576C6,'Current Stock'!R[2]C[1],'Incoming Goods'!R3C13:R1048576C13)-(SUMIF('Outgoing Goods'!R4C4:R1048576C4,'Current Stock'!R[2]C[1],'Outgoing Goods'!R4C10:R1048576C10))))"
方便提示:将任何excel公式转换为代码,点击记录宏按钮,然后单击单元格,按F2键,然后按回车键,并停止记录宏。代码现在将在vba编辑器中的自己的模块中。

答案 1 :(得分:0)

这应该做你想要的。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Application.Intersect(Range("A1"), Target) Is Nothing Then
        If IsNumeric(Target.Value) And Target.Value > 200 Then
            Call YourMacroName
        End If
    End If
End Sub