【问题标题】:VBA Goal seek is setting cells to 0 without changing the argumentVBA 目标搜索是将单元格设置为 0 而不更改参数
【发布时间】:2014-07-09 22:21:43
【问题描述】:

我在这里扯头发。

当我在工作表中运行目标搜索时,这很好。当我尝试从 vba 运行完全相同的目标搜索(手动记录或编码)时,我应该是目标搜索的单元格显示为 0,并且变量不会改变。 F9 什么都不做。如果我编辑目标搜索单元格,强制它重新计算,它会再次显示原始输出 - 因为没有任何改变。

有没有其他人遇到过这种情况?

Range("G14").GoalSeek Goal:=0, ChangingCell:=Range("F14")

G14 是一个用户定义的公式,带有 2 个范围参数和几个单个单元格参数。

F14 是范围参数之一内的单元格,并且绝对是计算中的驱动程序。

【问题讨论】:

  • 可以发布您的公式吗?
  • 您确定单元格 G14 包含受单元格 F14 中的值影响的公式? (只是确认)
  • @hnk G14 肯定包含受 F14 值影响的公式。 F14 用于 E14 中的公式,该公式是 2 列范围 (D3:E14) 的一部分,该范围是 G14 的参数。手动更改 F14 会导致 G14 发生变化,除此之外,使用工作表中的目标搜索也可以正常工作。
  • 尝试在代码中的某处添加DoEvents。它可能有助于清除可能导致问题的未决事件。
  • @Barett G14 =VanillaIRS($J$2:$K$27,$M$2:$N$27,A14,B14,$D$3:E14,$D$3:E14) E14 =DiscountFactor(basisyears($A$1,D14),F14) F14 是百分比格式的数字。我还应该提到,VanillaIRS 函数在计算期间确实调用了引用加载项中的函数。这不是问题,但我想我应该提一下。

标签: vba excel


【解决方案1】:

尝试运行它

DoEvents
ActiveSheet.Range("G14").GoalSeek Goal:=0, ChangingCell:=ActiveSheet.Range("F14")

不确定它是否与您现有的代码有实质性不同,但可能会正确执行。

还可以在录制宏时尝试在电子表格上手动运行您的目标搜索,如果发生奇怪的事情,请查看自动生成的宏代码。

【讨论】:

  • 不幸的是,DoEvents 没有提供任何帮助。
  • 哦,我贴出来的代码其实就是整个记录的结果。我还应该提到,在计算 G14 函数时调用了加载项。不过,这些函数在此工作表和背景代码中运行良好。在寻找目标之前没有问题。
  • 只是好奇,既然你的Goal_Seeking为0,那么单元格不应该显示0吗?寻求其他价值观的目标怎么样。以及如何将函数更改为 =TAN(X) 并寻求目标以达到 1(所以答案是 Pi / 2
  • 我尝试将目标更改为其他数字,但同样的事情发生了。单元格显示为零,变量不变。我确实注意到,当我尝试目标搜索时,工作表上引用相同范围的其他函数实例也显示为零。
  • 我只是想让您知道我能够解决问题。在我的 UDF 中,我使用 range.find 方法对一个简单函数进行了多次调用,以从范围中读取参数。当我将此功能更改为“手动”循环遍历范围而不是使用 range.find 时,我发现目标搜索工作正常。说了这么多,我还是不明白为什么使用 find 方法会导致问题。
猜你喜欢
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多