【问题标题】:Copy Macro into Google Sheets将宏复制到 Google 表格中
【发布时间】:2021-11-19 17:57:04
【问题描述】:

我一直在做一个项目,但我对宏不熟悉,对脚本更不熟悉。我已经在工作表“PM Entry”和按钮的宏上创建了一个输入表单,复制数组中的所有单元格并将它们粘贴到另一个工作表“PM 跟踪”的新行中,这样我就可以开始从条目。宏,完美运行。上传到 Google 表格,当然宏不会传输。

我遇到的麻烦是将代码从宏转录为脚本。我已经让它工作了几次,但不是连续的。这是宏,我正在尝试变成脚本

Sub SubmitButton()
    
    Dim DB As Worksheet, SH As Worksheet
    Dim TargetRow As Long, Index As Long
    Dim SourceArr As Variant, DestArr As Variant
    Dim Source As Range, Dest As Range
    
    'set reference up-front
    Set SH = ThisWorkbook.Worksheets("PM Entry")
    Set DB = ThisWorkbook.Worksheets("PM Tracking")
    With DB
        TargetRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1
    End With
    SourceArr = Array("D5", "H5", "D7", "D9", "H7", "H9", "D15", "D16", "D18", "H15", "H16", "H18", "D24", "D25", "D27", "H24", "H25", "H27", "D34", "D35", "D37", "H34", "H35", "H37", "D43", "D44", "D46")
    DestArr = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA")
    
    'loop through the source array, copying cell values to DB sheet
    For Index = LBound(SourceArr) To UBound(SourceArr)
        Set Source = SH.Range(SourceArr(Index))
        Set Dest = DB.Range(DestArr(Index) & TargetRow)
        Source.Copy
        Dest.PasteSpecial (xlPasteValues)
    Next Index
    
    End Sub

对此的任何帮助将不胜感激。

【问题讨论】:

  • 看来我们需要启动新标签VB to GAS translation。这是一个非常流行的主题,这些天。不幸的是,我不精通VB。不过,如果没有人可以提供帮助,我会尽力弄清楚。
  • 我不推荐“翻译”,这是最糟糕的方式,因为有时 GSheets 提供了公式(查询、数组公式、过滤器)的可能性。您必须解释您的期望并尝试开始。

标签: google-apps-script google-sheets


【解决方案1】:

好吧,以防万一。可能这段代码可以完成这项工作:

function copyData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('PM Entry');
  var dest_sheet = ss.getSheetByName('PM Tracking');

  var cells = ["D5", "H5", "D7", "D9", "H7", "H9",
  "D15", "D16", "D18", "H15", "H16", "H18", "D24", "D25", "D27", 
  "H24", "H25", "H27",  "D34", "D35", "D37", 
  "H34", "H35", "H37", "D43", "D44", "D46"];

  var data = cells.map(c => sheet.getRange(c).getValue());

  dest_sheet.appendRow(data);
}

【讨论】:

  • 你是我的英雄。工作完美。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多