Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 8482|回复: 10

[分享] 【烟花原创】VBA零基础之第33篇 Workbooks对象

[复制链接]
发表于 2013-11-26 23:40 | 显示全部楼层 |阅读模式
本帖最后由 hwc2ycy 于 2013-12-4 21:13 编辑

  Workbooks对象Excel应用程序中当前打开的所有Workbook对象的集合

  一、如何通过代码新建一个工作簿
  Workbooks.add方法:返回的是一个代表新建的Workbook对象。

  Add(Template)
  Template:可选参数。指定基于什么模板创建工作簿。
  如果模板指定为现有的Excel文件,那么创建新工作簿时则以指定的Excel文件为模板
  如果模板参数为一个常量,新工作簿内包含一个指定类型的工作表。
  
如果省略此参数,则创建包含一定数目空白工作表的新工作簿(数量可通过Application.SheetsInNewWorkbook指定)。

  注意新建的工作簿自动成为当前的活动工作簿


  Sub Samp()
   Dim wb As Workbook
   Workbooks.Add
   '新建一个工作簿
   Workbooks.Add Template:=xlWBATChart
   '新建一个工作簿,指定了工作簿内包含的工作表类型为图表
   
   Set wb = Workbooks.Add(Template:=xlWBATExcel4IntlMacroSheet)
   '新建一个工作簿,指定了工作簿内包含的工作表类型为宏表
   'wb引用新建的工作簿对象
      
   Application.SheetsInNewWorkbook = 5
   'Excel 自动插入到新工作簿中的工作表数目
   Workbooks.Add
   '新建一个工作簿,包含5个空白工作表
   Application.SheetsInNewWorkbook = 3
  End Sub


  二、如何用代码关闭所有的打开的Workbook对象
  Workbooks.Close
  如果某个打开的工作簿有改动,Microsoft Excel 将显示询问是否保存更改的对话框和相应提示。
  在使用该方法前,一定要记得先保存数据,万一误操作关闭了所有的文件,数据丢失后,可不能找我索赔。
   Workbooks.close

  三、如何用代码打开一个工作簿
   Workbooks.open方法:一个代表打开的Workbook对象。
   注意:打开的工作簿成为当前的活动工作簿。
   Sub Samp2()
    Workbooks.Open Filename:="c:\1.xlsm"
    '打开c:\1.xlsm文件
    '注意,当重复打开一个已经打开的EXCEL文件时,会有
   End Sub

  四、如何通过代码检测当前Excel中打开的工作簿数量
   Workbooks.count 它代表集合中对象的数量。
   Sub Samp3()
    MsgBox Workbooks.Count
    '通过消息框显示当前EXCEL应用程序中打开的工作簿数量
   End Sub

  其他属性和方法,更多的请参考VBA帮助,另外,多多敲代码,用得多了,自然就熟练了。
  OpenDatabase 返回一个 Workbook 对象,该对象代表一个数据库。
  OpenText 载入一个文本文件,并将其作为包含单个工作表的新工作簿进行分列处理,然后在此工作表中放入经过分列处理的文本文件数据。
  OpenXML 打开一个 XML 数据文件。返回一个Workbook 对象。

示例 自定义函数
  Sub Test()
     Dim strWorkbookname As String
     strWorkbookname = "工作簿12"
     MsgBox "工作簿 " & strWorkbookname & " 是否打开:"& WorkbookIsOpen1(strWorkbookname)
     MsgBox WorkbookIsOpen1("")
     MsgBox WorkbookIsOpen2("")
  End Sub

 Function WorkbookIsOpen1(strWorkbookname AsString) As Boolean
  '检测是否有打开的指定的工作簿文件
  '没有针对完整路径检测,不完美
  '大家可以自己再完善下。
  '方法一
  Dim wb As Workbook
  Dim str As String
  str = LCase(strWorkbookname)
  '定义一个字符串变量,把传递的参数中的大写字母转换成小写字母并赋值给str
  
  For Each wb In Workbooks
        If wb.Name = strWorkbookname Then
            WorkbookIsOpen1 = True
            Exit Function
        End If
    Next
 End Function

 Function WorkbookIsOpen2(strWorkbookname AsString) As Boolean
  '检测是否有打开的指定的工作簿文件
  '没有针对完整路径检测,不完美
  '大家可以自己再完善下。
  '方法二:利用错误处理
  On Error Resume Next
  If Len(Workbooks(strWorkbookname).Name) = 0 Then
        WorkbookIsOpen2 = False
   '上面这句设置函数返回值可以省略
   'Boolean类型的变量缺省值为False
  Else
        WorkbookIsOpen2 = True
  End If
 End Function

评分

参与人数 2 +18 收起 理由
bai7190 + 3 很给力!
云影 + 15 很给力!

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-12-2 22:08 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2013-12-2 22:47 | 显示全部楼层
OYXM727 发表于 2013-12-2 22:08
我是新手有点难理解

啥疑惑,说出来,看看我会不。
回复

使用道具 举报

发表于 2013-12-15 08:54 | 显示全部楼层
学习了,老师辛苦了
回复

使用道具 举报

发表于 2013-12-30 09:50 | 显示全部楼层
{:1112:}
回复

使用道具 举报

发表于 2014-6-16 14:32 | 显示全部楼层
{:35:}
回复

使用道具 举报

发表于 2014-6-17 14:31 | 显示全部楼层
楼主,如果通过将一个打开的Excel另存为一个新的Excel并进行命名,命名的规则是当天的日期,代码应该怎么编写呢?
回复

使用道具 举报

发表于 2014-6-17 17:18 | 显示全部楼层
回复

使用道具 举报

发表于 2014-6-17 22:00 | 显示全部楼层
本帖最后由 ANDY0393 于 2014-6-19 21:21 编辑

Application.SheetsInNewWorkbook = 5
   'Excel 自动插入到新工作簿中的工作表数目
谢谢分享,标记,三十三

回复

使用道具 举报

发表于 2014-6-17 22:14 | 显示全部楼层
请教自定义函数中这段代码,空字符串意义是什么,没看懂
   MsgBox WorkbookIsOpen1("")
     MsgBox WorkbookIsOpen2("")
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 11:34 , Processed in 0.887328 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表