【发布时间】:2021-08-22 00:23:43
【问题描述】:
我无法找到从 javascript 到 VBA 宏的转换器。谁能告诉我如何以宏的形式完成此功能?它隐藏 4-94 中在其 A 列中具有空值的任何行,然后通过前 12 个选项卡/工作表继续执行此操作。如果我为每个工作表单独运行下面的宏,但在我必须锁定受影响的部分之后,下面的宏就可以工作。
function StepThroughTabs(){
var ss = SpreadsheetApp.getActiveSpreadsheet();//Get the spreadsheet name
var startrow = 4;//establishing the initial header row
var maxrows = 94;//Establishing the final row
for (var x = 0; x < 12; x++) { //Step through the first 12 tabs
var y = ss.getSheets()[x]; //Which tab are you on?
y.showRows(1,maxrows) //grab an array of rows
var vals = y.getRange(1,1,maxrows,1).getValues(); // The second number is the column I want to evaluate, in this case it is column A as a 1
for (var i = startrow; i < maxrows; i++) if (vals[i] == "") y.hideRows(i+1); // Hide the row based on the value found
}
}
我尝试了以下代码,该代码需要手动选择要运行的工作表,但是当我在工作簿锁定后保存时,它一直挂在 Set rng = Range("A5:A93") 处。不幸的是,锁定工作簿是不可避免的。
Sub HideLoop()
Application.ScreenUpdating = False
'Create variable to hold worksheets
Dim ws As Worksheet
'Loop through each selected worksheet
For Each ws In ActiveWindow.SelectedSheets
'Perform action. E.g. hide selected worksheets
Dim c As Range, rng As Range
Set rng = Range("A5:A93")
rng.EntireRow.Hidden = False
For Each c In rng
If c.Value = vbNullString Then c.EntireRow.Hidden = True
Next c
Next ws
Application.ScreenUpdating = True
End Sub
感谢您的帮助!
【问题讨论】:
-
始终使用工作表引用限定范围:Set rng = Range("A5:A93") 变为 Set rng = ws.Range("A5:A93")
标签: javascript excel vba loops google-apps-script