我目前正在编写一个包含二维牛顿raphson sub的程序。它是这样开始的:
Sub newton11()
Dim x As Double, z As Double, tolerance As Double
Dim error_x As Double, error_z As Double
Dim iteration As Integer
iteration = 0
tolerance = 0.05
x = Range("h19").value
z = Range("h20").value
然而,当我运行sub时,它不起作用。当我调试时,我注意到当我在x上盘旋时,当Range(" h19")为53时,它被赋值为-344,而当Range(" 20" )是0。
有人知道如何解决这个问题吗?
答案 0 :(得分:6)
始终定义从中提取数据的工作表。如果你写:
x = Range("H19").Value
默认情况下你说:
x = ActiveSheet.Range("H19").Value
在您等待-344
时,可能包含值53
。有了这个:
x = Sheets("myGoodSheet").Range("H13").Value
你确定你正在引用正确的那个。正如Mark在他的评论中所说,如果您在Workbooks(j)
集合前面Sheets
引用正确的工作簿,那就更好了。
答案 1 :(得分:2)
您所描述的内容是不可能的。
而不是:
x = Range("h19").value
z = Range("h20").value
提取变量:
Dim xRange As Range, yRange As Range
Set xRange = Range("h19")
Set yRange = Range("h20")
x = xRange.Value
y = yRange.Value
现在在x = xRange.Value
行放置一个断点,并使用 locals窗口(来自View
菜单)检查xRange
的运行时值和yRange
- 然后 F8 并检查x
的运行时值:两个 相同。
请参阅@Matteo's answer了解 why 。