Workbook对象与示例(1)

    技术2022-05-11  38

    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 将上面的代码加入上述两个子程序最后即可。 

    最新回复(0)