我试图在两个范围内对相应的单元格值求和,并用一个和替换其中一个范围中的值。请参阅下面的代码段:
For i = 1 To daterow.Rows.count - 1
If (outinter - diff) > 0.5 Then
diff = diff + DateDiff("n", Indt(i - 1), Indt(i))
Y = Sheets("output").Cells(Rows.count, 1).End(xlUp).row + 1
Set inputRng = Sheets("Input").Range(Sheets("Input").Cells(i, 7), _
Sheets("input").Cells(i, ngag + 6))
Set outputRng = Sheets("Output").Range(Sheets("Output").Cells(Y, 6), _
Sheets("Output").Cells(Y, ngag + 5))
outputRng.value = Evaluate(outputRng.Address & "+" & inputRng.Address)
Else
'Some Code here
End If
Next
因此,我在第5行和第6行设置了两个范围(inputRng和outputRng).inputRng来自工作表(“输入”),outputRng来自工作表(“输出”)。当我运行代码时,“评估”功能(第7行)对范围求和,但这是问题所在:
这两个范围都来自同一张纸,因为在计算过程中我处于纸张(“输入”)中,所以inputRng和outputRng的值都是从纸张(“输入”)派生的。当我按如下方式重写第7行时:
sheets("output").outputRng.value = Evaluate(sheets("output").outputRng.Address _
& "+" & sheets("input").inputRng.Address)
我收到错误消息“对象不支持此属性或方法”。有没有其他方法可以强制代码从我的表格(“输出”)读取outputRng?
我可以遍历每个单元格并对值进行求和,但是运行代码需要很长时间,因为这个宏必须处理大量数据。
任何想法都将不胜感激。感谢您对此进行调查。
MPD
解决方案
糟糕,服务器没有让我回答这个问题,所以,我在这里发布解决方案:
感谢大家的意见。实际上Excellll的最后评论点击了我的想法!所以,这就是我如何运作:
Dim value() As Variant
Dim shtIn As Worksheet, shtOut As Worksheet
Set shtIn = Sheets("Input")
Set shtOut = Sheets("Output")
Redim Value(daterow.Rows.count - 1)
For i = 1 To daterow.Rows.count - 1
If (outinter - diff) > 0.5 Then
diff = diff + DateDiff("n", Indt(i - 1), Indt(i))
Y = shtOut.Cells(Rows.count, 1).End(xlUp).row + 1
Set inputrng = shtIn.Range(shtIn.Cells(i, 7), shtIn.Cells(i, ngag + 6))
Set outputRng = shtOut.Range(shtOut.Cells(Y, 6), shtOut.Cells(Y, ngag + 5))
value = Evaluate("Output!" & outputRng.Address & "+" _
& "Input!" & inputrng.Address)
shtOut.Range(shtOut.Cells(Y, 6), shtOut.Cells(Y, ngag + 5)) = value
Else
'Some Code here
End If
Next
因此,我没有将总和写入另一个工作表的范围,而是将其存储到一个数组中,然后将数组传输到输出范围中,我可以不进行循环操作。
答案 0 :(得分:1)
为什么不在第7行使用它呢?
outputRng = outputRng.Value + inputRng.Value
编辑:
通过声明一些Worksheet对象和几个Range对象,你可以帮自己调试一下。
Dim shtIn As Worksheet, shtOut As Worksheet
Dim rngIn As Range, rngOut As Range
Set shtIn = Sheets("Input")
Set shtOut = Sheets("Output")
Set rngIn = shtIn.Range("Input")
Set rngOut = shtOut.Range("Output")
然后在代码中使用这些范围,而不是重复的Sheets("...").Range("...")
结构。