【问题标题】:Converting javascript to VBA macro [duplicate]将javascript转换为VBA宏[重复]
【发布时间】: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


【解决方案1】:

在 vba 中只能像这样选择活动工作表。

不只是锁定,隐藏工作表也会导致这种情况。!

你试过了吗

ws.Range("your range").

如果 ws.Range() 不起作用,则直接使用工作表名称。

【讨论】:

  • 我已经尝试过 ws.Range 但我遇到的结果与它接受 sheet1 的范围并修改工作表然后继续通过以下工作表而不修改它们一样。
  • 我认为您应该在工作表上有循环基础,而不仅仅是 active.sheet 。如果您遇到任何基于锁定页面的问题。你可以在你的微程序之前解锁它,然后重新锁定它。
【解决方案2】:

类似的东西(未经测试)

Sub StepThroughTabs()
    Const NUM_ROWS As Long = 94
    Const START_ROW As Long = 4
    Dim shtNum As Long, wb As Workbook, arr, rng As Range, i As Long
    
    Set wb = ThisWorkbook 'for example
    Application.ScreenUpdating = False
    For shtNum = 1 To 12
        Set rng = wb.Worksheets(shtNum).Cells(1, 1).Resize(NUM_ROWS)
        arr = rng.Value
        rng.EntireRow.Hidden = False
        
        For i = START_ROW To NUM_ROWS
            If Len(arr(i, 1)) = 0 Then rng.Cells(i).EntireRow.Hidden = True
        Next i
    Next shtNum
End Sub

【讨论】:

  • 啊!常量和 shtNum!非常感谢你,蒂姆。这完美执行,无需任何修改。我很尴尬地说我自己尝试了多少其他路线。不过还在学习。感谢所有帮助过的人!干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-10
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
相关资源
最近更新 更多