Workbook对象与示例(1)

Workbooks集合
Application对象有一个Workbooks属性,可以返回一个Workbooks集合,该集合包含所有当前已打开的Excel中的Workbook对象。例如,下面的代码将显示所打开的工作簿的数量:
‘********************************************************************
Sub testWorkbookCount()
  Dim wbs As Workbooks
  Set wbs=Application.Workbooks
  MsgBox wbs.Count
End Sub
‘********************************************************************
下面让我们来看看Workbooks对象的一些属性和方法。
Add方法
Add方法创建一个新的工作簿,并添加到Workbooks集合中,新工作簿成为活动工作簿。其语法为:
工作簿对象.Add(Template)
在这里,可选参数 Template决定如何创建新工作簿。如果该参数为一个指定已存在的Excel模板文件名称的字符串,那么新工作簿将以该文件作为模板创建。
正如您所知道的,一个模板是一个包含目录(例如行和列标签)、格式、宏和其它定制的内容(例如菜单和工具条)的Excel工作簿。当您以一个模板为基础创建一个新工作簿时,该工作簿将从模板中接受目录、格式和定制的内容。
Template参数也可以是下面的常量之一:
Enum xlWBATemplate
      xlWBATWorksheet=-4167
      xlWBATChart=-4109
      xlWBATExcel4MacroSheet=3
      xlWBATExcel4IntlMacroSheet=4
End Enum
在这种情况下,新工作簿将包含有指定类型的单个工作表。如果省略 Template参数,那么Excel将创建一个新工作簿,该工作簿带有由Application对象的SheetsInNewWorkbook属性所设置数量的空白工作表。
Close方法
Close方法关闭所有打开的工作簿。其语法为:
    工作簿对象.Close
Count属性
大多数集合对象都有一个Count属性,Workbooks集合也不例外。该属性将返回当前已打开的工作簿的数量。
Item属性
Item属性返回Workbooks集合中特定的工作簿。例如:
    Workbooks.Item(1)
返回Workbooks集合中的第一个工作簿。由于Item属性是缺省属性,因此我们也能简写为:
    Workbooks(1)
注意,我们不能依赖特定的工作簿在集合中的索引号来指定工作簿(对所有的集合对象也如此),您最好使用工作簿的名字指明特定的工作簿,如下所示:
Workbooks(“Book1.xls”)
注意,如果用户使用“文件”菜单中“新建”命令创建了一个名为Book2的新工作簿,我们应使用下面的代码指定该工作簿:
Workbooks(“Book2”)
但是,如果您在保存刚新建的工作簿Book2到您的硬盘中之前运行下面的代码:
Workbooks(“Book2.xls”)
将会产生一个错误(下标越界)。
Open方法
该方法打开一个已存在的工作簿,其语法稍微有点复杂:
工作簿对象.Open(FileNaem,UpdateLinks,ReadOnly,Format,Password, _
WriteResPassWord,IgnoreReadOnlyRecommended,Origin,Delimiter, _
Editable,Notify,Converter,AddToMRU)
在这些参数中,大多数参数很少用到(例如,几个与打开文本文件有关的参数)。下面我们讨论一些常用的参数,并且在VBA帮助系统中有更多关于这些参数的信息。注意,所有的参数中,除了 FileName外都是可选的。
参数 FileName是所要打开的工作簿的文件名称。如果想要以只读的方式打开工作簿,则可将 ReadOnly参数设置为True。
如果需要用密码来打开工作簿,则 PassWord参数应该设置为该密码。如果需要使用密码而您没有指定密码,Excel将弹出对话框询问密码。
参数 AddToMru指定将工作簿添加到最近使用的文件列表中,建议您将该参数值设置为True以添加该工作簿到最近使用的文件列表中,该参数的缺省值为False。
OpenText方法
这个方法将在一个新工作簿中装入文本文件。该方法分析文本数据并将其放入一个单独的工作表中。其语法稍微有点复杂:
工作簿对象.OpenText(Filename,Origin,StartRow,DataType,TextQualifier, _
ConsecutiveDelimiter,Tab,Semicolon,Comma,Space,Other,OtherChar,FieldInfo)
首先要注意的是,除了参数 FileName外,该方法的所有参数都是可选的。
参数 Filename指定要打开的文本文件的文件名。
参数 Origin指定文本文件的来源,可以是下面的XlPlatform常量之一:
Enum XlPlatform
      xlMacintosh=1
      xlWindows=2
      xlMSDOS=3
End Enum
注意,xlWindows的值指定一个ANSI文本文件,而xlMSDOS常量指定一个ASCⅡ文件。如果省略该参数,则需要使用文本导入向导中的文件源选项的当前设置。
参数 StartRow指定从文本文件中开始进行分析的文本的行号,缺省值是1。
可选参数 DataType指定在字段中的文本格式,可以是下面的XlTextParsingType常量之一:
Enum XlTextParsingType
      xlDelimited=1 ‘缺省值
      xlFixedWidth=2
    End Enum
参数 TextQualifier是文本限定符,要以是下面的XlTextQualifier常量之一:
Enum XlTextQualifier
      xlTextQualifierNone=-4142
      xlTextQualifierDoubleQuote=1 ‘缺省值
      xlTextQualifierSingleQuote=2
End Enum
参数 ConsecutiveDelimiter应该设置为True,以考虑用连续分隔符作为一个分隔符。缺省的值为False。
有几个参数需要将参数 DataType设置为xlDelimited。当这些参数中的任何一个设置为True时,表示Excel应该使用与文本分隔符相应的字符,这些分隔符描述如下:(所有参数缺省值均为False)
Tab 该参数设置为真时,将使用制表符作为分隔符
Semicolon 该参数设置为真时,将使用分号作为分隔符
Comma 该参数设置为真时,将使用逗号作为分隔符
Space 该参数设置为真时,将使用空格作为分隔符
Other 该参数设置为真时,将使用被参数 OtherChar指定的字符作为分隔符
当参数 Other设置为真时,通过 OtherChar指定分隔符。如果参数 OtherChar包含多于一个字符时,仅仅使用第一个字符。
参数 FieldInfo是一个包含单一来源列信息的数组,该参数的解释依赖于参数 DataType的值。
当参数 DataType的值为xlDelimited时,参数 FieldInfo应该是一个数组,该数组的大小应该与被转换数据的列的数量相同或更小。一个二维数组的第一维是列数(起始数为1),第二维是下面的数值之一,用来指明如何分析列:
数值     描述
1          通常的
2          文本
3          MDY 日期格式
4          DMY 日期格式
5          YMD 日期格式
6          MYD 日期格式
7          DYM 日期格式
8          YDM 日期格式
9          跳过列
如果提供给二维数组的列找不到了,那么该列将被分析为通常的设置。例如,下面参数 FieldInfo的值导致第一列为文本,而第三列被跳过:
Array(Array(1,2),Array(3,9))
所有其它的列被视为通常的数据。
下面以一个实例证明,考虑有下面内容的文本文件:(将其存放在D盘的excel文件夹中,并命名为temp.txt)
    "John","Smith","Serial Record",1/2/98
"Fred","Gwynn","Serial Order Dept",2/2/98
"Mary","Davis","English Dept",3/5/98
"David","Johns","Chemistry Dept",4/4/98
下面的代码:
Sub test()
  Workbooks.OpenText Filename:="D:/excel/temp.txt", _
  Origin:=xlMSDOS, _
  StartRow:=1, _
  DataType:=xlDelimited, _
  TextQualifier:=xlTextQualifierDoubleQuote, _
  ConsecutiveDelimiter:=True, _
  Comma:=True, _
  FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 6))
End Sub
运行上面的代码后,将生成如下图2所示的工作表。注意,D列中的单元格作为日期格式化。
 
图2 一个逗号分隔符文本文件在Excel中打开示例
另一方面,如果参数 DataType的值是xlFixedWidth,则每个二维数组的第一个元素指定字符在列中开始的位置(0是第一个字符),第二个元素指定分析选项(1-9)在列中的结果,各项数值所代表的结果描述如上。
为了证实上述描述,考虑有下面内容的文本文件:(将其存放在D盘的excel文件夹中,并命名为temp.txt)
0-125-689
2-523-489
3-424-664
4-125-160
下面的代码:
Sub test()
  Workbooks.OpenText Filename:="D:/excel/temp.txt", _
  Origin:=xlMSDOS, _
  StartRow:=1, _
  DataType:=xlFixedWidth, _
  FieldInfo:=Array(Array(0, 2), Array(1, 9), Array(2, 2), Array(5, 9), Array(6, 2))
End Sub
运行上面的代码后,将生成如下图3所示的工作表。(注意,如何使用数组跳过这些连字符)

图3 一个固定宽度文本文件在Excel中被打开示例
最后,观察在Excel中打开的文本文件,并没有转换为Excel工作簿文件。为了保存为Excel工作簿文件,我们能使用SaveAs方法,如下所示:
Application.ActiveWorkbook.SaveAs _
 Filename:="D:/excel/temp.xls", FileFormat:=xlWorkbookNormal

将上面的代码加入上述两个子程序最后即可。 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值