Workbook对象与示例(3)

HasPassword属性(只读/布尔值)
如果工作簿有密码保护,则该只读属性值为True。注意,密码能作为SaveAs方法中的一个参数被指定。
PrecisionAsDisplayed属性(可读写/布尔值)
当该属性的值为True时,在工作簿进行计算时,将仅使用工作表中所显示的数值进行计算,而不是它实际所存诸的值。该属性的缺省值为False,工作表计算基于它们所存储的数值。
PrintOut方法
PrintOut方法打印完整的工作簿。(该方法也应用于一些其它的对象,诸如Range、Worksheet、Chart)其语法为:
    工作簿对象.PrintOut( From,To,Copies,Preview,ActivePrinter,PrintToFile,Collate)
注意,该方法的所有参数均是可选的。
参数 From指定需要打印第一页的页码,参数 To指定要打印的最后一页。如果忽略这些参数,将打印整个对象(如范围、工作表等)。
参数 Copies指定要打印副本的数量,缺省值为1。
将参数 Preview设置为True,将弹出打印预览而不是立即打印,缺省值为False。
参数 ActivePrinter设置活动打印机的名字。另一方面,设置参数 PrintToFile的值为True将导致Excel打印到一个文件,Excel将提示用户该输出文件的名字。(不巧的是,没有办法用代码指定所要输出文件的名字)。
应该设置参数 Collate的值为True,以逐份打印每份副本。
PrintPreview方法
该方法产生Excel的打印预览功能,其语法是:
工作簿对象.PrintPreview
注意,PrintPreview方法应用到与PrintOut方法相同的一组对象。
Protect方法
该方法保护工作簿,以便它不能被修改。其语法为:
工作簿对象.Protect( Password,Structure,Windows)
该方法也应用于图表或者工作表,但语法略有不同。
可选参数 Password指定一个密码(对大小写敏感),如果忽略该参数,工作簿没有被保护,不需要密码。
设置可选参数 Structure的值为True,以保护工作簿的结构——也就是说,在工作簿中工作表的相关位置,缺省值为False。
设置可选参数 Windows的值为True,以保护工作簿窗口,缺省值为False。
ReadOnly属性(只读/布尔值)
如果工作簿作为只读被打开,则该属性的值为True。
RefreshAll方法
该方法更新工作簿中所有外部数据区域和数据透视表,其语法为:
工作簿对象.RefreshAll
Save方法
该方法保存工作簿中的任何变化。其语法为:
工作簿对象.Save
SaveAs方法
该方法在指定的文件中保存工作簿所发生的变化。其语法为:
Expression.SaveAs( Filename,FileFormat,Password,WriteResPassword, _
ReadOnlyRecommended,CreateBackup,AccessMode,ConflictResolution, _
AddToMru,TextCodePage,TextVisualLayout
)
参数 Filename指定使用保存到磁盘中的文件名,如果没有包括路径,Excel将使用当前文件夹。
参数 FileFormat指定所使用保存文件时的文件格式,其值为我们在前面的FileFormat属性中所介绍过的XlFileFormat常量之一。
参数 Password在保存文件时用来指定密码,能使用的任何字符,区分大小写但不得超过15个字符。
参数 WriteResPassword是一个字符串,指定文件的写保护密码。如果一个文件带有写保护密码保存,当下一次没有提供密码打开该文件时,该文件将以只读方式打开。
我们可以设置参数 ReadOnlyRecommended的值为True,当文件打开时显示一个消息。建议文件以只读方式找开。
设置参数 CreateBackup的值为真,以创建一个备份文件。
参数 AccessModeConflictResolution指定共享问题,您能在ExcelVBA帮助系统中找到详细的介绍。
设置参数 AddToMru的值为True,以添加工作簿到最近使用的文件列表中,缺省值为False。
其它参数不会在英文版的Excel中使用。
SaveCopyAs方法
该方法保存工作簿的一份副本,但不会修改已打开的工作簿。其语法为:
工作簿对象.SaveCopyAs( Filename)
参数 Filename指定原文件副本的文本名。
Saved属性(可读写/布尔值)
如果工作簿自上次保存以来没有发生任何变化,则该属性值为True。注意,该属性的值是可读写的,这意味着我们能设置该属性的值为True,即使该工作簿在上次保存之后发生过变化。正如前面所介绍过的,我们能设置该属性的值为True,关闭被修改过的工作簿,而不提示保存当前已发生的变化。

Workbook对象的子对象
图5所显示的是Workbook对象的子对象(该图为图4的重复)。
 
图5  Workbook对象的子对象
让我们快速地介绍一下这些子对象中的一部分。(我们将在本书稍后部分介绍Window对象、Worksheet对象和WorkbookEvents对象)
CustomView对象
CustomViews属性返回CustomViews集合,在该集合中的每一个CustomView对象代表工作簿的自定义预览。CustomView对象是相当简单的,因此,我们将只介绍一个示例。如图6所示的工作表。
 
图6  CustomView对象示例
如果我们使用Autofilter命令对年份进行筛选,则结果如图7所示。
 
图7  筛选后的结果
下面的代码将这个自定义的视图命名为View1998:
    ThisWorkbook.CustomViews.Add "View1998"
现在我们可以使用下面的代码在任何时间显示该视图:
    ThisWorkbook.CustomViews!View1998.Show
或者:
    strView = "View1998"
    tiveWorkbook.CustomViews(strView).Show
Names集合
与Application对象一样,Workbook对象有一个Name属性,返回一个Names集合,该集合代表与工作簿相关的Name对象。要详细了解Name对象的信息,请参见第16章Application对象。
Sheets集合
Sheets属性返回一个Sheets集合,包含在工作簿中每个工作表中的Worksheet对象和每个图表工作表中的Chart对象。我们将在本书稍后的章节介绍Worksheet对象和Chart对象。
Styles集合和Style对象
一个Style对象代表单元格区域一组格式选项。每个工作簿有一个Styles集合,包含该工作簿所有Styles对象。
为了对某单元格区域应用样式,我们可以编写下面的代码:
RangeObject.Style=styleName
在这里,StyleName是某样式的名称。
为了创建一个Style对象,可以使用Add方法,其语法为:
工作簿对象.Add( Name,BasedOn)
注意,Add方法返回新创建的Style对象。
参数 Name指定样式的名称。可选参数 BaseOn指定某Range对象,该对象指向所运用样式的单元格作为新样式的基础,如果忽略该参数,新创建的样式以Normal(正常)样式为基础。
注意,根据文档资料,如果样式所指定的名称已存在,则Add方法将基于在参数 BaseOn中所指定的单元格重新定义已存在的样式。(然而,在我的系统中,Excel报出了一个错误信息,因此您应仔细检查。)
Style对象的属性代表了不同的格式特征,诸如字体名称、字体大小、数字格式、对齐,等等。也有几个内置的样式,诸如Normal、Currency和Percent,这些内置的样式能在Style对话框中的Style名称框找到(在格式菜单下)。
下面举一个例子。示例代码将创建一个样式,然后应用它到当前工作表中一个独立的范围中:
‘********************************************************************
Sub test3()
  Dim st As Style
  '如果样式已存在则删除
  For Each st In ActiveWorkbook.Styles
    If st.Name = "Bordered" Then st.Delete
  Next
  '创建样式
  With ActiveWorkbook.Styles.Add(Name:="Bordered")
    .Borders(xlTop).LineStyle = xlDouble
    .Borders(xlBottom).LineStyle = xlDouble
    .Borders(xlLeft).LineStyle = xlDouble
    .Borders(xlRight).LineStyle = xlDouble
    .Font.Bold = True
    .Font.Name = "Arial"
    .Font.Size = 36
  End With
  '应用样式
  Application.ActiveSheet.Range("A1:B3").Style = "Bordered"
End Sub
‘********************************************************************

示例:对工作簿中的工作表排序
让我们添加一个新的功能到我们的SRXUtils应用程序中。如果您要处理带有多个工作表(工作表和图表工作表)的工作簿,则您可能想按字母顺序排列工作表。
对工作表进行排序的基本代码是Move方法,其语法是:
    SheetsObject.Move( Before,After)
当然,为了有效地使用该方法,我们需要工作表名称的排序列表。
第一步是通过对新的功能添加一个新行来增加DataSheet工作表,如图8所示。(在DataSheet工作表中行的顺序是基于我们想显现在自定义菜单中的项目的顺序。)
 
图8  增加的DataSheet工作表
下一步,我们插入一个名为basSortSheets的代码模块,它将包含实现这个功能的代码。
在basSortSheets模块中包括两个过程。第一个过程验证用户是否真的想排序工作表,如果想排序工作表的话,调用第二个过程去完成该项工作。第一个过程见示例1,将在图8中显示对话框。
示例1:SortSheets过程
‘********************************************************************
Sub SortSheets()
  If MsgBox("Sort the sheets in this workbook?", _
    vbOKCancel + vbQuestion, "Sort Sheets") = vbOK Then
      SortAllsheets
  End If
End Sub
‘********************************************************************
产生动作的过程见示例2。该过程首先在数组中收集工作表的名称,接着在新的工作表中放置该数组,然后使用Sort方法(应用于Range对象,将在第19章中介绍)对这些名称排序。接着,用排序好的数据重新填充数组。最后,使用Move方法重新排列这些工作表。
示例2:SortAllSheets过程
‘********************************************************************
Sub SortAllSheets()
  '排序工作表
  Dim wb As Workbook
  Dim ws As Worksheet
  Dim rng As Range, i As Integer
  Dim cSheets As Integer
  Dim sSheets() As String
 
  Set wb = ActiveWorkbook
 
  '获取数组实际大小
  cSheets = wb.Sheets.Count
  ReDim sSheets(1 To cSheets)
 
  '用工作表名填充数组
  For i = 1 To cSheets
    sSheets(i) = wb.Sheets(i).Name
  Next
 
  '创建新的工作表并在其第一列放置名称
  Set ws = wb.Worksheets.Add
  For i = 1 To cSheets
    ws.Cells(i, 1).Value = sSheets(i)
  Next
 
  '对列排序
  ws.Columns(1).Sort Key1:=ws.Columns(1), Order1:=xlAscending
 
  '重新填充数组
  For i = 1 To cSheets
    sSheets(i) = ws.Cells(i, 1).Value
  Next
 
  '删除临时工作表
  Application.DisplayAlerts = False
  ws.Delete
  Application.DisplayAlerts = True
 
  '通过移动每个工作表到最后来重新排列工作表
  For i = 1 To cSheets
    wb.Sheets(sSheets(i)).Move after:=wb.Sheets(cSheets)
  Next
 
 End Sub
‘********************************************************************
一旦代码插入完成后,您能保存SRXUtils.xls工作簿作为一个加载宏。不要忘记了首先要卸载该加载宏,否则Excel将会报错。
 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值