Vba 添加位于两个不同图纸上的两个区域中的单元格
我试图将两个范围内对应的单元格值求和,并用和替换其中一个范围内的值。请参见下面的我的代码片段:Vba 添加位于两个不同图纸上的两个区域中的单元格,vba,excel,excel-2003,Vba,Excel,Excel 2003,我试图将两个范围内对应的单元格值求和,并用和替换其中一个范围内的值。请参见下面的我的代码片段: 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
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行中设置了两个范围(inputng和outputng)。输入来自工作表(“输入”),输出来自工作表(“输出”)。当我运行代码时,“Evaluate”函数(第7行)对范围求和,但问题是:
这两个范围都是从同一个表中导出的,因为在计算过程中我在表中(“输入”),所以inputng和outputng的值都是从表中导出的(“输入”)。当我重写第7行时,如下所示:
sheets("output").outputRng.value = Evaluate(sheets("output").outputRng.Address _
& "+" & sheets("input").inputRng.Address)
我收到一条错误消息“对象不支持此属性或方法”。是否有其他方法强制代码从我的工作表中读取输出(“输出”)
我可以循环遍历每个单元格并求和值,但运行代码需要很长时间,因为这个宏必须处理大量数据
任何想法都将不胜感激。谢谢你的调查
MPD
解决方案 哎呀,服务器没有让我回答这个问题,所以,我在这里发布解决方案: 谢谢大家的意见。事实上,Excelll的最后一句话触动了我的心!下面是我如何让它工作的:
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
因此,我没有将总和写入另一张表中的某个范围,而是将其存储到一个数组中,然后将该数组传输到输出范围中,这样我就可以不用循环了。为什么不在第7行使用它呢
outputRng = outputRng.Value + inputRng.Value
编辑:
为了调试起见,您可以声明几个工作表对象和几个范围对象
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")
然后在代码中使用这些范围,而不是重复的
工作表(“…”)。范围(“…”
结构。为什么不在第7行使用它呢
outputRng = outputRng.Value + inputRng.Value
编辑:
为了调试起见,您可以声明几个工作表对象和几个范围对象
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")
然后在代码中使用这些范围,而不是重复的
表(“…”)。范围(“…”
构造。我仍在查看它,但我能告诉您的第一件事是,错误消息来自(例如)outputng
是一个局部变量,它不是“输出”表的属性<代码>工作表(“输出”)。outputRng不存在,因此对象不支持此属性或方法。
我同意!在电子表格本身(不使用vba)中,我们可以使用命名范围,也可以使用其他图纸中的范围属性。应该有一种方法可以使用VBA并从位于另一张图纸的范围中读取值。只是不知道如何…+1跟进并提供解决方案=我还在看它,但我能告诉你的第一件事是错误消息来自这样一个事实:例如,outputng
是一个局部变量,它不是“输出”表的属性<代码>工作表(“输出”)。outputRng不存在,因此对象不支持此属性或方法。
我同意!在电子表格本身(不使用vba)中,我们可以使用命名范围,也可以使用其他图纸中的范围属性。应该有一种方法可以使用VBA并从位于另一张图纸的范围中读取值。只是不知道如何…+1跟进并提供解决方案=德克塞尔,谢谢你的回复。事实上,在发布这个问题之前,我已经试过了。我收到一条错误消息“类型不匹配”。同意!!这是一个好主意,我将在代码中使用它。问题仍然没有解决。我仍然认为您应该完全取消Evaluate()。无论如何,第7行的问题是。Address将只返回单元格引用,例如“$A$1”,而不返回工作表引用(您需要它才能工作),例如“'Input'!$A$1”。谢谢Excell!!!你给了我一个主意。它现在开始工作了!!伟大的我已经编辑了我原来的帖子。谢谢回复。事实上,在发布这个问题之前,我已经试过了。我收到一条错误消息“类型不匹配”。同意!!这是一个好主意,我将在代码中使用它。问题仍然没有解决。我仍然认为您应该完全取消Evaluate()。无论如何,第7行的问题是。Address将只返回单元格引用,例如“$A$1”,而不返回工作表引用(您需要它才能工作),例如“'Input'!$A$1”。谢谢Excell!!!你给了我一个主意。它现在开始工作了!!伟大的我已经编辑了我原来的帖子。