VBA SaveCopy功能+丢失工作表

时间:2018-09-12 10:17:04

标签: excel vba excel-vba

我创建了一个基于Excel 2016的模板,用户可以填充并基于该模板创建工作表单。用户插入一个唯一的ID,并使用基本的INDEX&MATCH公式从单独的工作表a中获取一些与ID相关的参数。工作表是使用SaveCopyAs方法通过VBA宏创建的。

获取参数并启动VBA以创建工作表单后,该ID将不再更改。因此,我不再需要整个工作表a,并希望将其删除以使工作表更轻便。我能够保留获取的参数,所以这不是问题。

我不希望用户每次创建工作表单时都必须重新打开表单,所以我不希望VBA从模板本身中删除工作表a,即使用户无法保存对模板的更改,他将不得不在每次需要创建工作表单时重新打开模板文件。

知道是否可以做些什么?可能可以以某种方式运行SaveCopyAs或类似方法,但同时从新的目标文件中删除工作表a吗?使INDEX&MATCH公式从另一个工作簿中获取所需的信息在理论上是可行的,但是据我所知,该另一个工作簿必须始终处于打开状态,这无疑会引起不必要的问题。

我当前用于工作表单创建的VBA是这样的:

Sub Save_copy()

Dim FileName As String

With ActiveWorkbook 

[H3] = Format(Now, "dd.mm.yy_hhmm")
Range("H2").Value = Range("H1").Value

  FileName = "SERVICE " & _
        Range("H1").Value & _
        " - " & Format(Now, "dd.mm.yy") & _
        "_" & Format(Now, "hhmm") & _
        "." & Right(.Name, Len(.Name) - InStrRev(.Name, "."))

  .SaveCopyAs "G:\SERVICE" & "\" & FileName
End With

Call Reset

End Sub

1 个答案:

答案 0 :(得分:0)

如果我理解您可以正确尝试类似的操作(“空编码”,则可能有错字):

Sub Save_copy()

  Dim FileName As String

  With ActiveWorkbook

    [H3] = Format(Now, "dd.mm.yy_hhmm")
    Range("H2").Value = Range("H1").Value

    FileName = "SERVICE " & _
               Range("H1").Value & _
               " - " & Format(Now, "dd.mm.yy") & _
               "_" & Format(Now, "hhmm") & _
               "." & Right(.Name, Len(.Name) - InStrRev(.Name, "."))

    .SaveCopyAs "G:\SERVICE\" & FileName
  End With

  Dim newWorkbook As Excel.Workbook
  Set newWorkbook = Workbooks.Open("G:\service\" & FileName)
  newWorkbook.Worksheets("A").Delete
  newWorkbook.Close True

  Reset

End Sub

另外,一些编码技巧:

  • 不需要Call-不推荐使用该函数,仅存在该函数可以防止古老的代码爆炸
  • 您的"\"行中还有.SaveCopyAs的附加连接-只需在路径的其余部分加上斜杠(就像我一样)。
  • 不合格的Range("H2")是指ActiveWorksheet,如果您的用户在代码运行时碰巧单击了另一个工作表,则可能会惹恼您