VBA程序自动运行

时间:2018-06-20 19:45:13

标签: excel-vba vba excel

我有一个带有两个选项卡的工作表,想要让VBA自动运行并弹出一个窗口消息,提示“ NPV负!请输入将来的储蓄!”任何时候单元格J27(在两个选项卡中)都会计算负值。 我在模块中有以下代码,当我测试并单击运行时,它可以完成我想做的事情,但是实际上,当我更改信息并且单元格J27为负数时,什么也没有发生。我对VBA非常陌生,因此不胜感激。

function filterTable(event) {
  var Case = event.target.value.toUpperCase();
  var Hyphen = event.target.value.replace(/[-]/g, "");
  var rows = document.querySelector("#Catalogue").rows;

  for (var i = 1; i < rows.length; i++) {
    var firstCol = rows[i].cells[0].textContent.toUpperCase().replace(/[-]/g, '');
    var thirdCol = rows[i].cells[2].textContent.toUpperCase().replace(/[-]/g, '');
    if (firstCol.indexOf(Case) > -1 || thirdCol.indexOf(Case) > -1 || firstCol.indexOf(Hyphen) > -1 || thirdCol.indexOf(Hyphen) > -1) {
      rows[i].style.display = "";
    } else {
      rows[i].style.display = "none";
    }
  }
}

谢谢!

1 个答案:

答案 0 :(得分:0)

Worksheet_Calculate子例程仅在重新计算您在其中创建的工作表时才会被触发。 Range("J27")仅查看该工作表中的单元格,因此您的循环仅迭代一次。

要从两个工作表中获取单元格J27中的值,您需要指定工作表和每个工作表的范围。

Private Sub Worksheet_Calculate()
    If Sheets("This Sheet").Range("J27").Value < 0 And _
       Sheets("That Sheet").Range("J27").Value < 0 Then 
        MsgBox ("NPV negative! Please enter future Savings!"), , "Invalid Entry"
    End If
End Sub

将其放入两个工作表中,以便在重新计算其中一个工作表时使其运行。 (或者,更好的是,将其保存在单独的模块中,然后从两个Worksheet_Calculate子例程中调用它。)