GoalSeek仅在VBA中,不依赖于工作表单元格

时间:2017-06-21 03:24:05

标签: excel vba excel-vba excel-formula

很快:我如何使用变量而不是ActiveCell ActiveCell.GoalSeek Goal:=0, ChangingCell:=Range("GM")公式?所以我想使用像GoalSickVariable.GoalSeek Goal:=0, ChangingCell:=Range("GM")

这样的东西

详细信息:

我正在努力缩短目前 GoalSeek 的表述,并且我在最后一行上停留了。

到目前为止,我在WorkSheet中运行我的代码,但由于我无法假设工作表的哪一部分是空的,所以我要去.Offset(0,25)远离参考单元格的单元格。但由于用户也可以使用该单元格,我希望不要在WorkSheet中使用任何范围 - 如果可能的话。

...  
ActiveCell.Offset(0, 25).Select
ActiveCell.Formula = "=ROUNDUP(SellPrice,-3)"
RoundedCellAddress = ActiveCell.Address
ActiveCell.Offset(0, 1).Select
ActiveCell.Formula = "=(" & RoundedCellAddress & "-" & "SellPrice" & ")"
'SellPrice is a NamedRange from this current Worksheet
ActiveCell.GoalSeek Goal:=0, ChangingCell:=Range("GM")
'GM is also a NamedRange from this WS and it changes SellPrice's value.
...

虽然 ActiveCell 假设单元格参考非常糟糕的做法,但上面的代码工作没有任何问题。无论如何,正如我上面解释的那样,我不想假设这个.Offset(0,25)单元格并且不想使用这些 ActiveCell

下面我将如何将代码转换为良好的实践:

  ...
  RoundedSellPrice = Application.WorksheetFunction.RoundUp(ws4.Range("SellPrice"), -3)
  GoalSick = RoundedSellPrice - ws4.Range("SellPrice")
  GoalSick.GoalSeek Goal:=0, ChangingCell:=ws4.Range("GM")
  ...

但现在您可以很容易地猜到,它会在GoalSick.GoalSeek行上显示无效的限定符错误,因为GMSellPrice是WorkSheet中定义的变量,所以他们是(我认为)无法在没有完全引用工作表中的任何单元格(包含公式)的情况下从VBA模块运行GoalSeek公式。

如果我不能在不参考WorkSheet中的单元格的情况下进行此公式化,我应该如何在不假设像.Offset(50,150)这样的虚拟单元格的情况下或不创建新的空工作表的情况下进行此操作?

0 个答案:

没有答案