版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ExcelVBA办公自动化实战编程手册(二十二讲·含可直接运行的代码、要点提示与排错清单)本手册面向有一定Excel基础、希望用VBA减少重复劳动的办公人员。全部代码均按通用场景编写,可复制到标准模块中直接运行。使用前请在副本上测试,确认效果后再用于正式数据。启用宏的文件请仅在来源可信时打开。
手册目录第01讲VBA开发环境与宏安全性设置第02讲变量、数据类型与常量第03讲流程控制:分支与循环第04讲过程与函数:Sub与Function第05讲Range对象核心操作第06讲Worksheet与Workbook对象第07讲单元格查找与定位第08讲工作表数据批量清洗第09讲多工作表合并汇总第10讲按条件拆分工作表第11讲自动生成报表与格式化第12讲图表自动绘制第13讲条件格式与数据条第14讲数据透视表自动化第15讲文件与文件夹操作第16讲读取与写入文本文件第17讲用户窗体UserForm基础第18讲自定义函数在工作表中的应用第19讲错误处理与调试技巧第20讲事件过程的应用第21讲性能优化与常见陷阱第22讲代码模块的复用与分发第23讲常见运行时错误速查
第01讲VBA开发环境与宏安全性设置一、要点说明VBA是内置于Excel的宏语言,通过Alt+F11可打开VisualBasic编辑器,在插入菜单中添加模块后即可编写代码。首次使用需在「文件—选项—信任中心—信任中心设置—宏设置」中选择「禁用所有宏并发出通知」,打开含宏工作簿时点击「启用内容」。保存时必须另存为启用宏的工作簿格式,否则代码将丢失。二、示例代码SubHello()DimmsgAsStringmsg="VBA环境正常"MsgBoxmsg,vbInformation,"提示"EndSub三、使用提示1.启用宏的工作簿扩展名为xlsm,普通工作簿为xlsx。2.代码窗口、立即窗口、本地窗口是调试三大面板,立即窗口用Debug.Print输出结果。3.个人宏工作簿PERSONAL.XLSB中的过程可在任意文件中调用。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第02讲变量、数据类型与常量一、要点说明VBA中变量可用Dim声明,未声明时默认为Variant类型,虽然灵活但会牺牲性能并隐藏拼写错误,建议在模块顶部书写OptionExplicit强制显式声明。常用类型包括String、Long、Double、Boolean、Date、Object。变量作用域分为过程级、模块级和工程级,模块级用Private,工程级用Public声明。二、示例代码OptionExplicitPrivategCountAsLong'模块级变量SubDemoVar()DimnameAsString,totalAsDoubleConstTAXAsDouble=0.13name="合计":total=1000Debug.Printname;total*(1+TAX)EndSub三、使用提示1.OptionExplicit能显著减少因变量名拼写错误造成的隐性缺陷。2.整型优先使用Long而非Integer,可避免溢出且性能更好。3.对象变量赋值必须使用Set关键字,如Setws=Sheets(1)。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第03讲流程控制:分支与循环一、要点说明分支结构包括If...Then...ElseIf...Else和SelectCase,多条件罗列时SelectCase可读性更好。循环包括For...Next、ForEach...Next、DoWhile...Loop和DoUntil...Loop。遍历单元格区域应优先使用ForEach配合Range,遍历数组则使用For...Next效率更高。二、示例代码SubLoopDemo()DimcAsRange,nAsLongForEachcInRange("A2:A100")IfIsNumeric(c.Value)ThenSelectCasec.ValueCaseIs>=90:n=n+1CaseIs>=60:n=n+0CaseElse:c.Interior.Color=vbYellowEndSelectEndIfNextcDebug.Print"优秀人数:";nEndSub三、使用提示1.ExitFor与ExitDo用于提前跳出循环,避免无效迭代。2.嵌套循环中外层变量不要与内层同名,否则逻辑难以追踪。3.Do...Loop必须在循环体内改变判断条件,否则会形成死循环。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第04讲过程与函数:Sub与Function一、要点说明Sub过程执行一系列操作但不返回值,Function过程可以返回值并可被工作表公式调用。参数传递默认为ByRef(传址),使用ByVal可保护原始变量不被修改,编写工具函数时建议显式指定。过程可设置为Public或Private,前者在工程内任意位置可调用。二、示例代码FunctionAddTax(ByValamountAsDouble,_OptionalByValrateAsDouble=0.13)AsDoubleAddTax=Round(amount*(1+rate),2)EndFunctionSubTestIt()Debug.PrintAddTax(1000)Debug.PrintAddTax(1000,0.06)EndSub三、使用提示1.自定义函数无法修改其他单元格内容,只能返回值。2.Optional参数必须放在必选参数之后,且需给出默认值。3.给函数返回值的方式是把值赋给函数名本身。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第05讲Range对象核心操作一、要点说明Range是VBA中最常用的对象,代表一个单元格或单元格区域。Cells(行,列)使用数字索引,便于循环;Range(地址)使用字母地址,便于书写。Offset用于相对偏移,Resize用于改变区域大小,CurrentRegion可取得与指定单元格相连的连续数据区,End(xlUp)用于定位最后一行。二、示例代码SubRangeDemo()DimlastRowAsLonglastRow=Cells(Rows.Count,1).End(xlUp).RowRange("A1").CurrentRegion.SelectRange("A1").Offset(1,0).Resize(lastRow-1,3).SelectRange("D1:D"&lastRow).FormulaR1C1="=RC[-1]*1.13"EndSub三、使用提示1.定位最后一行应统一采用End(xlUp)方式,避免使用UsedRange造成的误判。2.对区域整体赋值或读取比逐个单元格循环快数十倍。3.FormulaR1C1使用相对引用,便于批量填充同构公式。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第06讲Worksheet与Workbook对象一、要点说明Workbook代表工作簿,Worksheet代表工作表。新建、打开、保存、关闭工作簿分别对应Workbooks.Add、Workbooks.Open、SaveAs和Close方法。操作工作表时应先判断是否存在,再决定新建或引用,避免重复创建同名工作表引发运行时错误。二、示例代码SubSheetDemo()DimwsAsWorksheetOnErrorResumeNextSetws=ThisWorkbook.Worksheets("汇总")OnErrorGoTo0IfwsIsNothingThenSetws=ThisWorkbook.Worksheets.Addws.Name="汇总"EndIfws.Range("A1").Value="生成时间:"&NowEndSub三、使用提示1.ThisWorkbook指代码所在工作簿,ActiveWorkbook指当前激活工作簿。2.工作表名称不能超过三十一个字符,且不能包含方括号等非法字符。3.删除工作表时Application.DisplayAlerts需设为False以跳过确认框,使用后务必恢复为True。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第07讲单元格查找与定位一、要点说明Find方法用于在区域内查找指定内容,功能与界面上的查找对话框一致,但可程序化控制。FindNext用于继续查找下一个匹配项,配合Find的首个地址可避免循环不止。SpecialCells可快速定位空单元格、公式单元格、可见单元格等特殊集合。二、示例代码SubFindDemo()DimrngAsRange,firstAddrAsString,hitAsLongSetrng=Columns("B").Find("逾期",LookAt:=xlWhole)IfNotrngIsNothingThenfirstAddr=rng.AddressDohit=hit+1Setrng=Columns("B").FindNext(rng)LoopWhileNotrngIsNothingAndrng.Address<>firstAddrEndIfDebug.Print"命中:";hitEndSub三、使用提示1.Find的参数(LookIn、LookAt)会被保留,下次调用前应显式指定。2.未找到时Find返回Nothing,直接访问其属性会报错,必须先判断。3.SpecialCells(xlCellTypeBlanks)定位空单元格时若无空单元格会抛出异常,需配合错误处理。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第08讲工作表数据批量清洗一、要点说明数据清洗是日常办公中最常见的重复劳动,典型动作包括去除空格、统一大小写、拆分与合并字段、删除重复行、转换文本型数字。将这些动作写成过程后,一次运行即可完成原本数十分钟的手工操作,且结果稳定可复现。二、示例代码SubCleanData()DimarrAsVariant,iAsLongarr=Range("A2:C500").ValueFori=LBound(arr)ToUBound(arr)arr(i,1)=Trim(CStr(arr(i,1)))arr(i,2)=UCase(Trim(CStr(arr(i,2))))IfIsNumeric(arr(i,3))Thenarr(i,3)=CDbl(arr(i,3))NextiRange("A2:C500").Value=arrRange("A1:C500").RemoveDuplicatesColumns:=Array(1,2),Header:=xlYesEndSub三、使用提示1.一次性读入数组、在内存中处理、再整体写回,是最有效的提速方式。2.Trim只能去掉首尾空格,中间多余空格需配合Replace或WorksheetFunction.Trim。3.RemoveDuplicates会就地修改数据,操作前应先备份原始工作表。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第09讲多工作表合并汇总一、要点说明将多个结构相同的工作表合并为一张总表,是月度、季度报表整理的典型需求。通用做法是循环遍历工作表,定位每张表的最后一行,将数据区一次性复制到总表末尾,并在总表中增加来源标识列以便追溯。二、示例代码SubMergeSheets()DimwsAsWorksheet,tgtAsWorksheet,rAsLongSettgt=ThisWorkbook.Worksheets.Add:tgt.Name="总表"ForEachwsInThisWorkbook.WorksheetsIfws.Name<>tgt.NameThenr=tgt.Cells(tgt.Rows.Count,1).End(xlUp).Row+1ws.Range("A2").Resize(ws.Cells(ws.Rows.Count,1).End(xlUp).Row-1,4).Copy_tgt.Cells(r,1)tgt.Cells(r,5).Resize(ws.Cells(ws.Rows.Count,1).End(xlUp).Row-1).Value=ws.NameEndIfNextwsEndSub三、使用提示1.合并前应确认各表列顺序一致,否则数据会错位。2.使用Value赋值代替Copy可避免剪贴板并提高速度。3.来源列便于后续核对与问题追溯,建议始终保留。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第10讲按条件拆分工作表一、要点说明与合并相反,拆分是把一张总表按某列的取值分别输出到多张工作表或独立文件。高效做法是先用字典对象收集唯一键值,再按键筛选输出,避免在循环中反复调用工作表函数造成性能瓶颈。二、示例代码SubSplitByKey()DimdictAsObject,kAsString,iAsLong,lastRowAsLongSetdict=CreateObject("Scripting.Dictionary")lastRow=Cells(Rows.Count,1).End(xlUp).RowFori=2TolastRowk=Cells(i,2).ValueIfNotdict.Exists(k)Thendict.Addk,NewCollectiondict(k).AddiNextiForEachkIndict.KeysDebug.Printk,dict(k).CountNextkEndSub三、使用提示1.字典对象需后期绑定CreateObject,便于代码在不同机器上通用。2.键值区分大小写,必要时用UCase统一后再判断。3.拆分为独立文件时注意文件名不能包含冒号、斜杠等非法字符。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第11讲自动生成报表与格式化一、要点说明报表自动化不仅要填数据,还要设置字体、边框、数字格式、列宽与冻结窗格,使输出结果达到可直接交付的水平。建议将常用格式封装成独立过程反复调用,避免在每个报表过程中重复书写大量排版代码。二、示例代码SubFormatReport()WithRange("A1:E1").Font.Bold=True.Interior.Color=RGB(217,225,242).HorizontalAlignment=xlCenterEndWithColumns("A:E").AutoFitColumns("D").NumberFormat="#,##0.00"Range("A:E").Borders.LineStyle=xlContinuousActiveWindow.FreezePanes=FalseRange("A2").Select:ActiveWindow.FreezePanes=TrueEndSub三、使用提示1.AutoFit对超长文本效果有限,必要时手动设置ColumnWidth。2.冻结窗格前必须先选中目标单元格以下的交叉点。3.边框设置应作用于整个数据区,避免逐行设置造成卡顿。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第12讲图表自动绘制一、要点说明Charts.Add或Shapes.AddChart2可创建图表,随后设置图表类型、数据源、标题与坐标轴。批量生成图表时应先确定数据区,再统一套用样式模板,使多张图表保持一致的视觉规范,便于放入同一份汇报材料。二、示例代码SubMakeChart()DimchAsChartSetch=Charts.AddWithch.SetSourceDataSource:=Sheets("数据").Range("A1:C13").ChartType=xlColumnClustered.HasTitle=True.ChartTitle.Text="月度完成情况".Axes(xlCategory).HasTitle=True.Axes(xlCategory).AxisTitle.Text="月份"EndWithEndSub三、使用提示1.图表数据源应使用绝对区域,防止插入行列后错位。2.xlColumnClustered、xlLine、xlPie是最常用的三种图表类型常量。3.图表作为独立工作表或嵌入对象两种形态,API用法略有差异。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第13讲条件格式与数据条一、要点说明条件格式可以让异常数据自动高亮,无需人工逐行查看。通过VBA可以批量设置颜色刻度、数据条和图标集,也可基于公式自定义规则,实现比界面操作更灵活的控制,例如按行比较、跨列判断等复杂逻辑。二、示例代码SubSetCFF()WithRange("D2:D200").FormatConditions.Delete.FormatConditions.AddDatabar.FormatConditions(1).BarColor.Color=RGB(91,155,213).FormatConditions.AddType:=xlCellValue,Operator:=xlLess,Formula1:="0".FormatConditions(2).Font.Color=vbRedEndWithEndSub三、使用提示1.新增规则前先Delete旧规则,避免规则累积拖慢表格。2.基于公式的规则中引用应使用相对地址以便逐行生效。3.条件格式数量过多会明显影响文件打开速度,应控制在必要范围内。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第14讲数据透视表自动化一、要点说明数据透视表是多维汇总的核心工具。通过VBA创建透视表需要先准备缓存,再设置行字段、列字段、值字段与汇总方式。每月数据更新后,只需刷新缓存即可重新生成汇总结果,无需重复手工拖拽。二、示例代码SubMakePivot()DimpcAsPivotCache,ptAsPivotTableSetpc=ThisWorkbook.PivotCaches.Create(xlDatabase,Sheets("数据").Range("A1").CurrentRegion)Setpt=pc.CreatePivotTable(Sheets("透视").Range("A3"),"销售透视")Withpt.PivotFields("区域").Orientation=xlRowField.PivotFields("产品").Orientation=xlColumnField.AddDataField.PivotFields("金额"),"销售额",xlSum.NumberFormat="#,##0"EndWithEndSub三、使用提示1.同一缓存创建多个透视表会共享内存,但也会共享筛选状态。2.字段名必须与数据源表头完全一致,否则会触发运行时错误。3.刷新前调用pt.RefreshTable或ThisWorkbook.RefreshAll。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第15讲文件与文件夹操作一、要点说明借助FileSystemObject可以完成创建文件夹、遍历文件、判断文件是否存在等操作。批处理类需求(如批量重命名、批量汇总目录下所有工作簿)通常都需要它。也可使用VBA内置的Dir函数完成轻量遍历,代码更短但功能有限。二、示例代码SubListFiles()DimfsoAsObject,folderAsObject,fAsObjectSetfso=CreateObject("Scripting.FileSystemObject")Setfolder=fso.GetFolder("D:\报表\")ForEachfInfolder.FilesIfLCase(fso.GetExtensionName(f.Name))="xlsx"ThenDebug.Printf.Name,f.DateLastModifiedEndIfNextfEndSub三、使用提示1.路径中的反斜杠在字符串里需写成双反斜杠。2.遍历前先判断FolderExists,避免路径不存在导致中断。3.批量操作前建议先在副本目录试运行,确认无误再处理正式目录。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第16讲读取与写入文本文件一、要点说明与txt、csv文件交互是与外部系统交换数据的常用方式。Open语句可指定Input、Output、Append模式,LineInput逐行读取,Print与Write写入。处理csv时应注意分隔符与中文编码,必要时以UTF-8或系统默认编码分别测试,避免乱码。二、示例代码SubWriteLog()DimfnAsInteger,pathAsStringpath=ThisWorkbook.Path&"\run.log"fn=FreeFileOpenpathForAppendAs#fnPrint#fn,Format(Now,"yyyy-mm-ddhh:nn:ss")&"处理完成"Close#fnEndSub三、使用提示1.FreeFile用于取得可用的文件号,避免号冲突。2.写入完成后必须Close,否则缓冲区内容可能未落盘。3.读取大文件时按行处理,避免一次性读入造成内存压力。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第17讲用户窗体UserForm基础一、要点说明UserForm可以为工具提供图形界面,让不懂代码的同事也能使用。在编辑器中插入用户窗体后添加文本框、按钮、列表框等控件,为按钮编写Click事件即可完成交互。调用时用UserForm1.Show显示。二、示例代码PrivateSubCommandButton1_Click()IfTrim(TextBox1.Text)=""ThenMsgBox"请输入起始日期",vbExclamationTextBox1.SetFocusExitSubEndIfCallBuildReport(CDate(TextBox1.Text))UnloadMeEndSub三、使用提示1.输入校验应放在事件开头,避免无效数据进入主流程。2.UnloadMe用于关闭窗体,Hide仅隐藏但保留输入内容。3.窗体初始化逻辑写在UserForm_Initialize中。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第18讲自定义函数在工作表中的应用一、要点说明存放在标准模块中的PublicFunction可以直接在单元格公式中调用,如同内置函数一样使用。这为解决特定业务计算提供了极大便利,例如按自定义规则计算提成、换算单位、提取字符串等。二、示例代码PublicFunction提取数字(ByValsAsString)AsStringDimiAsInteger,outAsStringFori=1ToLen(s)IfMid(s,i,1)Like"[0-9]"Thenout=out&Mid(s,i,1)Nexti提取数字=outEndFunction三、使用提示1.工作表公式中调用的自定义函数不能修改单元格格式或值。2.函数需放在标准模块,放在工作表模块中无法被公式识别。3.重算时可通过Application.Volatile使函数参与自动重算。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第19讲错误处理与调试技巧一、要点说明健壮的工具必须包含错误处理。OnErrorGoTo标签是最常用的写法,在出错时跳转到处理段,输出错误信息并做收尾清理。调试时可使用断点、逐语句执行、立即窗口打印变量值,配合Watch窗口观察表达式变化。二、示例代码SubSafeRun()OnErrorGoToEHApplication.ScreenUpdating=FalseCallBuildReport(Date)CleanExit:Application.ScreenUpdating=TrueExitSubEH:Debug.Print"错误"&Err.Number&":"&Err.DescriptionResumeCleanExitEndSub三、使用提示1.无论是否出错都应恢复ScreenUpdating等全局设置。2.Err.Clear用于清除错误状态,避免影响后续判断。3.关键节点写入日志文件,便于事后定位问题。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第20讲事件过程的应用一、要点说明事件过程让代码在特定动作发生时自动执行,例如工作表内容变化、工作簿打开、选区改变等。Worksheet_Change是最常用的事件,可用于数据校验、自动填充和联动更新。事件代码必须写在对应对象的代码模块中,不能放在标准模块。二、示例代码PrivateSubWorksheet_Change(ByValTargetAsRange)IfIntersect(Target,Me.Columns("C"))IsNothingThenExitSubApplication.EnableEvents=FalseMe.Cells(Target.Row,"D").Value=Target.Value*1.13Application.EnableEvents=TrueEndSub三、使用提示1.在事件中修改单元格会再次触发事件,必须先关闭EnableEvents。2.异常处理中也必须恢复EnableEvents,否则事件将永久失效。3.Target可能包含多个单元格,需遍历处理或限定范围。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第21讲性能优化与常见陷阱一、要点说明VBA卡顿的主要原因包括逐个单元格读写、频繁的屏幕刷新、反复触发重算和大量剪贴板操作。优化手段包括:一次性读写数组、关闭ScreenUpdating与AutomaticCalculation、用Value赋值替代Copy、减少Select与Activate的使用。二、示例代码SubFastMode()WithApplication.ScreenUpdating=False.Calculation=xlCalculationManual.EnableEvents=False.DisplayStatusBar=FalseEndWith'...主处理逻辑...WithApplication.ScreenUpdating=True.Calculation=xlCalculationAutomatic.EnableEvents=True.DisplayStatusBar=TrueEndWithEndSub三、使用提示1.几乎不需要Select,直接对对象操作即可,既快又稳。2.关闭设置后必须确保任何退出路径都能恢复,建议配合错误处理。3.数据量超过十万行时应考虑使用数组或引入PowerQuery。四、动手练习1.将示例代码复制到标准模块并运行,观察结果是否符合预期。2.修改其中一到两个参数,体会参数变化对结果的影响。3.结合自己的实际表格改写一个可用版本。
第22讲代码模块的复用与分发一、要点说明成熟的VBA工具应当模块化:将通用功能放在独立模块,通过参数调用。分发时可选择导出.bas文件供他人导入,或将代码保存在个人宏工作簿,也可封装为加载宏(xlam)在所有工作簿中使用。二、示例代码'导出模块:编辑器中右键模块->导出文件'导入模块:右键工程->导入文件'加载宏保存为xlam,并通过'文件->选项->加载项->Excel加载项勾选启用SubAboutAddin()MsgBox"工具版本1.0",vbInformationEndSub三、使用提示1.通用模块建议统一命名
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论