【问题标题】:VBA to GAS script conversion [closed]VBA 到 GAS 脚本转换 [关闭]
【发布时间】:2018-09-10 13:06:26
【问题描述】:

我对 Excel 和电子表格中的宏和东西真的很陌生。我有一个朋友在 Excel 中创建了这个宏来完成所需的工作:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim day As String

    If Target.Row > 2 Then        
        day = Date
        Sheets("CFbase").Cells(Target.Row, Target.Column).Value = day
    End If

End Sub

简而言之:我需要在第一张工作表中输入文本,并在另一张工作表的等效单元格中生成今天的日期。

我需要这个以便稍后使用日期进行条件格式设置,然后使用日期为每个单元格着色,具体取决于它是今天还是过去几天更新。

可以将此宏转换为电子表格的脚本吗?

【问题讨论】:

  • 用于电子表格的脚本,用于运行?
  • 只是为了澄清。您是否在问这是否可以从 Excel VBA 移植到 Google Sheets Apps 脚本?我没有使用过 Google Sheets 脚本,但我敢打赌它可能会。 It would probably look something like this
  • @JNevill 我会检查你给我的线程。另外,是的,我正在尝试使相同的脚本在电子表格中工作,但基本上我对如何完成它的知识为零。
  • 我会提供更多帮助,但在涉及 Google Apps 脚本时,我已经不适应了。我确实相信 100% 的我分享的链接会让你到达那里的 90%。诀窍就是使用脚本中已经存在的已定义的rowcolumn 变量将该日期输出指向另一个工作表。以它为起点应该很容易。
  • 您输入的第一个值是日期吗?

标签: excel vba google-apps-script google-sheets


【解决方案1】:

我会做这样的事情。 onEdit(e)在您添加新值时随时触发。 然后您获取该值并将实际日期放在另一个sheet 的同一单元格中。如果您不希望每次都执行此代码行,也可以添加条件。

function onEdit(e)
{
  // condition to make sure you are not entering value in the date sheet
  if(e.source.getActiveSheet().getName() != "CFbase" && e.range.rowStart > 2)
  {
    //grab the sheet where you wan't the date to be inserted.
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("CFbase");
    //grab the cell where the date will be inserted 
    var cell = sheet.getRange(e.range.getRow(), e.range.getColumn());
    //create the actual date
    var now = Utilities.formatDate(new Date(), "GMT+1", "dd/MM/yyyy");
    //set the value of the cell with the date
    cell.setValue(now);
  }
}

Here 是正确格式化Date 的文档。

【讨论】:

  • 用我的第二张表的实际名称替换“CFbase”并尝试运行宏。收到以下错误:TypeError: Cannot read property "source" from undefined.
  • 你能分享你的电子表格吗?我会看看它会更容易吗?错误来自 onEdit 而不是名称。我猜你正在尝试从 IDE 运行 onEdit
  • 刚刚编辑了我的代码,它现在可以工作了。请避免直接从 IDE 运行 onEdit 它无法调试进入“执行脚本”菜单中执行 onEdit 只需更改电子表格中的值
  • 这里是工作表的链接。希望对您有所帮助:docs.google.com/spreadsheets/d/…
  • 经过研究,我发现没有一个很好的方法来制作跨页条件颜色格式。那么如何更改代码以便将日期粘贴到右侧的单元格中(在每个字母列下方创建一个空列)。 (我玩了一点复制代码,但无法使脚本工作)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
相关资源
最近更新 更多