1

我有一个 =SUMIF 公式,每次运行宏时都需要调整它。公式的第三部分,求和范围,每次需要移动一列。我将每月运行一次(每列代表 1 个月)

我得到了一些建议来使用LngCnt效果很好的变量。但是现在我被迫在同一个工作表中再添加 3 个部分,这些部分都使用 =SUMIF 公式,每次运行宏时都需要调整,但总和范围不同(因此它们从不同的列中提取)

我尝试运行相同的LngCnt变量,但很快遇到了保存计数的问题,因此第二部分的计数在计算之前从 2 开始。我可以调整起点,以便 +2 为我提供适当的列,但问题是我需要每个月都这样做。由于每次关闭工作簿时计数都会重置,因此当我在第 2 个月运行它时它不会正常运行。

这是我原帖的链接: Excel-Macro Help: LngCnt

这是代码的一部分(4个部分中的2个)

    ActiveCell.FormulaR1C1 = "=SUMIF('Worksheet1'!R5C1:R159C1,RC1,'Worksheet1'!R5C" & 13 + LngCnt & ":R159C" & 13 + LngCnt & ")"
LngCnt = LngCnt + 1
Range("B13").Select
Selection.AutoFill Destination:=Range("B13:B17"), Type:=xlFillDefault
Range("B13:B17").Select
Range("B23").Select

ActiveCell.FormulaR1C1 = _
    "=SUMIF('Worksheet2'!R3C6:R47C6,RC1,'Worksheet2'!R3C" & 16 + LngCnt & ":R47C" & 16 + LngCnt & ")"
LngCnt = LngCnt + 2
Range("B23").Select
Selection.AutoFill Destination:=Range("B23:B32"), Type:=xlFillDefault
Range("B23:B32").Select

更新

> Public LngCnt As Long
Sub Actual()
'
' Actual Macro
'
LngCount = ActiveWorkbook.Names("state").Value

    ActiveCell.FormulaR1C1 = "=SUMIF('Workbook1'!R5C1:R159C1,RC1,'Workbook1'!R5C" & 13 + LngCnt & ":R159C" & 13 + LngCnt & ")"
    LngCnt = LngCnt + 1
    Range("B13").Select
    Selection.AutoFill Destination:=Range("B13:B17"), Type:=xlFillDefault
    Range("B13:B17").Select
ActiveWorkbook.Names("state").Value = LngCnt
End Sub
4

2 回答 2

4

Another way of keeping this variable in your workbook, without having to assign it directly in to a cell, is to use a named variable. From the Formula ribbon, open the names manager, and add a new name called "state". You can give it any value at this point. We will modify your VBA to update it.

Names Manager

Then, in your code, you can assign a value to this "variable" by doing:

ActiveWorkbook.Names("state").Value = LngCnt

You can retrieve the value by:

LngCount = ActiveWorkbook.Names("state").Value

Update

Public LngCnt As Long
Sub Actual()
'
' Actual Macro
Dim startRange as Range: Set startRange = Range("B13")
    LngCnt = Replace(ActiveWorkbook.Names("state").Value, "=", "")
    startRange.FormulaR1C1 = "=SUMIF('Workbook1'!R5C1:R159C1,RC1,'Workbook1'!R5C" & 13 + LngCnt & ":R159C" & 13 + LngCnt & ")"
    LngCnt = LngCnt + 1
    startRange.AutoFill Destination:=Range("B13:B17"), Type:=xlFillDefault
    'Range("B13:B17").Select  '## I comment this line because I don't think its necessary.
    ActiveWorkbook.Names("state").Value = LngCnt

End Sub

After running the macro twice, the saved value of Name("state") is 2. I save & close the workbook, re-open it, and confirm it is still 2:

Screenshot

于 2013-06-19T17:54:22.967 回答
1

保持“状态”最好的方法之一是拥有一个存储状态的单元格,然后

sheets("state").range("a1").Value

获得价值和

sheets("state").range("a1").Value = 1

将值设置为一。

如果原始工作表中有空间,则不需要新工作表,只需相应更新即可

于 2013-06-19T17:45:40.220 回答