“小王,请将你手头工作簿中名称为《财务计划表》工作表发给我。”
对于领导或者同事这样的要求或请求,
我们的处理方法通常以下几种:
在桌面上复制原有工作簿,删除所有名称不为《财务计划表》的工作表。然后发给领导。
在桌面上新建一工作簿,将原工作簿中的《财务计划表》工作表复制粘贴至新工作簿中。
右键单击《财务计划表》工作表标签,选择移动和复制功能,然后将表以副本的形式复制到新工作簿中。
这样非常普通的日常操作有很多。做多了,是不是特别心烦。那怎么样更方便地将工作表另存为一个新的工作簿呢?《Power Click》插件为上述需求提供了一键式的另存功能。您可以使用《Power Click》插件解决您工作中烦点。
但本篇神奇的VBA将分享如何使用Excel VBA编程来实现本篇的主题需求。
------ 需求场景1------
将工作簿中的《财务计划表》工作表单独另存为一个新的工作簿。
<code>Sub 将工作簿中的某个工作表另存为一个新的工作簿() Dim book As Workbook '声明一工作簿类型变量 ActiveWorkbook.Worksheets("财务计划表"
).Copy
'将财务计划表复制成一个新的工作簿 Set book = ActiveWorkbook '绑定这个新的工作簿 book.SaveAs CreateObject("WScript.Shell"
).SpecialFolders("Desktop"
) &"\小王的财务表.xlsx"
'将这个新的工作簿另存到桌面上 book.Close True '关闭保存工作簿 End Sub/<code>
注意:使用不含参数的Worksheet.Copy方法,将使工作表另存到一个新的工作簿中,并且该工作簿会成为活动工作簿。
------ 需求场景2------
将工作簿中的所有工作表单独另存为一个新的工作簿
有了需求1中的代码经验之后,那么解决需求2中的需求就简单多了, 需求2无非就是重复需求1的功能。为了更方便的复用代码, 我将需求1的代码写成了通用过程,过程名设为SaveAsNewWorkbook方法,参数中设置了要另存的字符串类型的工作表表名称和相应要另存为的工作簿名称, 这样在需求2中就可以直接调用了。
<code>Sub SaveAsNewWorkbook(ShtNameAs
String, wbNameAs
String) Dim bookAs
Workbook'声明一工作簿类型变量 ActiveWorkbook.Worksheets(ShtName).Copy '
将财务计划表复制成一个新的工作簿 Set book = ActiveWorkbook'绑定这个新的工作簿 book.SaveAs CreateObject("WScript.Shell").SpecialFolders("Desktop") & "" & wbName & ".xlsx" '
将这个新的工作簿另存到桌面上 book.CloseTrue
'关闭工作簿 End Sub
/<code>
下面调用SaveAsNewWorkbook(ShtName As String, wbName As String)方法
运行后发现速度慢, 您可以加上
Application.ScreenUpdating = False 语句关闭屏幕刷新来加快运行速度。不过记住运行完请记得加上
Application.ScreenUpdating = True 语句恢复屏幕刷新。
------ 需求场景3------
将名称不为《财务计划表》的所有其他工作表整体另存为一个新的工作簿
这个需求比上面的稍微复杂点了, 不过思路也很多。我们可以
1复制整个工作簿然后删除副本中的《财务计划表》。
2.也可先新建工作簿,然后将当前工作簿中的所有非《财务计划表》复制进新的工作簿中。
3.也可以整体复制并同步创建一个新的工作簿。
4.其他方法。
这里《神奇的VBA》就分享第3种思路的VBA代码实现。
神奇的VBA在上面的代码中综合运用了数组和和Worksheet.Copy方法。代码中ThisWorkbook.Worksheets(arr).Copy相当于同时将数组中的所有工作表整体复制加入一新的工作簿中。
------ 结语 ------
本篇的分享就到这里!上面三种需求场景的VBA代码实现方法具有一定的通用性,职场人可以直接拿来稍微修改即可为你所用。 如果觉得本篇主题对您的工作有帮助,还请