【问题标题】:Runs once, then never again运行一次,然后再也不会
【发布时间】:2020-06-19 10:29:24
【问题描述】:

我向 Stack Overflow 发布了一个关于创建 Excel 宏以在上一列中添加/减去列中的值,然后清除当前列的问题。

Excel cell value update macro

该代码在 office 2007 中工作了多年,但在 office 365 (2016/2019) 中不再工作。

如果 F1 的值为 100.00 英镑,我在 G1 中输入 -50,F1 变为 50.00 英镑,而 G1 为空。 F 列中的每个单元格都会更改输入到 G 列中的行中的数量。

在 Excel 的 Office 365 版本中,此宏执行一次,然后在我关闭并重新打开文档之前不会再次运行。导致这种情况的宏工作方式是否发生了变化?

编辑: 这是代码(附在表 1 上),根据我之前的问题稍作修改,用于 G 列。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim FirstNum As Currency 'Long is for number currency should help keep format
Dim SecNum As Currency

If Target.Column = 7 Then  'Only Runs if Cel l being changed is in column C, Might need to be Columns
    FirstNum = Target.Offset(0, -1).Value ' Value in Column B
    SecNum = Target.Value   ' Value being typed in C
Target.Offset(0, -1).Value = FirstNum + SecNum ' Makes Cell B equal to difference of previous value and value typed in C
     'MsgBox ("Difference Found") ' Just to display code worked Remove when confirm code works
    Target.Clear ' Clears Value you typed
End If

End Sub

【问题讨论】:

  • 粘贴您的实际代码而不是答案的链接,因为您所描述的内容不适合答案(只有 col C 触发器更改),我想知道您是否更改了某些内容或有其他宏在游戏中关闭工作表更改事件

标签: excel vba


【解决方案1】:

我没有足够的代表发表评论... 没有看到你的完整代码很难知道。但是如果你的代码有

 application.enableEvents = false 

您最终需要将其设置回 True。或者工作表更改事件在工作簿关闭并再次打开之前不会触发

【讨论】:

  • 哇,好奇怪。自从我在 2014 年问这个问题以来,这一直在 Excel 2007 中工作。将我的桌面升级到 Office 365 并且它停止工作,所以我把笔记本电脑留在了 2007 年,它仍然可以工作。我从未将 enableEvents 设置为 false,但在 if 中执行此操作,然后在单元格清除修复它之后将其设置为 true。猜猜 2007 一定是在递归调用上超时了。
  • 我很高兴它修复了!
【解决方案2】:

我认为 Office 365 没什么问题...

为了按照您的说明工作,代码必须如下所示:

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim FirstNum As Currency
 Dim SecNum As Currency

 If Target.Column = 3 Then  'Only Runs if Cell being changed is in column C, Might need to be Columns
    FirstNum = Target.Offset(0, -1).Value ' Value in Column B
    SecNum = Target.Value   ' Value being typed in C
    Target.Offset(0, -1).Value = FirstNum - SecNum ' Makes Cell B equal to difference of previous value and value typed in C
    Target.Clear
 End If
End Sub

但是,您必须了解此代码仅适用于更改 C:C 列中的单元格。 您六年前收到的变体仅在同一列中起作用,但在垂直方向上。我的意思是,更改C2,它曾经修改C1。但它有一个错误。如果您尝试修改C1,它将尝试将偏移量设置为-1,Excel 中不存在第0 行并返回错误...

对于G1F1 范围,我无法理解该事件如何至少运行一次。只有当工作表中存在某些链接,或者您修改了代码时,它才能工作,在这种情况下,真正使用的代码将使我们能够分析和告诉您,而不是假设问题出在哪里是。我不认为这是 Office 版本的问题,但谁知道...

【讨论】:

  • 抱歉,添加了代码。它已更改以反映正在使用的新列。
  • @MikeS159:所以,正如我建议的那样……你检查过事件是否被触发了吗?放置一条线:MsgBox "It works"...也许,您运行另一个子程序使EnableEvents = False 并因错误而停止...从那时起,Events 可能不会再触发了。
【解决方案3】:

听起来一个公式就足够了。但是一个单元格不能引用自己,你可以试试,

E1: =F1+G1

其中 E1 是 F1 和 G1 之和的新单元格,因为您正在输入其符号运算符,即 - 或 + 您可以将其作为加法保留在单元格 E1 中。要将其用于列,只需从单元格 E1 的左下角一直拖动到所需的行号。每次值更改时都会刷新。

excel image

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    相关资源
    最近更新 更多