我有一个= SUMIF公式,每次运行宏时都需要调整。公式的第三部分,总和范围,每次需要移动超过1列。我将每月运行一次(每列代表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
答案 0 :(得分:4)
将此变量保留在工作簿中的另一种方法是使用命名变量,而不必将其直接分配给单元格。从“公式”功能区中,打开名称管理器,然后添加名为“state”的新名称。此时您可以给它任何值。我们将修改您的VBA以进行更新。
然后,在您的代码中,您可以通过执行以下操作为此“变量”指定值:
ActiveWorkbook.Names("state").Value = LngCnt
您可以通过以下方式检索值:
LngCount = ActiveWorkbook.Names("state").Value
<强>更新强>
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
运行宏两次后,名称(“状态”)的保存值为2
。我救了&amp;关闭工作簿,重新打开它,并确认它仍然是2
:
答案 1 :(得分:1)
保持“状态”最好的方法之一是拥有一个存储状态的单元格,然后
sheets("state").range("a1").Value
获取值和
sheets("state").range("a1").Value = 1
将值设置为1。
如果原始工作表中有空格,则不需要新工作表,只需相应地更新