Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access数据库-模块/函数/VBA

ExcelVBA编程入门范例[第三章 工作簿(Workbook)基本操作应用示例]

时 间:2012-01-05 14:17:17
作 者:风行   ID:16058  城市:江阴
摘 要:ExcelVBA>>ExcelVBA编程入门范例>>第三章Workbook对象(fanjy)
http://fanjy.- 1 - blog.excelhome.net
第三章 工作簿(Workbook)基本操作应用示例

正 文:

Workbook 对象代表工作簿,而Workbooks 集合则包含了当前所有的工作簿。下面对
Workbook 对象的重要的方法和属性以及其它一些可能涉及到的方法和属性进行示例介绍,
同时,后面的示例也深入介绍了一些工作簿对象操作的方法和技巧。
示例 03-01:创建工作簿(Add方法)
[示例03-01-01]
Sub CreateNewWorkbook1()
MsgBox "将创建一个新工作簿."
Workbooks.Add
End Sub
[示例03-01-02]
Sub CreateNewWorkbook2()
Dim wb As Workbook
Dim ws As Worksheet
Dim i As Long
MsgBox "将创建一个新工作簿,并预设工作表格式."
Set wb = Workbooks.Add
Set ws = wb.Sheets(1)
ws.Name = "产品汇总表"
ws.Cells(1, 1) = "序号"
ws.Cells(1, 2) = "产品名称"
ws.Cells(1, 3) = "产品数量"
For i = 2 To 10
ws.Cells(i, 1) = i - 1
Next i
End Sub
示例03-02:添加并保存新工作簿
Sub AddSaveAsNewWorkbook()
Dim Wk AsWorkbook
SetWk =Workbooks.Add
Application.DisplayAlerts = False
Wk.SaveAs Filename:="D:/SalesData.xls"
End Sub
示例说明:本示例使用了Add 方法和SaveAs 方法,添加一个新工作簿并将该工作簿以文
件名SalesData.xls保存在D 盘中。其中,语句Application.DisplayAlerts = False表示禁止
弹出警告对话框。
ExcelVBA>>ExcelVBA编程入门范例>>第三章Workbook对象(fanjy)
http://fanjy.- 2 - blog.excelhome.net
示例03-03:打开工作簿(Open方法)
[示例03-03-01]
Sub openWorkbook1()
Workbooks.Open "<需打开文件的路径>\<文件名>"
End Sub
示例说明:代码中的<>里的内容需用所需打开的文件的路径及文件名代替。Open方法共有
15个参数,其中参数FileName为必需的参数,其余参数可选。
[示例03-03-02]
Sub openWorkbook2()
Dim fname As String
MsgBox "将D盘中的<测试.xls>工作簿以只读方式打开"
fname = "D:\测试.xls"
Workbooks.Open Filename:=fname, ReadOnly:=True
End Sub
示例03-04:将文本文件导入工作簿中(OpenText方法)
Sub TextToWorkbook()
'本示例打开某文本文件并将制表符作为分隔符对此文件进行分列处理转换成为工作表
Workbooks.OpenText Filename:="<文本文件所在的路径>/<文本文件名>", _
DataType:=xlDelimited, Tab:=True
End Sub
示例说明:代码中的<>里的内容需用所载入的文本文件所在路径及文件名代替。OpenText
方法的作用是导入一个文本文件,并将其作为包含单个工作表的工作簿进行分列处理,然后
在此工作表中放入经过分列处理的文本文件数据。该方法共有18 个参数,其中参数
FileName为必需的参数,其余参数可选。
示例 03-05:保存工作簿(Save方法)
[示例03-05-01]
Sub SaveWorkbook()
MsgBox "保存当前工作簿."
ActiveWorkbook.Save
End Sub
[示例03-05-02]
Sub SaveAllWorkbook1()
Dim wb As Workbook
MsgBox "保存所有打开的工作簿后退出Excel."
For Each wb In Application.Workbooks
wb.Save
Next wb
Application.Quit
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ExcelVBA>>ExcelVBA编程入门范例>>第三章Workbook对象(fanjy)
http://fanjy.- 3 - blog.excelhome.net
End Sub
[示例03-05-03]
Sub SaveAllWorkbook2()
Dim wb As Workbook
For Each wb InWorkbooks
If wb.Path <> "" Then wb.Save
Next wb
End Sub
示例说明:本示例保存原来已存在且已打开的工作簿。
示例 03-06:保存工作簿(SaveAs 方法)
[示例03-06-01]
Sub SaveWorkbook1()
MsgBox "将工作簿以指定名保存在默认文件夹中."
ActiveWorkbook.SaveAs "<工作簿名>.xls"
End Sub
示例说明:SaveAs 方法相当于“另存为……”命令,以指定名称保存工作簿。该方法有12
个参数,均为可选参数。如果未指定保存的路径,那么将在默认文件夹中保存该工作簿。如
果文件夹中该工作簿名已存在,则提示是否替换原工作簿。
[示例03-06-02]
Sub SaveWorkbook2()
Dim oldName As String, newName As String
Dim folderName As String, fname As String
oldName = ActiveWorkbook.Name
newName = "new" & oldName
MsgBox "将<" & oldName & ">以<" & newName & ">的名称保存"
folderName = Application.DefaultFilePath
fname = folderName & "\" & newName
ActiveWorkbook.SaveAs fname
End Sub
示例说明:本示例将当前工作簿以一个新名(即new 加原名)保存在默认文件夹中。
[示例03-06-03]
Sub CreateBak1()
MsgBox "保存工作簿并建立备份工作簿"
ActiveWorkbook.SaveAs CreateBackup:=True
End Sub
示例说明:本示例将在当前文件夹中建立工作簿的备份。
[示例03-06-04]
ExcelVBA>>ExcelVBA编程入门范例>>第三章Workbook对象(fanjy)
http://fanjy.- 4 - blog.excelhome.net
Sub CreateBak2()
MsgBox "保存工作簿时,若已建立了备份,则将出现包含True的信息框,否则出现False."
MsgBox ActiveWorkbook.CreateBackup
End Sub
示例03-07:取得当前打开的工作簿数(Count 属性)
Sub WorkbookNum()
MsgBox "当前已打开的工作簿数为:" & Chr(10) & Workbooks.Count
End Sub
示例03-08:激活工作簿(Activate方法)
[示例03-08-01]
Sub ActivateWorkbook1()
Workbooks("<工作簿名>").Activate
End Sub
示例说明:Activate方法激活一个工作簿,使该工作簿为当前工作簿。
[示例03-08-02]
Sub ActivateWorkbook2()
Dim n As Long, i As Long
Dim b As String
MsgBox "依次激活已经打开的工作簿"
n = Workbooks.Count
For i = 1 To n
Workbooks(i).Activate
b = MsgBox("第" & i & "个工作簿被激活,还要继续吗?", vbYesNo)
If b = vbNo Then Exit Sub
If i = n Then MsgBox "最后一个工作簿已被激活."
Next i
End Sub
示例03-09:保护工作簿(Protect 方法)
Sub ProtectWorkbook()
MsgBox "保护工作簿结构,密码为123"
ActiveWorkbook.Protect Password:="123", Structure:=True
MsgBox "保护工作簿窗口,密码为123"
ActiveWorkbook.Protect Password:="123", Windows:=True
MsgBox "保护工作簿结构和窗口,密码为123"
ActiveWorkbook.Protect Password:="123", Structure:=True, Windows:=True
End Sub
示例说明:使用Protect方法来保护工作簿,带有三个可选参数,参数Password指明保护
工作簿密码,要解除工作簿保护应输入此密码;参数Structure设置为True则保护工作簿结
ExcelVBA>>ExcelVBA编程入门范例>>第三章Workbook对象(fanjy)
http://fanjy.- 5 - blog.excelhome.net
构,此时不能对工作簿中的工作表进行插入、复制、删除等操作;参数Windows设置为True
则保护工作簿窗口,此时该工作簿右上角的最小化、最大化和关闭按钮消失。
示例 03-10:解除工作簿保护(UnProtect 方法)
Sub UnprotectWorkbook()
MsgBox "取消工作簿保护"
ActiveWorkbook.Unprotect "123"
End Sub
示例03-11:工作簿的一些通用属性示例
Sub testGeneralWorkbookInfo()
MsgBox "本工作簿的名称为" & ActiveWorkbook.Name
MsgBox "本工作簿带完整路径的名称为" & ActiveWorkbook.FullName
MsgBox "本工作簿对象的代码名为" & ActiveWorkbook.CodeName
MsgBox "本工作簿的路径为" & ActiveWorkbook.Path
If ActiveWorkbook.ReadOnly Then
MsgBox "本工作簿已经是以只读方式打开"
Else
MsgBox "本工作簿可读写."
End If
If ActiveWorkbook.Saved Then
MsgBox "本工作簿已保存."
Else
MsgBox "本工作簿需要保存."
End If
End Sub
示例03-12:访问工作簿的内置属性(BuiltinDocumentProperties属性)
[示例03-12-01]
Sub ShowWorkbookProperties()
Dim SaveTime As String
On Error Resume Next
SaveTime = ActiveWorkbook.BuiltinDocumentProperties("Last Save Time").Value
If SaveTime = "" Then
MsgBox ActiveWorkbook.Name & "工作簿未保存."
Else
MsgBox "本工作簿已于" & SaveTime & "保存", , ActiveWorkbook.Name
End If
End Sub
示例说明:在Excel 中选择菜单“文件——属性”命令时将会显示一个“属性”对话框,该
对话框中包含了当前工作簿的有关信息,可以在VBA中使用BuiltinDocumentProperties 属
性访问工作簿的属性。上述示例代码将显示当前工作簿保存时的日期和时间。
ExcelVBA>>ExcelVBA编程入门范例>>第三章Workbook对象(fanjy)
http://fanjy.- 6 - blog.excelhome.net
[示例03-12-02]
Sub listWorkbookProperties()
On Error Resume Next
'在名为"工作簿属性"的工作表中添加信息,若该工作表不存在,则新建一个工作表
Worksheets("工作簿属性").Activate
If Err.Number <> 0 Then
Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "工作簿属性"
Else
ActiveSheet.Clear
End If
On Error GoTo 0
ListProperties
End Sub
‘- - - - - - - - - - - - - - - - - - - - - - -
Sub ListProperties()
Dim i As Long
Cells(1, 1) = "名称"
Cells(1, 2) = "类型"
Cells(1, 3) = "值"
Range("A1:C1").Font.Bold = True
With ActiveWorkbook
For i = 1 To .BuiltinDocumentProperties.Count
With .BuiltinDocumentProperties(i)
Cells(i + 1, 1) = .Name
Select Case .Type
Case msoPropertyTypeBoolean
Cells(i + 1, 2) = "Boolean"
Case msoPropertyTypeDate
Cells(i + 1, 2) = "Date"
Case msoPropertyTypeFloat
Cells(i + 1, 2) = "Float"
Case msoPropertyTypeNumber
Cells(i + 1, 2) = "Number"
Case msoPropertyTypeString
Cells(i + 1, 2) = "string"
End Select
On Error Resume Next
Cells(i + 1, 3) = .Value
On Error GoTo 0
EndWith
Next i
EndWith
Range("A:C").Columns.AutoFit
ExcelVBA>>ExcelVBA编程入门范例>>第三章Workbook对象(fanjy)
http://fanjy.- 7 - blog.excelhome.net
End Sub
示例说明:本示例代码在“工作簿属性”工作表中列出了当前工作簿中的所有内置属性。
示例 03-13:测试工作簿中是否包含指定工作表(Sheets属性)
Sub testSheetExists()
MsgBox "测试工作簿中是否存在指定名称的工作表"
Dim b As Boolean
b = SheetExists("<指定的工作表名>")
If b = True Then
MsgBox "该工作表存在于工作簿中."
Else
MsgBox "工作簿中没有这个工作表."
End If
End Sub
‘- - - - - - - - - - - - - - - - - - - - - - -
Private Function SheetExists(sname) As Boolean
Dim x As Object
On Error Resume Next
Set x = ActiveWorkbook.Sheets(sname)
If Err = 0 Then
SheetExists = True
Else
SheetExists = False
End If
End Function
示例03-14:对未打开的工作簿进行重命名(Name 方法)
Sub rename()
Name "<工作簿路径>\<旧名称>.xls" As "<工作簿路径>\<新名称>.xls"
End Sub
示例说明:代码中<>中的内容为需要重命名的工作簿所在路径及新旧名称。该方法只是对
未打开的文件进行重命名,如果该文件已经打开,使用该方法会提示错误。
示例 03-15:设置数字精度(PrecisionAsDisplayed 属性)
Sub SetPrecision()
Dim pValue
MsgBox "在当前单元格中输入1/3,并将结果算至小数点后两位"
ActiveCell.Value = 1 / 3
ActiveCell.NumberFormatLocal = "0.00"
pValue = ActiveCell.Value * 3
MsgBox "当前单元格中的数字乘以3等于:" & pValue
MsgBox "然后,将数值分类设置为[数值],即单元格中显示的精度"
ExcelVBA>>ExcelVBA编程入门范例>>第三章Workbook对象(fanjy)
http://fanjy.- 8 - blog.excelhome.net
ActiveWorkbook.PrecisionAsDisplayed = True
pValue = ActiveCell.Value * 3
MsgBox "此时,当前单元格中的数字乘以3等于:" & pValue & "而不是1"
ActiveWorkbook.PrecisionAsDisplayed = False
End Sub
示例说明:PrecisionAsDisplayed 属性的值设置为True,则表明采用单元格中所显示的数
值进行计算。
示例 03-16:删除自定义数字格式(DeleteNumberFormat方法)
Sub DeleteNumberFormat()
MsgBox "从当前工作簿中删除000-00-0000的数字格式"
ActiveWorkbook.DeleteNumberFormat ("000-00-0000")
End Sub
示例说明:DeleteNumberFormat方法将从指定的工作簿中删除自定义的数字格式。
示例 03-17:控制工作簿中图形显示(DisplatyDrawingObjects属性)
Sub testDraw()
MsgBox "隐藏当前工作簿中的所有图形"
ActiveWorkbook.DisplayDrawingObjects = xlHide
MsgBox "仅显示当前工作簿中所有图形的占位符"
ActiveWorkbook.DisplayDrawingObjects = xlPlaceholders
MsgBox "显示当前工作簿中的所有图形"
ActiveWorkbook.DisplayDrawingObjects = xlDisplayShapes
End Sub
示例说明:本属性作用的对象包括图表和形状。在应用本示例前,应保证工作簿中有图表或
形状,以察看效果。
示例 03-18:指定名称(Names属性)
Sub testNames()
MsgBox "将当前工作簿中工作表Sheet1内单元格A1命名为myName."
ActiveWorkbook.Names.Add Name:="myName", RefersToR1C1:="=Sheet1!R1C1"
End Sub
示例说明:对于Workbook 对象而言,Names 属性返回的集合代表工作簿中的所有名称。
示例 03-19:检查工作簿的自动恢复功能(EnableAutoRecover 属性)
Sub UseAutoRecover()
'检查是否工作簿自动恢复功能开启,如果没有则开启该功能
If ActiveWorkbook.EnableAutoRecover = False Then
ActiveWorkbook.EnableAutoRecover = True
MsgBox "刚开启自动恢复功能."
Else
MsgBox "自动恢复功能已开启."
ExcelVBA>>ExcelVBA编程入门范例>>第三章Workbook对象(fanjy)
http://fanjy.- 9 - blog.excelhome.net
End If
End Sub
示例03-20:设置工作簿密码(Password属性)
Sub UsePassword()
Dim wb As Workbook
Set wb = Application.ActiveWorkbook
wb.Password = InputBox("请输入密码:")
wb.Close
End Sub
示例说明:Password属性返回或设置工作簿密码,在打开工作簿时必须输入密码。本示例
代码运行后,提示设置密码,然后关闭工作簿;再次打开工作簿时,要求输入密码。
示例 03-21:返回工作簿用户状态信息(UserStatus 属性)
Sub UsePassword()
Dim Users As Variant
Dim Row As Long
Users = ActiveWorkbook.UserStatus
Row = 1
With Workbooks.Add.Sheets(1)
.Cells(Row, 1) = "用户名"
.Cells(Row, 2) = "日期和时间"
.Cells(Row, 3) = "使用方式"
For Row = 1 To UBound(Users, 1)
.Cells(Row + 1, 1) = Users(Row, 1)
.Cells(Row + 1, 2) = Users(Row, 2)
Select Case Users(Row, 3)
Case 1
.Cells(Row + 1, 3).Value = "个人工作簿"
Case 2
.Cells(Row + 1, 3).Value = "共享工作簿"
End Select
Next
EndWith
Range("A:C").Columns.AutoFit
End Sub
示例说明:示例代码运行后,将创建一个新工作簿并带有用户使用当前工作簿的信息,即用
户名、打开的日期和时间及工作簿使用方式。
示例 03-22:检查工作簿是否有密码保护(HasPassword属性)
Sub IsPassword()
If ActiveWorkbook.HasPassword = True Then
MsgBox "本工作簿有密码保护,请在管理员处获取密码."
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ExcelVBA>>ExcelVBA编程入门范例>>第三章Workbook对象(fanjy)
http://fanjy.- 10 - blog.excelhome.net
Else
MsgBox "本工作簿无密码保护,您可以自由编辑."
End If
End Sub
示例03-23:决定列表边框是否可见(InactiveListBorderVisible属性)
Sub HideListBorders()
MsgBox "隐藏当前工作簿中所有非活动列表的边框."
ActiveWorkbook.InactiveListBorderVisible = False
End Sub
示例03-24:关闭工作簿
[示例03-24-01]
Sub CloseWorkbook1()
Msgbox “不保存所作的改变而关闭本工作簿”
ActiveWorkbook.Close False
‘或ActiveWorkbook.Close SaveChanges:=False
‘或ActiveWorkbook.Saved=True
End sub
[示例03-24-02]
Sub CloseWorkbook2()
Msgbox “保存所作的改变并关闭本工作簿”
ActiveWorkbook.Close True
End sub
[示例03-24-03]
Sub CloseWorkbook3()
Msgbox “关闭本工作簿。如果工作簿已发生变化,则弹出是否保存更改的对话框。”
ActiveWorkbook.Close True
End sub
[示例03-24-04] 关闭并保存所有工作簿
Sub CloseAllWorkbooks()
Dim Book As Workbook
For Each Book In Workbooks
If Book.Name<>ThisWorkbook.Name Then
Book.Close savechanges:=True
End If
Next Book
ThisWorkbook.Close savechanges:=True
End Sub
[示例03-24-05] 关闭工作簿并将它彻底删除
Sub KillMe()
With ThisWorkbook
.Saved = True
.ChangeFileAccess Mode:=xlReadOnly
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ExcelVBA>>ExcelVBA编程入门范例>>第三章Workbook对象(fanjy)
http://fanjy.- 11 - blog.excelhome.net
Kill .FullName
.Close False
EndWith
End Sub
[示例03-24-06]关闭所有工作簿,若工作簿已改变则弹出是否保存变化的对话框
Sub closeAllWorkbook()
MsgBox "关闭当前所打开的所有工作簿"
Workbooks.Close
End Sub
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
<其它一些有关操作工作簿的示例>
示例03-25:创建新的工作簿
Sub testNewWorkbook()
MsgBox "创建一个带有10个工作表的新工作簿"
Dim wb as Workbook
Set wb = NewWorkbook(10)
End Sub
‘- - - - - - - - - - - - - - - - - - - - - - -
Function NewWorkbook(wsCount As Integer) As Workbook
'创建带有由变量wsCount提定数量工作表的工作簿,工作表数在1至255之间
Dim originalWorksheetCount As Long
Set NewWorkbook = Nothing
If wsCount < 1 or wsCount > 255 Then Exit Function
originalWorksheetCount = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = wsCount
Set NewWorkbook = Workbooks.Add
Application.SheetsInNewWorkbook = originalWorksheetCount
End Function
示例说明:自定义函数NewWorkbook 可以创建最多带有255 个工作表的工作簿。本测试
示例创建一个带有10个工作表的新工作簿。
示例 03-26:判断工作簿是否存在
Sub testFileExists()
MsgBox "如果文件不存在则用信息框说明,否则打开该文件."
If Not FileExists("C:\文件夹\子文件夹\文件.xls") Then
MsgBox "这个工作簿不存在!"
Else
Workbooks.Open "C:\文件夹\子文件夹\文件.xls"
End If
End Sub
‘- - - - - - - - - - - - - - - - - - - - - - -
ExcelVBA>>ExcelVBA编程入门范例>>第三章Workbook对象(fanjy)
http://fanjy.- 12 - blog.excelhome.net
Function FileExists(FullFileName As String) As Boolean
'如果工作簿存在,则返回True
FileExists = Len(Dir(FullFileName)) > 0
End Function
示例说明:本示例使用自定义函数FileExists 判断工作簿是否存在,若该工作簿已存在,则
打开它。代码中,“C:\文件夹\子文件夹\文件.xls”代表工作簿所在的文件夹名、子文件夹名
和工作簿文件名。
示例 03-27:判断工作簿是否已打开
[示例03-27-01]
Sub testWorkbookOpen()
MsgBox "如果工作簿未打开,则打开该工作簿."
If Not WorkbookOpen("工作簿名.xls") Then
Workbooks.Open "工作簿名.xls"
End If
End Sub
‘- - - - - - - - - - - - - - - - - - - - - - -
FunctionWorkbookOpen(WorkBookName As String) As Boolean
'如果该工作簿已打开则返回真
WorkbookOpen = False
On Error GoTo WorkBookNotOpen
If Len(Application.Workbooks(WorkBookName).Name) > 0 Then
WorkbookOpen = True
MsgBox "该工作簿已打开"
Exit Function
End If
WorkBookNotOpen:
End Function
示例说明:本示例中的函数WorkbookOpen 用来判断工作簿是否打开。代码中,“工作簿
名.xls”代表所要打开的工作簿名称。
[示例03-27-02]
Sub testWookbookIFOpen()
Dim wb As String
Dim bwb As Boolean
wb = "<要判断的工作簿名称>"
bwb =WorkbookIsOpen(wb)
If bwb = True Then
MsgBox "工作簿" & wb & "已打开."
Else
MsgBox "工作簿" & wb & "未打开."
End If
End Sub
ExcelVBA>>ExcelVBA编程入门范例>>第三章Workbook对象(fanjy)
http://fanjy.- 13 - blog.excelhome.net
‘- - - - - - - - - - - - - - - - - - - - - - -
Private Function WorkbookIsOpen(wbname) As Boolean
Dim x As Workbook
On Error Resume Next
Set x = Workbooks(wbname)
If Err = 0 Then
WorkbookIsOpen = True
Else
WorkbookIsOpen = False
End If
End Function
示例03-28:备份工作簿
[示例03-28-01] 用与活动工作簿相同的名字但后缀名为.bak备份工作簿
Sub SaveWorkbookBackup()
Dim awb AsWorkbook, BackupFileName As String, i As Integer, OK As Boolean
If TypeName(ActiveWorkbook) = "Nothing" Then Exit Sub
Set awb = ActiveWorkbook
If awb.Path = "" Then
Application.Dialogs(xlDialogSaveAs).Show
Else
BackupFileName = awb.FullName
i = 0
While InStr(i + 1, BackupFileName, ".") > 0
i = InStr(i + 1, BackupFileName, ".")
Wend
If i > 0 Then BackupFileName = Left(BackupFileName, i - 1)
BackupFileName = BackupFileName & ".bak"
OK = False
On Error GoTo NotAbleToSave
With awb
Application.StatusBar = "正在保存工作簿..."
.Save
Application.StatusBar = "正在备份工作簿..."
.SaveCopyAs BackupFileName
OK = True
EndWith
End If
NotAbleToSave:
Set awb = Nothing
Application.StatusBar = False
If Not OK Then
MsgBox "备份工作簿未保存!", vbExclamation, ThisWorkbook.Name
End If
ExcelVBA>>ExcelVBA编程入门范例>>第三章Workbook对象(fanjy)
http://fanjy.- 14 - blog.excelhome.net
End Sub
示例说明:在当前工作簿中运行本示例代码后,将以与工作簿相同的名称但后缀名为.bak
备份工作簿,且该备份与当前工作簿在同一文件夹中。其中,使用了工作簿的FullName属
性和SaveCopyAs方法。
[示例03-28-02] 保存当前工作簿的副本到其它位置备份工作簿
Sub SaveWorkbookBackupToFloppyD()
Dim awb AsWorkbook, BackupFileName As String, i As Integer, OK As Boolean
If TypeName(ActiveWorkbook) = "Nothing" Then Exit Sub
Set awb = ActiveWorkbook
If awb.Path = "" Then
Application.Dialogs(xlDialogSaveAs).Show
Else
BackupFileName = awb.Name
OK = False
On Error GoTo NotAbleToSave
If Dir("D:\" & BackupFileName) <> "" Then
Kill "D:\" & BackupFileName
End If
With awb
Application.StatusBar = "正在保存工作簿..."
.Save
Application.StatusBar = "正在备份工作簿..."
.SaveCopyAs "D:\" & BackupFileName
OK = True
EndWith
End If
NotAbleToSave:
Set awb = Nothing
Application.StatusBar = False
If Not OK Then
MsgBox "备份工作簿未保存!", vbExclamation, ThisWorkbook.Name
End If
End Sub
示例说明:本程序将把当前工作簿进行复制并以与当前工作簿相同的名称保存在D 盘中。
其中,使用了Kill方法来删除已存在的工作簿。
示例 03-29:从已关闭的工作簿中取值
[示例03-29-01]
Sub testGetValuesFromClosedWorkbook()
GetValuesFromAClosedWorkbook "C:", "Book1.xls", "Sheet1", "A1:G20"
End Sub
‘- - - - - - - - - - - - - - - - - - - - - - -
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ExcelVBA>>ExcelVBA编程入门范例>>第三章Workbook对象(fanjy)
http://fanjy.- 15 - blog.excelhome.net
Sub GetValuesFromAClosedWorkbook(fPath As String, _
fName As String, sName, cellRange As String)
With ActiveSheet.Range(cellRange)
.FormulaArray = "='" & fPath & "\[" & fName & "]" _
& sName & "'!" & cellRange
.Value = .Value
EndWith
End Sub
示例说明:本示例包含一个子过程GetValuesFromAClosedWorkbook,用来从已关闭的工
作簿中获取数据,主过程testGetValuesFromClosedWorkbook 用来传递参数。本示例表示
从C盘根目录下的Book1.xls工作簿的工作表Sheet1中的A1:G20单元格区域内获取数据,
并将其复制到当前工作表相应单元格区域中。
[示例03-29-02]
Sub ReadDataFromAllWorkbooksInFolder()
Dim FolderName As String, wbName As String, r As Long, cValue As Variant
Dim wbList() As String, wbCount As Integer, i As Integer
FolderName = "C:\文件夹名"
'创建文件夹中工作簿列表
wbCount = 0
wbName = Dir(FolderName & "\" & "*.xls")
While wbName <> ""
wbCount = wbCount + 1
ReDim Preserve wbList(1 To wbCount)
wbList(wbCount) = wbName
wbName = Dir
Wend
If wbCount = 0 Then Exit Sub
'从每个工作簿中获取数据
r = 0
Workbooks.Add
For i = 1 To wbCount
r = r + 1
cValue = GetInfoFromClosedFile(FolderName, wbList(i), "Sheet1", "A1")
Cells(r, 1).Formula = wbList(i)
Cells(r, 2).Formula = cValue
Next i
End Sub
‘- - - - - - - - - - - - - - - - - - - - - - -
Private Function GetInfoFromClosedFile(ByVal wbPath As String, _
wbName As String, wsName As String, cellRef As String) As Variant
Dim arg As String
GetInfoFromClosedFile = ""
If Right(wbPath, 1) <> "\" Then wbPath = wbPath & "\"
ExcelVBA>>ExcelVBA编程入门范例>>第三章Workbook对象(fanjy)
http://fanjy.- 16 - blog.excelhome.net
If Dir(wbPath & "\" & wbName) = "" Then Exit Function
arg = "'" & wbPath & "[" & wbName & "]" & _
wsName & "'!" & Range(cellRef).Address(True, True, xlR1C1)
On Error Resume Next
GetInfoFromClosedFile = ExecuteExcel4Macro(arg)
End Function
示例说明:本示例将读取一个文件夹内所有工作簿中工作表Sheet1 上单元格A1 中的值到一
个新工作簿中。代码中,“C:\文件夹名”代表工作簿所在的文件夹名。
[示例03-29-03]
Sub GetDataFromClosedWorkbook()
Dim wb AsWorkbook
Application.ScreenUpdating = False
'以只读方式打开工作簿
Set wb = Workbooks.Open("C:\文件夹名\文件.xls", True, True)
With ThisWorkbook.Worksheets("工作表名")
'从工作簿中读取数据
.Range("A10").Formula = wb.Worksheets("源工作表名").Range("A10").Formula
.Range("A11").Formula = wb.Worksheets("源工作表名").Range("A20").Formula
.Range("A12").Formula = wb.Worksheets("源工作表名").Range("A30").Formula
.Range("A13").Formula = wb.Worksheets("源工作表名").Range("A40").Formula
EndWith
wb.Close False '关闭打开的源数据工作簿且不保存任何变化
Set wb = Nothing '释放内存
Application.ScreenUpdating = True
End Sub
示例说明:在运行程序时,打开所要获取数据的工作簿,当取得数据后再关闭该工作簿。将
屏幕更新属性值设置为False,将看不出源数据工作簿是否被打开过。本程序代码中,“C:\
文件夹名\文件.xls”、"源工作表名"代表工作簿所在的文件夹和工作簿文件名。
By fanjy in 2006-10-23
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn

相关索引: 上一节



Access软件网QQ交流群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助