2016-05-23 114 views
0

我想让vba在同一数据集内的两个范围内创建一个公式,作为变量lastRow和lastRow2的输入。但是,当我尝试创建并计算公式时,不是获取最后一个单元格的值,而是获取零。下面问题的代码:Excel VBA-返回零值为范围的动态公式

Dim lastRow As Long 
Dim lastRow2 As Long 
    lastRow = Range("A" & Rows.Count).End(xlUp).Row 
    lastRow2 = Range("M" & Rows.Count).End(xlUp).Row 


... 



    'Calculate ATRT 2014 at cell B4 
    Range("B6").Formula = "=(SUM(J11:J" & lastRow & ")/ SUM(I11:I" & lastRow & "))" 
    Range("E6").Formula = "=(SUM(U11:U" & lastRow2 & ")/ SUM(T11:T" & lastRow2 & "))" 
    Range("H6").Formula = "=E6-B6" 

运行此得到的两个公式:=(SUM(J11:J0)/ SUM(I11:I0))和=(SUM(U11:U0)/ SUM(T11:T0)) 。为什么范围的末尾是零?

+1

这就是我问你的其他问题。范围都在同一张纸上吗? – findwindow

+0

是的,范围在同一张表上,在同一张表中。 1表,但有两个不同的范围 –

+0

嗯,你是否正在运行宏,而所需的工作表是活动?如果是这样,那我就难住了。除非你真的没有列A/M ...编辑:呵呵。即使列是空的,它仍然至少为1 ....我们需要更多的代码。 – findwindow

回答

0

我很确定发生了什么,如果你没有定义range()和row()对象在哪个工作表上,所以VBA是猜测,可能猜测不正确。尝试添加工作表对象,然后定义要在该工作表上使用的所有范围和行。

Dim lastRow As Long 
Dim lastRow2 As Long 
Dim ws As Worksheet 

Set ws = ActiveSheet 
lastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row 
lastRow2 = ws.Range("M" & ws.Rows.Count).End(xlUp).Row 


'... 



'Calculate ATRT 2014 at cell B4 
ws.Range("B6").Formula = "=(SUM(J11:J" & lastRow & ")/ SUM(I11:I" & lastRow & "))" 
ws.Range("E6").Formula = "=(SUM(U11:U" & lastRow2 & ")/ SUM(T11:T" & lastRow2 & "))" 
ws.Range("H6").Formula = "=E6-B6" 
+0

这就是我以前认为它至少应该以1结尾的事情。还有其他事情正在发生。 – findwindow

+1

是的,我认为0也很奇怪。但是当我真的运行这段代码时,它正确地返回了。没有实际的工作簿,很难说出发生了什么。提交者可以尝试的一个选项是查看该范围认为是父级的是debug.print Range(“M”&Rows.Count).End(xlUp).parent.name'并查看它是否实际上是他们认为的工作表它应该是。 –

+0

刚刚检查过,它是同一张工作表。我尝试使用旧代码(不进行上面列出的更改)和第一个公式(在B6上输出)运行它,但第二个公式(在E6上输出)没有,并且具有相同的错误。 这个问题似乎与lastRow2,因为试图自动填充它导致向上。 –