首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当某个范围内的单元格发生更改时,需要运行触发器

当某个范围内的单元格发生更改时,需要运行触发器
EN

Stack Overflow用户
提问于 2019-04-14 23:45:17
回答 2查看 45关注 0票数 0

我有一个电子表格,用户可以使用注释更新列'J‘中的单元格,但是当他们更新单元格时,我需要运行我的脚本。这将复制列'I‘和'J’中的所有信息,并将它们粘贴到另一个单元格中,然后将一个Vlookup公式放回到'J‘中它刚刚从中获取信息的位置。

这可能听起来很复杂,但因为我有不同的工作表从不同的工作簿中提取信息,所以我需要以这种方式进行。

然而,我尝试了许多解决方案,但无法让它在单元格改变时运行。

我已经尝试了一个可安装的更改触发器,但它在整个工作簿上都有效,并且经常会删除它应该复制的信息。

我已经粘贴了我在下面工作的代码,任何帮助都将不胜感激。

代码语言:javascript
复制
function onChange(e) 
{
  var editRange = { // J:J
    top : 2,
    bottom : 2000,
    left : 10,
    right : 10
  };

  // Exit if we're out of range
  var thisRow = e.range.getRow();
  if (thisRow < editRange.top || thisRow > editRange.bottom) return;

  var thisCol = e.range.getColumn();
  if (thisCol < editRange.left || thisCol > editRange.right) return;

  //Where Is The Data Stored That You Want To Copy
  var ss = SpreadsheetApp.openById("1ZQLKnCHD9acTXCKpTeOnJshHEz43FDPdKZ-U6Me-k_k")
  var West = ss.getSheetByName("West Orders")
  var WestNotes = ss.getSheetByName("West Notes")

  //Ranges of The Data You Want To Copy
  var CopyWestNotes = West.getRange(2, 9,West.getLastRow(),2).getValues()

    //Clear The Data Before Overiding
  var ClearNotes = WestNotes.getRange(2,1,WestNotes.getLastRow(),2).clear()

  //Ranges Of The Data You Want To Store
  var PasteWestId = WestNotes.getRange(2,1,West.getLastRow(),2).setValues(CopyWestNotes);

  //Put a formula in to update Notes;
  var formula = '=IFerror(VLOOKUP(i2,\'West Notes\'!A:B,2,false)," ")'
  var WestFormula = West.getRange(2,10,West.getLastRow(),1).setValue(formula)
  }
EN

回答 2

Stack Overflow用户

发布于 2019-04-15 01:59:27

onEdit事件

更改触发器不是一个简单的触发器。你必须自己安装它。此event object中也没有e.range。我猜,如果你检查了你的执行,你会看到一些错误。

我将您的代码修改为onEdit()简单触发器。但是,如果您正在执行任何需要权限的操作,则可能必须将其设置为可安装。看起来你就是。所以现在你应该能够继续调试你的代码了。

代码语言:javascript
复制
function onEdit(e) {
  var editRange = {top:2,bottom:2000,left:10,right:10};
  var thisRow=e.range.rowStart;
  if (thisRow<editRange.top || thisRow>editRange.bottom)return;
  var thisCol=e.range.columnStart;
  if (thisCol<editRange.left || thisCol>editRange.right)return;
  var ss = SpreadsheetApp.openById("id");
  var West = ss.getSheetByName("West Orders");
  var WestNotes = ss.getSheetByName("West Notes");
  var CopyWestNotes = West.getRange(2, 9,West.getLastRow(),2).getValues();
  var ClearNotes = WestNotes.getRange(2,1,WestNotes.getLastRow(),2).clear();
  var PasteWestId = WestNotes.getRange(2,1,West.getLastRow(),2).setValues(CopyWestNotes);
  var formula = '=IFerror(VLOOKUP(i2,\'West Notes\'!A:B,2,false)," ")';
  var WestFormula = West.getRange(2,10,West.getLastRow(),1).setValue(formula);
}

我应该提到,您需要在第7行添加id。

票数 2
EN

Stack Overflow用户

发布于 2019-05-03 22:54:06

对脚本第7行的简单更改就彻底解决了这个问题,我使用的是.getActiveSpreadsheet,而不是.openById

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55677140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档