Excel VBA编程的常用代码(86页).doc
-Excel VBA编程的常用代码 用过VB的人都应该知道如何声明变量,在VBA中声明变量和VB中是完全一样的!使用Dim语句Dim a as integer '声明a为整型变量Dim a '声明a为变体变量Dim a as string '声明a为字符串变量Dim a as currency ,b as currency ,c as currency '声明a,b,c为货币变量.声明变量可以是:Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(当前不支持)、Date、String(只限变长字符串)、String * length(定长字符串)、Object、Variant、用户定义类型或对象类型。强制声明变量Option Explicit说明:该语句必在任何过程之前出现在模块中。声明常数用来代替文字值。Const ' 常数的默认状态是 Private。Const My = 456' 声明 Public 常数。Public Const MyString = "HELP"' 声明 Private Integer 常数。Private Const MyInt As Integer = 5' 在同一行里声明多个常数。Const MyStr = "Hello", MyDouble As Double = 3.4567 选择当前单元格所在区域在EXCEL97中,有一个十分好的功能,他就是把鼠标放置在一个有效数据单元格中,执行该段代码,你就可以将连在一起的一片数据全部选中。只要将该段代码加入到你的模块中。Sub My_SelectSelection.CurrentRegion.SelectEnd sub返回当前单元格中数据删除前后空格后的值sub my_trimmsgbox Trim(ActiveCell.Value)end sub单元格位移sub my_offsetActiveCell.Offset(0, 1).Select'当前单元格向左移动一格ActiveCell.Offset(0, -1).Select'当前单元格向右移动一格ActiveCell.Offset(1 , 0).Select'当前单元格向下移动一格ActiveCell.Offset(-1 , 0).Select'当前单元格向上移动一格end sub如果上述程序产生错误那是因为单元格不能移动,为了解除上述错误,我们可以往sub my_offset 之下加一段代码 on error resume next 注意以下代码都不再添加 sub “代码名称” 和end sub请自己添加!给当前单元格赋值ActiveCell.Value = "你好!"给指定单元格赋值例如:单元格内容设为""Range("a1").value="hello"又如:你现在的工作簿在sheet1上,你要往sheet2的单元格中插入""1.sheets("sheet2").selectrange("a1").value="hello"或2.Sheets("sheet1").Range("a1").Value = "hello"说明:1.sheet2被选中,然后在将“HELLO"赋到A1单元格中。2.sheet2不必被选中,即可“HELLO"赋到sheet2 的A1单元格中。隐藏工作表'隐藏SHEET1这张工作表sheets("sheet1").Visible=False'显示SHEET1这张工作表sheets("sheet1").Visible=True打印预览有时候我们想把所有的EXCEL中的SHEET都打印预览,请使用该段代码,它将在你现有的工作簿中循环,直到最后一个工作簿结束循环预览。Dim my As WorksheetFor Each my In Worksheetsmy.PrintPreviewNext my得到当前单元格的地址msgbox ActiveCell.Address得到当前日期及时间msgbox date & chr(13) & time保护工作簿ActiveSheet.Protect 取消保护工作簿ActiveSheet.Unprotect给活动工作表改名为 "liu"ActiveSheet.Name = "liu"打开一个应用程序AppActivate (Shell("C:/WINDOWS/CALC.EXE")增加一个工作表Worksheets.Add删除活动工作表activesheet.delete打开一个工作簿文件Workbooks.Open FileName:="C:/My Documents/Book2.xls"关闭活动窗口ActiveWindow.Close单元格格式选定单元格左对齐Selection.HorizontalAlignment = xlLeft选定单元格居中Selection.HorizontalAlignment = xlCenter选定单元格右对齐Selection.HorizontalAlignment = xlRight选定单元格为百分号风格Selection.Style = "Percent"选定单元格字体为粗体Selection.Font.Bold = True选定单元格字体为斜体Selection.Font.Italic = True选定单元格字体为宋体20号字With Selection.Font.Name = "宋体".Size = 20End WithWith 语句With 对象.描述End With清除单元格ActiveCell.Clear '删除所有文字、批注、格式返回选定区域的行数MsgBox Selection.Rows.Count返回选定区域的列数MsgBox Selection.Columns.Count返回选定区域的地址Selection.Address忽略所有的错误ON ERROR RESUME NEXT遇错跳转on error goto err_handle'中间的其他代码err_handle: ' 标签'跳转后的代码删除一个文件kill "c:/1.txt"定制自己的状态栏Application.StatusBar = "现在时刻: " & Time恢复自己的状态栏Application.StatusBar = false用代码执行一个宏Application.Run macro:="text"滚动窗口到a1的位置ActiveWindow.ScrollRow = 1ActiveWindow.ScrollColumn = 1定制系统日期Dim MyDate, MyDayMyDate = #12/12/69#MyDay = Day(MyDate)返回当天的时间Dim MyDate, MyYearMyDate = Date MyYear = Year(MyDate)MsgBox MyYear inputbox<输入框>XX=InputBox ("Enter number of months to add")得到一个文件名Dim kk As Stringkk = Application.GetOpenFilename("EXCEL (*.XLS), *.XLS", Title:="提示:请打开一个EXCEL文件:")msgbox kk打开zoom对话框Application.Dialogs(xlDialogZoom).Show激活字体对话框Application.Dialogs(xlDialogActiveCellFont).Show打开另存对话框Dim kk As Stringkk = Application.GetSaveAsFilename("excel (*.xls), *.xls")Workbooks.Open kk工作簿(Workbook)基本操作应用示例(一)Workbook对象代表工作簿,而Workbooks集合则包含了当前所有的工作簿。下面对Workbook对象的重要的方法和属性以及其它一些可能涉及到的方法和属性进行示例介绍,同时,后面的示例也深入介绍了一些工作簿对象操作的方法和技巧。示例03-01:创建工作簿(Add方法)示例03-01-01Sub CreateNewWorkbook1() MsgBox "将创建一个新工作簿." Workbooks.AddEnd Sub示例03-01-02Sub 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 iEnd Sub示例03-02:添加并保存新工作簿Sub AddSaveAsNewWorkbook() Dim Wk As Workbook Set Wk = Workbooks.Add Application.DisplayAlerts = False Wk.SaveAs Filename:="D:/SalesData.xls"End Sub示例说明:本示例使用了Add方法和SaveAs方法,添加一个新工作簿并将该工作簿以文件名SalesData.xls保存在D盘中。其中,语句Application.DisplayAlerts = False表示禁止弹出警告对话框。示例03-03:打开工作簿(Open方法)示例03-03-01Sub openWorkbook1() Workbooks.Open "<需打开文件的路径>/<文件名>"End Sub示例说明:代码中的<>里的内容需用所需打开的文件的路径及文件名代替。Open方法共有15个参数,其中参数FileName为必需的参数,其余参数可选。示例03-03-02Sub openWorkbook2() Dim fname As String MsgBox "将D盘中的<测试.xls>工作簿以只读方式打开" fname = "D:/测试.xls" Workbooks.Open Filename:=fname, ReadOnly:=TrueEnd Sub示例03-04:将文本文件导入工作簿中(OpenText方法)Sub TextToWorkbook() '本示例打开某文本文件并将制表符作为分隔符对此文件进行分列处理转换成为工作表 Workbooks.OpenText Filename:="<文本文件所在的路径>/<文本文件名>", _ DataType:=xlDelimited, Tab:=TrueEnd Sub示例说明:代码中的<>里的内容需用所载入的文本文件所在路径及文件名代替。OpenText方法的作用是导入一个文本文件,并将其作为包含单个工作表的工作簿进行分列处理,然后在此工作表中放入经过分列处理的文本文件数据。该方法共有18个参数,其中参数FileName为必需的参数,其余参数可选。示例03-05:保存工作簿(Save方法)示例03-05-01Sub SaveWorkbook() MsgBox "保存当前工作簿." ActiveWorkbook.SaveEnd Sub示例03-05-02Sub SaveAllWorkbook1() Dim wb As Workbook MsgBox "保存所有打开的工作簿后退出Excel." For Each wb In Application.Workbooks wb.Save Next wb Application.QuitEnd Sub示例03-05-03Sub SaveAllWorkbook2() Dim wb As Workbook For Each wb In Workbooks If wb.Path <> "" Then wb.Save Next wbEnd Sub示例说明:本示例保存原来已存在且已打开的工作簿。示例03-06:保存工作簿(SaveAs方法)示例03-06-01Sub SaveWorkbook1() MsgBox "将工作簿以指定名保存在默认文件夹中." ActiveWorkbook.SaveAs "<工作簿名>.xls"End Sub示例说明:SaveAs方法相当于“另存为”命令,以指定名称保存工作簿。该方法有12个参数,均为可选参数。如果未指定保存的路径,那么将在默认文件夹中保存该工作簿。如果文件夹中该工作簿名已存在,则提示是否替换原工作簿。示例03-06-02Sub 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 fnameEnd Sub示例说明:本示例将当前工作簿以一个新名(即new加原名)保存在默认文件夹中。示例03-06-03Sub CreateBak1() MsgBox "保存工作簿并建立备份工作簿" ActiveWorkbook.SaveAs CreateBackup:=TrueEnd Sub示例说明:本示例将在当前文件夹中建立工作簿的备份。示例03-06-04Sub CreateBak2() MsgBox "保存工作簿时,若已建立了备份,则将出现包含True的信息框,否则出现False." MsgBox ActiveWorkbook.CreateBackupEnd Sub示例03-07:取得当前打开的工作簿数(Count属性)Sub WorkbookNum() MsgBox "当前已打开的工作簿数为:" & Chr(10) & Workbooks.CountEnd Sub示例03-08:激活工作簿(Activate方法)示例03-08-01Sub ActivateWorkbook1() Workbooks("<工作簿名>").ActivateEnd Sub示例说明:Activate方法激活一个工作簿,使该工作簿为当前工作簿。示例03-08-02Sub 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 iEnd 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:=TrueEnd Sub示例说明:使用Protect方法来保护工作簿,带有三个可选参数,参数Password指明保护工作簿密码,要解除工作簿保护应输入此密码;参数Structure设置为True则保护工作簿结构,此时不能对工作簿中的工作表进行插入、复制、删除等操作;参数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 IfEnd Sub示例03-12:访问工作簿的内置属性(BuiltinDocumentProperties属性)示例03-12-01Sub 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 IfEnd Sub示例说明:在Excel中选择菜单“文件属性”命令时将会显示一个“属性”对话框,该对话框中包含了当前工作簿的有关信息,可以在VBA中使用BuiltinDocumentProperties属性访问工作簿的属性。上述示例代码将显示当前工作簿保存时的日期和时间。示例03-12-02Sub 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 ListPropertiesEnd 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 End With Next i End With Range("A:C").Columns.AutoFitEnd Sub示例说明:本示例代码在“工作簿属性”工作表中列出了当前工作簿中的所有内置属性。示例03-13:测试工作簿中是否包含指定工作表(Sheets属性)Sub testSheetExists() MsgBox "测试工作簿中是否存在指定名称的工作表" Dim b As Boolean b = SheetExists("<指定的工作表名>") If b = True Then MsgBox "该工作表存在于工作簿中." Else MsgBox "工作簿中没有这个工作表." End IfEnd 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 IfEnd 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 "然后,将数值分类设置为数值,即单元格中显示的精度" ActiveWorkbook.PrecisionAsDisplayed = True pValue = ActiveCell.Value * 3 MsgBox "此时,当前单元格中的数字乘以3等于:" & pValue & "而不是1" ActiveWorkbook.PrecisionAsDisplayed = FalseEnd 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 = xlDisplayShapesEnd 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 "自动恢复功能已开启." End IfEnd Sub示例03-20:设置工作簿密码(Password属性)Sub UsePassword() Dim wb As Workbook Set wb = Application.ActiveWorkbook wb.Password = InputBox("请输入密码:") wb.CloseEnd 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 End With Range("A:C").Columns.AutoFitEnd Sub示例说明:示例代码运行后,将创建一个新工作簿并带有用户使用当前工作簿的信息,即用户名、打开的日期和时间及工作簿使用方式。示例03-22:检查工作簿是否有密码保护(HasPassword属性)Sub IsPassword() If ActiveWorkbook.HasPassword = True Then MsgBox "本工作簿有密码保护,请在管理员处获取密码." Else MsgBox "本工作簿无密码保护,您可以自由编辑." End IfEnd Sub示例03-23:决定列表边框是否可见(InactiveListBorderVisible属性)Sub HideListBorders() MsgBox "隐藏当前工作簿中所有非活动列表的边框." ActiveWorkbook.InactiveListBorderVisible = FalseEnd Sub示例03-24:关闭工作簿示例03-24-01 Sub CloseWorkbook1()Msgbox “不保存所作的改变而关闭本工作簿”ActiveWorkbook.Close False或ActiveWorkbook.Close SaveChanges:=False或ActiveWorkbook.Saved=TrueEnd sub示例03-24-02 Sub CloseWorkbook2()Msgbox “保存所作的改变并关闭本工作簿”ActiveWorkbook.Close TrueEnd sub示例03-24-03 Sub CloseWorkbook3()Msgbox “关闭本工作簿。如果工作簿已发生变化,则弹出是否保存更改的对话框。”ActiveWorkbook.Close TrueEnd sub示例03-24-04 关闭并保存所有工作簿Sub CloseAllWorkbooks() Dim Book As Workbook For Each Book In WorkbooksIf Book.Name<>ThisWorkbook.Name ThenBook.Close savechanges:=TrueEnd IfNext BookThisWorkbook.Close savechanges:=TrueEnd Sub示例03-24-05 关闭工作簿并将它彻底删除Sub KillMe() With ThisWorkbook .Saved = True .ChangeFileAccess Mode:=xlReadOnly Kill .FullName .Close False End WithEnd Sub示例03-24-06关闭所有工作簿,若工作簿已改变则弹出是否保存变化的对话框Sub closeAllWorkbook() MsgBox "关闭当前所打开的所有工作簿" Workbooks.CloseEnd Sub 工作簿(Workbook)基本操作应用示例(二) <其它一些有关操作工作簿的示例>示例03-25:创建新的工作簿Sub testNewWorkbook()MsgBox "创建一个带有10个工作表的新工作簿"Dim wb as WorkbookSet 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 = wsCountSet NewWorkbook = Workbooks.Add Application.SheetsInNewWorkbook = OriginalWorksheetCountEnd Function示例说明:自定义函数NewWorkbook可以创建最多带有255个工作表的工作簿。本测试示例创建一个带有10个工作表的新工作簿。示例03-26:判断工作簿是否