Excel 将值赋值给不在VBA中工作的变量

Excel 将值赋值给不在VBA中工作的变量,excel,vba,Excel,Vba,我目前正在编写一个包含二维newton 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").va

我目前正在编写一个包含二维newton 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上时,当范围(“h19”)为53时,它被指定为-344;当范围(“20”)为0时,z被指定为-5.12


有人知道如何解决这个问题吗?

总是定义从中提取数据的工作表。如果你写:

x = Range("H19").Value
默认情况下,您会说:

x = ActiveSheet.Range("H19").Value
它可能在您等待
53
时包含值
-344
。为此:

x = Sheets("myGoodSheet").Range("H13").Value

你确定你指的是正确的。正如马克在评论中所说,如果你在
工作手册(j)
的前面引用正确的工作簿,就更好了。

你所描述的是不可能的

与此相反:

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
行上放置一个断点,并使用局部变量窗口(从
视图
菜单)检查
xRange
yRange
的运行时值,然后用F8键检查
x
的运行时值:两者相同


请参阅以了解原因。

您的工作簿是否有多张工作表,或者是否打开了多个工作簿?代码中该点的ActiveSheet.Name和ActiveWorkbook.Name的值是什么?这些值是否返回您试图从中提取值的工作簿和电子表格选项卡的名称?+1用于在完整答案中强调始终明确命名工作簿和工作表的重要性。可以通过在代码顶部创建工作表对象来实现。一定要做到。这似乎是一个普遍的问题。在像这样的小代码中产生了令人烦恼的可靠性问题,但当您扩展到(例如)多个代码模块,从多选项卡电子表格中的按钮运行时,会出现指数级的更难解决的问题(并且很难诊断)。我实现了这一点,但仍然会出现相同的错误!当我把鼠标悬停在xRange.Value上时,它说它是53,但当我把鼠标悬停在x上时,它是-345。这上面只有一张纸,但有两个模块。@j_需要帮助。您是在黄线在上面时检查值,还是在走到下一行后检查值?@RubberDuck这不是黄线。当我悬停在变量上时,它是淡黄色的框。我已经检查了以下公式是否正确