我有一个可以满足我想要的循环,但是我想在每个工作表中设置一个活动单元格,这样我每次循环时都不必单击它。
我尝试了两种似乎有意义的方法,但它们都只适用于循环中的最后一张: -
function setDraft() {
//msg box to confirm relevant sheets are hidden, thus excluded from code
var response = Browser.msgBox("SET AS DRAFT","Have you hidden sheets you don't want marked as draft?", Browser.Buttons.YES_NO);
if(response=="no")
return;
else if(response=="cancel")
return;
else
//loop and code for Visible sheets
var ss = SpreadsheetApp.getActive();
var allsheets = ss.getSheets();
for (var s in allsheets){
var sheet=allsheets[s]
var date = sheet.getRange('I1')
if (sheet.isSheetHidden()!= true) {
//sheet.setActiveRange(date);
sheet.setActiveSelection(date);
sheet.getRange('I5').setValue('DRAFT');
}
}
}
任何人都可以让我知道我哪里出错了吗?
提前致谢!
答案 0 :(得分:0)
在JS中使用for...in
会导致问题(更多关于in this post)。其次,尝试通过SpreadsheetApp
类而不是Browser
按钮使用内置的UI类。
function setDraft() {
var ui = SpreadsheetApp.getUi();
var allsheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
//msg box to confirm relevant sheets are hidden, thus excluded from code
var response = ui.alert("SET AS DRAFT","Have you hidden sheets you don't want marked as draft?", ui.ButtonSet.YES_NO);
if(response == ui.Button.NO) {
return;
} else {
for (var s=0; s<allsheets.length; s++){
var sheet=allsheets[s]
var date = sheet.getRange('I1')
if (sheet.isSheetHidden()!= true) {
sheet.setActiveSelection(date);
sheet.getRange('I5').setValue('DRAFT');
}
}
}
}
答案 1 :(得分:0)
使用sheet.activate()
或range.activate()
方法。如果您只想转到特定工作表,请使用sheet method,但如果您想要选择特定单元格,请使用range。我没有测试过范围,但是,我知道如果您使用sheet.activate()
,那么您将被带到该表。