【问题标题】:VBA - Excel Formula CaclulationVBA - Excel 公式计算
【发布时间】:2017-06-16 06:29:47
【问题描述】:

我想在vba中写一段代码分别产生一个简单的计算,activesheet.cells(i,3) = activesheet.cells(i,2) * activesheet.cells(i,1)

我的问题是当我运行一次代码然后更改单元格(i,2)和单元格(i,1)上的值时,我希望单元格(i,3)单元格自动计算新值

例如,如果 cells(i,2) = 3 并且 cells(i,1) = 2 那么 cells(i,3) = 6 我想手动将excel中的值更改为单元格(i,2)= 4,单元格(i,1)= 4,而无需再次运行我想要自动单元格(i,3)= 16的代码

这段代码在for循环中

【问题讨论】:

  • 那么为什么要使用 VBA 呢?您必须处理工作表或工作簿事件才能获得此行为,这样做可能会产生不必要的副作用。如果您的逻辑如此简单,为什么不直接使用公式?
  • @RobinMackenzie 是对的。我知道实现您所描述的唯一方法是订阅 Worksheet.ChangeWorksheet.Calculate 事件并处理其中的计算;但请不要那样做。
  • 到目前为止,您是否尝试过在 VBA 中对其进行编码?如果是这样,你能分享你的代码吗?
  • 那家伙告诉 VBA,你的问题是什么?
  • @Pashiamas 冷静下来。很多时候人们要求使用 VBA 只是因为他们不知道他们的问题可以在没有的情况下解决。挑战 VBA 请求完全没问题。

标签: vba excel


【解决方案1】:

尝试制作一个包含地址的字符串,像这样

activesheet.cells(i,3) = "=" & activesheet.cells(i,2).Address(0, 0) & "*" &  activesheet.cells(i,1).Address(0, 0)

【讨论】:

  • 我不相信这是@Cadman 想要的,但它正确地回答了这个问题:-D
  • @JonDavies - 在评论中,OP 说他们听说他们可以使用activesheet.FormulaR1C1,所以我猜这与 OP 所追求的非常接近。 (虽然,我想我们可以争辩说它应该是Activesheet.Cells(i, 3).FormulaR1C1 = "=RC[-2]*RC[-1]"
【解决方案2】:

你需要的是宏事件。

右键单击要使用的工作表并选择查看代码。 复制粘贴这段代码:

Private Sub Worksheet_Change(ByVal Target As Range)
 On Error GoTo errorHandler
 Application.EnableEvents = True
 Dim lastrow As Long, rango As Range, Hoja As Worksheet
  Set Hoja = ActiveSheet
  lastrow = Application.CountA(Hoja.Range("A:A"))
  Set rango = Hoja.Range("A1:C" & lastrow)
  rango(lastrow, 3).Value = rango(lastrow, 1).Value * rango(lastrow, 2).Value
errorHandler:
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多