将值赋值给在VBA中不起作用的变量

时间:2015-04-16 20:50:32

标签: excel vba

我目前正在编写一个包含二维牛顿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。

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

2 个答案:

答案 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