如果打开另一个工作簿,Excel用户定义函数的计算结果为零

时间:2016-07-03 06:38:36

标签: excel vba excel-vba udf

我在Excel VBA中创建了一个用户定义函数(UDF),它从2列中获取内容并计算结果。当没有其他工作簿打开时,UDF会正确评估,但当同时打开任何其他工作簿时,UDF会更改为零。我认为问题出在前几个步骤,我在那里阅读输入:

Set Sheet = ThisWorkbook.Worksheets(inputSheet)
For i = 0 To numrows
    array_multi(i, 0) = Cells(inputRow1 + i, inputCol1)
    array_multi(i, 1) = Cells(inputRow2 + i, inputCol2)
Next

有人可以帮我解决这个问题吗?如果您需要更多详细信息,请告诉我们。

2 个答案:

答案 0 :(得分:2)

在您的代码中,您使用 Sheet ,这是您在为数组指定值时从未使用过的。

Set Sheet = ThisWorkbook.Worksheets(inputSheet)
array_multi(i, 0) = Cells(inputRow1 + i, inputCol1)
array_multi(i, 1) = Cells(inputRow2 + i, inputCol2)

尝试使用 Sht.Cells 确保您的数组从右侧工作表和工作簿中读取值。

Set Sht = ThisWorkbook.Worksheets(inputSheet)
For i = 0 To numrows
    array_multi(i, 0) = Sht.Cells(inputRow1 + i, inputCol1)
    array_multi(i, 1) = Sht.Cells(inputRow2 + i, inputCol2)
Next

答案 1 :(得分:0)

Cells对象引用ActiveWorkbook.ActiveSheet,除非合格。你可以用

With ThisWorkbook.Worksheets(inputSheet)
    For i = 0 To numrows
        array_multi(i, 0) = .Cells(inputRow1 + i, inputCol1)
        array_multi(i, 1) = .Cells(inputRow2 + i, inputCol2)
    Next i
End With  

由于Shai的回答是100%正确的,请接受并回答他的回答。