vba - VBA SaveCopy 函数 + 丢失工作表
问题描述
我创建了一个基于 Excel 2016 的模板,用户可以根据它填写和创建工作表单。用户插入一个唯一 ID,并使用基本INDEX&MATCH
公式从单独的工作表中获取一些与 ID 相关的参数a
。工作表是用VBA-macro usingSaveCopyAs
方法创建的。
在获取参数并启动 VBA 以创建工作表单后,ID 将不再更改。因此,我不再需要整个工作表a
,并且想放弃它以保持工作表更轻量级。我能够保留获取的参数,所以这不是问题。
我不希望用户每次创建工作表单时都必须重新打开表单,所以我不希望 VBAa
从模板本身中删除工作表,即使用户无法将更改保存到模板,(s)每次必须创建工作表时,他都必须重新打开模板文件。
知道是否可以做点什么吗?是否有可能以某种方式运行或类似方法,但同时从新目标文件中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
解决方案
如果我理解你正确地尝试这样的事情(“空气编码”,所以可能有错别字):
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
如果您的用户在您的代码运行时碰巧点击了不同的工作表,并且可能会炸毁您
推荐阅读
- angular - Angular 库扩展了 3rd 方组件
- c# - 如何使用 C# 中给定顶点的高度找到三角形中点的高度?
- python - AttributeError:“str”对象没有属性“items”(python)
- c++ - 如何比较 std::function 对象?
- javascript - VueJS 在 EventBus 接收到新数据后重新渲染组件
- typescript - React Native - 如何在 Typescript 的接口中声明 StyleSheet 属性?
- logstash - 在 grok 表达式之间使用分隔符
- ios - 首次和最后一次使用后的 iOS 本地通知
- node.js - 使用 mongoose 从多个集合中删除
- r - 导入多个 xlsx 文件并从单元格添加变量,同时跳过行 (R)