首页 > 解决方案 > VBA SaveCopy 函数 + 丢失工作表

问题描述

我创建了一个基于 Excel 2016 的模板,用户可以根据它填写和创建工作表单。用户插入一个唯一 ID,并使用基本INDEX&MATCH公式从单独的工作表中获取一些与 ID 相关的参数a。工作表是用VBA-macro usingSaveCopyAs方法创建的。

在获取参数并启动 VBA 以创建工作表单后,ID 将不再更改。因此,我不再需要整个工作表a,并且想放弃它以保持工作表更轻量级。我能够保留获取的参数,所以这不是问题。

我不希望用户每次创建工作表单时都必须重新打开表单,所以我不希望 VBAa从模板本身中删除工作表,即使用户无法将更改保存到模板,(s)每次必须创建工作表时,他都必须重新打开模板文件。

知道是否可以做点什么吗?是否有可能以某种方式运行或类似方法,但同时从新目标文件中SaveCopyAs删除工作表?aINDEX&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

标签: vbaexcel

解决方案


如果我理解你正确地尝试这样的事情(“空气编码”,所以可能有错别字):

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如果您的用户在您的代码运行时碰巧点击了不同的工作表,并且可能会炸毁您

推荐阅读