我创建了一个基于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
答案 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
,如果您的用户在代码运行时碰巧单击了另一个工作表,则可能会惹恼您