来吧!带你玩转 Excel VBA

来吧!带你玩转 Excel VBA(CD光盘1)(双色)附带近500VBA思考练习题,Exceltip.net出品

罗刚君  杨嘉恺编著

ISBN 978-7-121-20627-6

20137月出版

定价:85.00

648

16
来吧!带你玩转 Excel VBA_第1张图片

编辑推荐

全面:从录制宏开始带你步入VBA殿堂

详细:每个案例都详述思路与步骤

贴心:提供售邱服务论坛与QQ

融洽:大量菜鸟与玩家伴你一同成长

内容提要

本书旨在普及Excel VBA 基础理论,以及通过VBA 的高级应用扩展Excel 的功能,提升读者的制表效率,解决工作中的疑难,同时亦可借此开发商业插件。

本书主要分为操作自动化引言篇、入门篇、进阶篇和疑难解答篇,覆盖从入门到提高的所有内容,以满足不同层次的读者需求。其中操作自动化引言篇简述了操作自动化的需求与方式,借此引出VBA 入门篇。VBA 入门篇包含第2 章到第13 章,主要介绍了与VBA 相关的基本概念、常用语句的语法、错误处理技巧、使用数组、开发自定义函数和设计窗体等内容。进阶篇包含第14 章到第22 章,主要介绍了类的应用、读取网页数据、制作菜单、开发插件、保护代码、制作安装程序,及开发具有撤销功能的插件等内容。疑难解答篇即本书第23 章,该章提供了365 个疑难问答,帮助读者解决日常工作中的一些困惑。

本书每段代码都有思路分析,对每句代码都提供了注释,且采用双色印刷,将代码与代码注释分开,从而提升读者的阅读体验。

本书提供了完善的售后服务,包括售后服务QQ 群(群号在随书光盘的每一个案例文件中),及售后服务论坛,地址为:http://www.exceltip.net/forum-75-1.html

目录

第一篇 操作自动化引言篇

1 操作自动化2

1.1自动化操作的价值.3

1.1.1自动化操作的必要性3

1.1.2实现操作自动化的两个途径4

1.2利用宏简化日常工作5

1.2.1三分钟学会录制宏.5

1.2.2执行宏的方法8

1.2.3两种方法读懂宏代码9

1.2.4宏的优缺点分析12

1.2.5如何发挥宏的长处.13

1.3使用VBA强化Excel功能14

1.3.1追根溯源:什么是VBA14

1.3.2知己知彼:解析VBA的优缺点14

1.3.3窥斑见豹:从一个案例初识VBA.15

1.4 Excel VBA的发展前景.16

1.4.1简化工作16

1.4.2开拓专业17

1.5本书架构17

1.6课后思考18

 

第二篇 VBA入门篇

2 代码应用基础.20

2.1区分VBE代码窗口21

2.1.1认识VBE界面21

2.1.2最常用的代码存放区:标准模块22

2.1.3工作簿事件代码窗口:ThisWorkbook26

2.1.4工作表事件代码窗口:Sheet127

2.1.5窗体代码窗口:UserForm127

2.1.6创建隐藏对象的代码窗口:类模块.28

2.2录入代码28

2.2.1代码的存放位置28

2.2.2写入代码的方式28

2.2.3提升代码的可读性.30

2.2.4调用快速信息.35

2.3四种代码执行方式.35

2.3.1快捷键调用36

2.3.2单击按钮执行.37

2.3.3自动执行37

2.3.4在公式中调用.39

2.4保存代码40

2.4.1文件保存格式对VBA代码的影响40

2.4.2单独保存代码模块.41

2.5让代码畅通无阻41

2.5.1调整宏的安全等级.41

2.5.2添加受信任位置42

2.5.3将代码封装为加载项43

2.6反复调用相同代码.43

2.6.1使用个人宏工作簿.43

2.6.2加载宏.44

2.6.3加载项.44

2.7调用代码的帮助系统44

2.7.1什么是帮助45

2.7.2如何从帮助中查询代码含义45

2.7.3调用网络资源.47

2.8课后思考47

3 从概念开始认识VBA49

3.1认识过程50

3.1.1过程的分类50

3.1.2子过程的基本语法.50

3.1.3子过程的命名要求.52

3.1.4子过程的调用方法与访问限制.53

3.1.5过程的执行顺序54

3.1.6过程的递归56

3.2关于参数57

3.2.1参数的存在价值57

3.2.2过程名称中的参数.57

3.2.3参数的赋值方式58

3.2.4可选参数与必选参数60

3.2.5代码中的参数.61

3.3理解对象63

3.3.1什么是对象63

3.3.2对象的引用层次64

3.4对象的属性与方法.64

3.4.1认识属性与方法65

3.4.2自动调用属性与方法66

3.4.3怎样才算完整的VBA语句67

3.5对象的事件.68

3.5.1什么是事件.68

3.5.2事件的存在价值68

3.5.3事件的分类与代码录入方式69

3.5.4事件的参数.71

3.6课后思考72

4 详解对象及其层次结构74

4.1查看所有对象75

4.1.1从对象浏览器查看对象.75

4.1.2从帮助中调用对象信息.75

4.2对象的层次与引用方式.76

4.2.1对象的层次.76

4.2.2使用对象名称引用对象.76

4.2.3使用复数形式表示对象集合77

4.2.4使用序号参数引用集合中的子对象.78

4.2.5引用子对象.79

4.2.6引用活动对象80

4.2.7引用父对象.80

4.2.8利用WITH语句引用重复出现的对象.81

4.3 Range对象83

4.3.1 Range("A1")引用方式84

4.3.2 Cells(1,1)引用方式87

4.3.3 [a1]引用方式.87

4.3.4活动单元格:ActiveCell.88

4.3.5下一个单元格:Next89

4.3.6屏幕坐标下的单元格:RangeFromPoint89

4.3.7选区:SelectionRangeSelection90

4.3.8已用区域:UsedRange92

4.3.9当前区域:CurrentRegion94

4.3.10当前数组区域:CurrentArray95

4.3.11按条件引用区域:SpecialCells96

4.3.12模拟Ctrl+方向键产生的单元格:End.99

4.3.13按偏移量重置区域引用:Offset.101

4.3.14按宽度与高度重置区域:Resize103

4.3.15引用多区域的合集:Union104

4.3.16引用多区域的交集:Intersect104

4.3.17用名称引用区域107

4.4图形对象108

4.4.1 Shapes对象与子对象109

4.4.2图形对象的名称109

4.4.3 DrawingObjects 110

4.4.4图形对象的类别子集 110

4.5表对象. 112

4.5.1表的合集与子对象. 112

4.5.2表的分类 112

4.5.3活动表. 113

4.5.4隐藏工作表的特性. 113

4.5.5引用名字为数值的工作表的技巧 114

4.6工作簿对象. 115

4.6.1工作簿合集与子对象 115

4.6.2活动工作簿 115

4.6.3关于后缀名 116

4.6.4关于工作簿格式 117

4.7 Excel应用程序对象. 117

4.7.1 Excel的顶层对象:Application. 117

4.7.2调用子对象时可以省略Application 118

4.7.3不同版本的Excel之间的差异. 118

4.8课后思考 119

5 揭密数据类型与变量、常量.121

5.1数据类型122

5.1.1区分数据类型的必要性122

5.1.2数据类型的分类123

5.1.3转换数据类型.125

5.2定义变量127

5.2.1变量的用途128

5.2.2定义变量的方法129

5.2.3变量的命名规则130

5.2.4变量的作用域.131

5.2.5变量的生命周期133

5.2.6静态变量与动态变量的分别134

5.2.7声明对象变量.136

5.2.8对象变量的初始化与释放.137

5.3定义常量138

5.3.1常量的用途138

5.3.2常量的定义方式138

5.3.3变量与常量的异同分析140

5.4课后思考140

6 条件语句与循环语句.142

6.1 IF语句解析143

6.1.1条件语句的重要性.143

6.1.2 If.Then.Else的单行模式.143

6.1.3 AndOrNot在条件语句中的作用.144

6.1.4案例解析:指定工作簿的最后开启日期146

6.1.5 If.Then.Else的块形式147

6.1.6块形式的应用案例:创建日期批注.148

6.1.7嵌套使用IF语句.150

6.1.8 IF语句的常见错误与防错之法.156

6.2 Select Case语句解析157

6.2.1 Select Case语句的价值.158

6.2.2 Select Case基本语法158

6.2.3多条件应用案例160

6.2.4 Select CaseIF Then语句比较163

6.3 IIFChoose函数164

6.3.1 IIF函数语法解析.165

6.3.2 IIF函数案例应用:判断Excel的版本号.165

6.3.3 IIF的优缺点.166

6.3.4 Choose函数语法解析167

6.3.5 Choose函数应用案例:打开搜索引擎.167

6.4 For Next语句解析.169

6.4.1循环语句的价值169

6.4.2 For Next语句基本语法169

6.4.3步长值对循环结果的影响.171

6.4.4 For Next语句应用案例171

6.5 For Each Next语句解析.175

6.5.1遍历对象集合175

6.5.2 For EachNext语句基本语法175

6.5.3 For EachNext语句应用案例:定位大于某值的单元格176

6.6 While Wend语句解析178

6.6.1 While Wend语句基本语法.178

6.6.2 While Wend语句应用案例:判断工号是否重复179

6.7 DO Loop语句解析182

6.7.1 Do Loop语法分析.182

6.7.2 Do Loop语法一应用183

6.7.3 Do Loop语法二应用184

6.7.4 Do Loop语法三应用185

6.7.5 Do Loop语法四应用185

6.7.6总结四种循环语句的优缺点188

6.8课后思考189

7 4类常见对象的应用案例.191

7.1单元格对象.192

7.1.1选择单元格.192

7.1.2筛选与复制区域的值193

7.1.3多区域复制194

7.1.4选择性粘贴数据196

7.1.5重置已用数据区域.199

7.1.6查找所有成绩为100的单元格201

7.1.7将表示平方米和立方米后面的23设为上标202

7.1.8合并相邻且相同的单元格.203

7.1.9按行合并且保留所有数据.205

7.1.10隔行插入行.207

7.1.11标示选区中的重复值208

7.2图形对象210

7.2.1批量导入图片与图片名称.210

7.2.2统一表中所有图片大小及对齐图片212

7.2.3批量导出图片.214

7.2.4插入带图片背景的批注216

7.3工作表对象.219

7.3.1显示所有隐藏的工作表219

7.3.2创建以本月每日日期命名的工作表220

7.3.3保护所有公式.221

7.3.4批量重命名表.223

7.3.5查找所有工作表中有循环引用的单元格224

7.3.6对职工表按学历排序225

7.3.7创建工作表目录227

7.4工作簿对象.228

7.4.1打开带密码且带有自动宏的工作簿228

7.4.2另存工作簿且以今天的日期命名229

7.4.3将外部链接转换成值230

7.4.4关闭工作簿且不保存修改内容.231

7.4.5定时保存且备份工作簿233

7.4.6重命名活动工作簿.234

7.5课后思考236

8 深入剖析VBA的各种事件.238

8.1事件的级别与顺序.239

8.1.1事件的级别与代码保存位置239

8.1.2事件的执行方式240

8.1.3事件的执行顺序241

8.2禁用与启用事件241

8.2.1临时关闭事件.242

8.2.2防止事件的连锁反应242

8.3工作表事件详解244

8.3.1工作表事件列表244

8.3.2 Change事件的特例245

8.3.3事件案例:激活工作表时验证访问权限245

8.3.4事件案例:自动标示当前行的背景.247

8.3.5事件案例:双击单元格时定位最大值或最小值248

8.3.6事件案例:在特定区域右击单元格时产生工作表目录.250

8.3.7事件案例:输入表达式时在右列自动返回计算结果251

8.3.8事件案例:单击目录时可打开隐藏的工作表252

8.3.9事件案例:实时保护已录入数据的单元格.253

8.3.10事件案例:在状态栏显示当前科目的不及格人数.254

8.3.11事件案例:通过数据有效性的下拉列表调用对应的图片255

8.4工作簿事件详解256

8.4.1工作簿事件列表257

8.4.2事件案例:记录工作簿打开次数258

8.4.3事件案例:显示活动工作表中的产量达标率259

8.4.4事件案例:保存工作簿时备份文件.260

8.4.5事件案例:打印数据前检查资料是否填写完整261

8.4.6事件案例:关闭工作簿时更新工作表目录.262

8.4.7事件案例:新建工作表时调用模板格式263

8.4.8事件案例:禁止修改总表名称.264

8.4.9事件案例:新建图表时自动设置为阴影、圆角265

8.5应用程序事件详解.266

8.5.1应用程序与类266

8.5.2事件案例:打开任意工作簿时创建工作表目录266

8.5.3事件案例:新建工作簿时自动保存.268

8.6按时执行代码270

8.6.1 OnKey方法的语法分析270

8.6.2创建计划任务271

8.7课后思考271

9 处理代码错误.273

9.1代码错误类型分析.274

9.1.1版本问题274

9.1.2参数赋值不当274

9.1.3变量定义不准确276

9.1.4对象不存在.276

9.2错误处理语句277

9.2.1详解Err对象277

9.2.2详解Error函数.279

9.2.3 On Error Resume Next语句.280

9.2.4 On Error GoTo Line语句281

9.2.5 On Error GoTo 0语句283

9.2.6 GoSub.Return语句.284

9.3案例应用287

9.3.1错误处理的常规思路288

9.3.2案例应用:为软件设计收集信息反馈的功能.289

9.3.3案例应用:根据选区的文件名批量导入图片.292

9.3.4案例应用:一键屏弊错误值294

9.4课后思考295

10 使用数组提升程序效率297

10.1基本概念298

10.1.1何谓数组298

10.1.2数组的特点.298

10.1.3一维数组298

10.1.4二维数组301

10.1.5数组的参数.302

10.1.6声明数组变量.303

10.1.7动态数组与静态数组的分别306

10.1.8释放动态数组的存储空间. 311

10.2数组函数312

10.2.1用函数创建数组312

10.2.2获取数组元素.313

10.2.3判断变量是否为数组314

10.2.4转置数组314

10.2.5获取数组的上标与下标.316

10.2.6转换文本与数组317

10.2.7筛选数组319

10.3案例分析320

10.3.1将指定区域的单词统一为首字母大写.320

10.3.2罗列不及格人员姓名、科目和成绩322

10.3.3将字符串合并到区域323

10.3.4将职员表按学历拆分成多个工作表325

10.3.5将选区的数据在文本与数值间互换327

10.3.6获取两列数据的相同项.329

10.3.7罗列至少三科不及格的学生姓名331

10.4课后思考333

11 处理重复值335

11.1调用内部功能336

11.1.1高级筛选336

11.1.2删除重复项.342

11.1.3数组透视表.345

11.2 Collection:集合350

11.2.1集合的特性.350

11.2.2集合的语法.351

11.2.3使用集合获取区域中的不重复值354

11.2.4罗列B列重复出现的身份证号码356

11.3 Dictionary:字典357

11.3.1字典对象的前期绑定和后期绑定357

11.3.2字典的特点.360

11.3.3字典的属性与方法360

11.3.4  获取选区中的唯一值364

11.3.5对采购表分类求和366

11.3.6对采购表分类计数367

11.3.7对产量表按组别和产品分类统计368

11.4课后思考369

12  开发自定义函数372

12.1语法分析373

12.1.1 Function过程与Sub过程的区别.373

12.1.2 Function过程的基本语法.373

12.1.3 OptionalParamArray的作用与区别.374

12.1.4自定义函数的命名规则.375

12.2开发简单的函数.375

12.2.1开发函数的常规思路375

12.2.2 Shui:计算个人所得税.376

12.2.3 EndRow:计算工作表最后非空行/列的行号/列号.378

12.3开发复杂函数380

12.3.1 Replacement:替换第N次出现的字符380

12.3.2 Look:Vlookup之升级版382

12.3.3 HeBin:按条件合并.384

12.4开发数组函数386

12.4.1 Only:获取一个或多个区域的唯一值.386

12.4.2 Statistics:对数据分类汇总.387

12.5为函数指定注释.390

12.5.1 MacroOptions的功能与语法.390

12.5.2为函数Look添加注释390

12.6课后思考392

13 设计程序窗体.394

13.1窗体与控件简介.395

13.1.1窗体的功能.395

13.1.2创建与运行UserForm对象.396

13.1.3使用工具箱.398

13.1.4标签控件400

13.1.5文本框控件.400

13.1.6命令控钮400

13.1.7复合框.401

13.1.8列表框.401

13.1.9复选框.402

13.1.10选项按框402

13.1.11框架.402

13.1.12切换按钮403

13.1.13多页控件404

13.1.14滚动条.405

13.1.15图像控件405

13.1.16 Flash控件405

13.1.17网页控件406

13.2设置属性407

13.2.1属性窗口的用途407

13.2.2设置属性的两种方式407

13.2.3文本框属性.409

13.2.4命令按钮属性.413

13.2.5复选框属性.415

13.2.6列表框属性.417

13.2.7复合框属性.422

13.2.8图像控件属性.425

13.2.9 Flash控件属性.426

13.2.10批量设置控件的属性426

13.3窗体与控件的事件.427

13.3.1 UserForm对象的事件427

13.3.2控件的事件.428

13.4窗体应用实战438

13.4.1开发多工作表查询窗体.438

13.4.2开发多工作表快速录入面板441

13.4.3以指定名称批量新建或复制工作表443

13.5课后思考448

 

第三篇 进阶篇

14 类模块应用450

14.1类模块基础.451

14.1.1类的概念与用途451

14.1.2声明与调用类.451

14.2  类模块与程序级事件453

14.2.1  在状态栏显示当前行的最大值与最小值地址453

14.2.2录入数据时自动将M后面的数字2显示为上标.455

14.3类模块与窗体控件.456

14.3.1何时需要使用类456

14.3.2为按钮批量指定MouseMove事件.456

14.4课后思考459

15 Excel VBAWeb应用461

15.1 Web基础知识.462

15.1.1 Web数据的收发原理.462

15.1.2 HTML以及网页元素分析465

15.2使用Web查询知识批量获取汇率466

15.2.1获取网页数据的实际网址466

15.2.2通过录制宏导入汇率首页数据.468

15.2.3完善宏代码批量导入网页数据.469

15.3运用Web数据收发机制获取网页信息470

15.3.1 Web数据通讯常用对象简介.470

15.3.2开发中英互译工具.471

15.3.3开发火车票查询工具474

15.4运用网页元素分析技术实现网页控制和读取480

15.4.1创建及访问IE对象480

15.4.2如何访问网页元素.481

15.4.3自动登录新浪微博.482

15.5课后思考485

16 创建传统工具栏与菜单487

16.1自定义工具栏488

16.1.1自定义工具栏模板.488

16.1.2自定义工具栏二级菜单模板489

16.2自定义工作表菜单.490

16.3自定义单元格右键菜单.492

16.4课后思考493

17 定义Ribbon功能区选项卡.495

17.1功能区开发基础.496

17.1.1 Ribbon的特点496

17.1.2功能区的组件图示.496

17.1.3手动定制功能区496

17.1.4认识Ribbon代码编辑器.497

17.1.5获取内置按钮图标.498

17.2 Ribbon定制之语法分析499

17.2.1功能区代码的结构.499

17.2.2显示与隐藏功能区:ribbon.501

17.2.3隐藏选项卡:tab.501

17.2.4创建新选项卡:tab502

17.2.5创建新组:group.503

17.2.6创建对话框启动器:dialogBoxLauncher505

17.2.7在组中添加命令按钮:button507

17.2.8创建切换按钮:toggleButton509

17.2.9标签与复选框:labelControl/ checkBox . 511

17.2.10在按钮之间添加分隔条:separator512

17.2.11创建弹出式菜单:menu.513

17.2.12创建拆分按钮:splitButton.514

17.2.13创建下拉列表:dropDown516

17.2.14创建编辑框:editBox.517

17.2.15锁定或隐藏内置功能518

17.3使用回调函数强化功能区.519

17.3.1为什么需要使用回调函数.519

17.3.2回调函数详解.520

17.3.3创建13号才能使用的按钮.522

17.3.4创建按下与弹起时自动切换图标的按钮524

17.3.5创建一个能显示图形对象数量的标签.526

17.3.6在功能区中快速查找527

17.3.7在组的标签处显示问候语.529

17.3.8调用大图片创建下拉菜单.531

17.3.9通过复选框控制错误标识的显示状态.534

17.4使用模板536

17.4.1模板的重要性.536

17.4.2模板的使用方法536

17.4.3制作两个模板.537

17.5创建Backstage 视图.540

17.5.1 Backstage 视图与Office按钮540

17.5.2Backstage视图中添加按钮540

17.5.3添加子选项卡、组及命令按钮.542

17.5.4在新选项卡中创建弹出式菜单与说明.544

17.5.5将命令按钮显示在两列中.547

17.5.6创建导航菜单.550

17.5.7隐藏Backstage 视图中的所有按钮.552

17.6课后思考553

18 开发通用插件.555

18.1插件的分类.556

18.1.1什么是插件.556

18.1.2插件的分类.556

18.1.3开发插件和编写普通代码的分别556

18.2漫谈加载宏.557

18.2.1加载宏工作簿的特点557

18.2.2加载宏管理器.558

18.2.3加载宏的使用方法.558

18.2.4加载宏的安全性559

18.3制作工作表批量重命名插件559

18.3.1开发通用插件的基本步骤559

18.3.2罗列插件需求560

18.3.3设计插件窗体560

18.3.4编写代码562

18.3.5创建菜单与设置快捷键.564

18.3.6另存为加载宏565

18.3.7安装并测试功能566

18.4课后思考567

19 保护代码.569

19.1关于安全性.570

19.1.1保护代码的必要性.570

19.1.2保护代码的常用手法570

19.1.3 VB6.0封装VBA代码的基本步骤570

19.2封装“批量重命名”插件571

19.2.1安装VB 6.0企业版571

19.2.2创建VB工程571

19.2.3添加引用及完善外接程序描述.572

19.2.4导入窗体573

19.2.5声明应用程序接口及变量573

19.2.6编写菜单与功能区.574

19.2.7修改VBA代码576

19.2.8生成DLL文件.577

19.2.9安装与卸载插件577

19.2.10测试插件功能577

19.2.11 VBVBA代码的差异分析.578

19.3封装函数579

19.3.1封装函数的两种方式579

19.3.2Excel中编写并测试函数.580

19.3.3创建VB工程580

19.3.4添加引用及注释580

19.3.5粘贴VBA代码并修改代码581

19.3.6生成DLL文件.581

19.3.7安装与卸载插件581

19.3.8测试插件功能582

19.4课后思考582

20 制作安装程序.584

20.1准备工作585

20.1.1VBA代码转换成安装程序的必要性585

20.1.2制作安装程序的常用软件585

20.1.3 Inno Setup简介585

20.1.4安装Inno Setup585

20.2设计“工作表批量命名”安装程序.585

20.2.1准备工作585

20.2.2通过脚本向导生成脚本代码586

20.2.3修改代码并编译成安装文件589

20.2.4安装软件589

20.2.5脚本代码含义解释.590

20.3设计更人性化的安装程序.591

20.3.1提示关闭Excel再安装.591

20.3.2添加安装密码.592

20.3.3设计可选安装项593

20.4课后思考594

21 VBA代码也能撤销.596

21.1突破撤销限制597

21.1.1 VBA命令的撤销限制.597

21.1.2设计可以撤销的Sub过程的思路与步骤.597

21.1.3什么情况适合使用Application.OnUndo方法599

21.1.4 Application.OnRepeat方法重复执行命令.599

21.2可撤销的“简体转繁体”插件.600

21.2.1编写“简体转繁体”代码.600

21.2.2将普通过程加工成可撤销的插件600

21.3课后思考603

22 开发制作工资条工具.605

22.1认识工资条.606

22.1.1工资条的形式.606

22.1.2工资条工具的基本需求.606

22.2编写工资条程序606

22.2.1编写代码606

22.2.2测试代码607

22.3完善工资条工具608

22.3.1将工资条程序转换成工具基本思路608

22.3.2完善工资条工具608

22.4课后思考612

 

第四篇 疑难解答篇

23 365个常见问题答疑.614

附录A见随书光盘

精彩节摘

我的自学之路

我是罗刚君,来自四川的一个小县城——资中县。

我是个地道的三无人员——无高等学历(初中毕业)、无突出特长、无显赫背景,所以19961月,当时才19岁的我就踏上了打工之路。

错失机遇

在打工生涯的前几年,一直在东莞市裕元鞋厂流水线上工作,无缘接触电脑,甚至曾有一段时间在心理上抵触电脑。

记得大概是1998 年时,东莞市高 镇开始刮起了电脑风潮,满街的打字班、Office初级班、高级文秘班、绘图班等在大量招收学员。当时流水线上有较多同事都陆续报名打字班和Office初级班,少数同事开始学习CAD绘图和VB编 程等课程。曾有一位已经学了两个月的同事劝我也报名学习电脑,还说电脑的熟练程度会大大影响未来找工作的成功率,而且对于我们这种一心想摆脱流水线的人群 而言,电脑才是最好的出路。可惜当时我并没有接受同事的劝导,只抛下一句“你已经学完了,现在不也和我一样在流水线工作吗?”

现在想来,悔之晚矣!若当初听了同事的话,早8年学习Office软件,则早日实现个人目标。

1996年到2004年年初的8年间,我都在鞋厂的流水线和鞋材厂生产车间的注塑机上渡过,一直无法实现转入文职的愿望。

艰辛的 DOS 征程

在裕元鞋厂工作期间,厂里为约10万员工提供免费的厂报和杂志,厂报编辑部会每月向厂里的员工征稿。

工厂从1998年开始由12小时工作制转为8小 时工作制,所以在流水线工作的我也每天拥有了大量的闲暇时间。为了消除无聊、打发时间,我每月向厂报投稿,陆续地发表了近百篇文稿,包括小小说、评论和诗 歌等。因此,后来厂里的多个办公室内招文员时,我也获得了一些面试的机会,可惜的是每次都被最后一关挡下来——电脑打字测试。

碰壁多次后,我开始下定决心要恶补电脑技术。

当时的我手中并没有闲钱购书学习,月薪650元,需要邮寄600元回家,手里的50元包含了整月的一切开支。所以只能下班后去书店翻阅电脑书籍,将自认为有用的和感兴趣的知识点记在脑中,然后回到宣明会提供的免费电脑室上机练习。

最初,我最有兴趣的是DOS命令。当时电脑室并没有网络,更谈不上百度和Google了,所以常去书店翻看DOS教科书,记下三句命令后回到宣明会的电脑室练习。当掌握好当前三句命令后再去书店查阅同一本书,记下另三句命令后回到电脑室继续练习……如此周而复始。

由于电脑室每天开放的时间和机台都极其有限,而排队上机者众多,所以会经常记下了代码却没有电脑练习,导致简单的几十句DOS代码我用了一个多月的时间才掌握好。若在如今这种网络四通八达的环境下,可能只需几个小时就可以全部掌握这些命令的基本语法,熟悉它们的功能。

坎坷购机自学路

在学会DOS之后,我对电脑开始有了浓厚的兴趣,于是在工厂附近的“恒辉电脑培训班”报名学习Word,这是基于投稿写作的需要。

当时虽然报了Word班,其实没有上过一节Word课,每天下班后都去培训班一个人对着书和电脑自学,当时的李枝花老师曾经笑侃:“所有学生都像你这种方式学习,我开班就轻松多了”。其实我现在也庆幸当时养成了自学的习惯,虽然学习进度偏慢,但学得比较全面、系统,而且记忆很深刻。

在自学Word期间,可以听到旁边的Excel班老师的讲课内容。当时老师每天在讲的内容都与股票数据相关,设置单元格格式、排序、筛选、函数、数据透视表等无一不是在操作股票数据,所以我误以为Excel就是炒股票之用,毅然决定20天自学完Word后不再继续学习Excel。现在想来,培训班的Excel教材很可能是一位股票爱好者所写,所以书中的一切数据都与股票相关,不知道除我之外,是否还有其他人也被误导?

离开“恒辉电脑培训班”后,我于2000年底购买了属于自己的第一台电脑,在出租屋里自学电脑知识。当时是漫无目的地学习,今天Photoshop,明天AutoCAD,后天又PowerPoint。意外的是电脑才买了不到七天,电脑、手机都被人取走,所以第一轮电脑学习道路就此终结。

虽然该机只是一台二手电脑,但却耗费了我足足半年的积蓄,无比伤感。

同时也感叹一下东莞市的治安环境,无以言表……

经过以上事件后,我只能再次回到宣明会的免费电脑室学习,期间也曾报了打字班学习五笔输入法。由于电脑培训是员工福利,所以听课和上机练习都免费。可惜的是上完10节课后,居然一分钟只能打8个字,还不能保证准确率在90%以上。

打 字班毕业后,我在书店无意间发现《电脑报》中的内容很有趣,书中关于安装系统、解决疑难杂症的问答深深触动了我,所以我又开始在宣明会的免费电脑室里自学 安装系统、维护系统、修改注册表和了解控制面板设置等相关知识。由于电脑室中的电脑皆装有自动还原软件,所以学习期间不曾让电脑留下后遗症。

半年后,我攒够了一台电脑的钱,又再次购买了一台二手电脑,打算进修一下Photoshop

AutoCAD。为了安全起见,我不得不搬到一栋新楼,从一位湖南的二手房东那里租得一个小单间,打算学成后可以换个工作,脱离流水线生活。

很悲剧的是,老天不曾降我大任,却一直不断地苦我心志、行拂乱我所为——在出租屋里自学仅半个月,电脑再次被取。经过了解,二手房东于半夜光景取了整栋楼的所有晚班住户,十几家无一例外,房东用两个卡车拖走了取的物品,当然其中也包括我的电脑。

警察登记了所有人的失窃物品,只留下一句:“破案后会通知你们。”直到5年后我离开东莞去中山市工作时也没有得到任何通知。再次感叹一下东莞的治安……

转机

2004年后,经“熟人”介绍,我进了一家鞋材厂工作(给了1000多元感谢费),由于前面所言的“三无”状态仍未改善,所以到新厂后仍然只能在车间里做一名普通员工,开了一年注塑机,台湾人也称之为啤机。

由于在新厂里继续发表一些评论文章,且被厂长和主任所留意到,所以当办公室里需要一个厂长助理时,我获得了一个面试机会。

不过,和前面几次面试并没有分别,被最后一关挡在门外——当时厂长拿出一张车间每天使用的生产报表,让我在Excel中设计同等效果的表格。这本是极简单的工作,仅仅将纸上的文字录入到表格中,然后对表格添加边框、合并单元格之类,但是由于没有学过Excel软件,所以10分钟后也没完成任务。这次面试以失败告终。

不过,一个月后迎来了转机,办公室一直找不到合适的人选,厂长只能勉为其难地接受了我这个半罐水,让我一边工作一边学习。

在那段工作期间,我的职务是NOS小组成员,类似于ISO小组的工作。工作中用得最多的软件是PowerPoint,通过它制作会议报告,对Excel并没有涉猎太多。不过在业余时间我开始自学电脑硬件维修、自学FrontPage软件设计网站、自学远程控制以及动画相册等软件。

这些自学成果对当时的工作帮助不大,但丰富了生活和兴趣,同时为日后自学VBA和网络管理工作积累了很好的经验。

起程

2006年,我转入了广东省中山市的一家鞋材厂工作,在新厂中主持全厂的稽核、盘点、培训等工作。由于工作中需要大量使用Excel,所以在这段时间开始自学Excel,包括制表的基础知识、函数与公式、图表等技术。

20063月,办公室电脑终于可以登录外部网了,眼界顿时开阔不少,不再总是形单影只地独立学习,可以和外界的网友交流,学习进度相比以前一日千里。

200634日,第一次登录Excelhome论坛,找到了志同道合的网友们一同探讨Excel技术。

200636日,又注册了另一个当时国内最大的Office论坛——OfficeFans

在以上两个论坛中学会了Excel函数和图表,2006年底荣升OfficeFans论坛之图表区版主,20074月受ExcelHome论坛的邀请,成为ExcelHome论坛版主。以后的几年中,又陆续成为ExcelTip等其他五、六个论坛的版主。

至此,终于开始正式踏足Excel领域。

补充:在中山市工作期间,再次买了一台二手电脑,用于学习Excel。此电脑对我助益较大,为我以后的道路奠定了良好基础。可惜的是在中山市工作两年半后辗转回到东莞市另一家鞋材厂做网络管理,电脑在出租屋里再次被取……

请问东莞市的公安局长们,东莞的治安问题比国足夺冠难多少?

自从2006年开始学习VBA后,VBA的趣味性吸引了我,以前下班后偶尔看小说、看电影、下象棋、投稿写作的爱好全都转移到了VBA之上。

前半年,我的业余时间一半用来学习函数,另一半用来学习VBA,之后则连续三个月专攻Excel VBA,几乎每天加班自学,把Excel VBA的帮助翻了个遍。

2006年,我还没有自己的QQ号,也不会使用QQ。现在想想,当时没有QQ对我学习VBA而言既有利又有弊,益处是没有QQ工具,就可以专心致志地学习VBA,不被外界打扰,更不会因QQ闲聊耽误学习进度和影响学习兴趣;弊处是没有QQ好友与我交流,无法获得需要的学习资料,影响学习进度。

Excel VBA的学习过程中,我开发了不少小型插件,发表在各大Office论坛中,逐渐扩大了个人影响力。

2007年年初,有电子工业出版社的编辑找我合作出书,经过近两个月的交流,未能达成共识,最终放弃。

也是在这一年,我学会了使用QQ软件,通过QQ认识了北京的一位在校大学生,她在VBA方面有所建树,与我常有技术交流,同时也感谢她将我介绍给了电子工业出版社的另一位编辑。

20077月左右,我开始和电子工业出版社合作出版我的第一本VBA著作《Excel VBA范例大全》。经过3个月加班加点的努力写作,连续90天没有休息一天,每天工作到23:00左右,终于在200710月完成了86万字、共585页的处女作。

此书经过编辑、排版、纠错、印刷等后期加工,于20083月正式上市。

从爱好到事业

学习VBA,是缘于本人对VBA的兴趣和爱好,工作中暂时不曾用到过。

不过当完成VBA处女作,对VBA的掌握更牢固、应用更熟练后,VBA的功效就自然地呈现出来。这也是我曾经对VBA学员讲过的——别问有没有用,你有几分耕耘?

很多知识皆如此,学得够好时它才能发挥效用,在学成之前,它确实可有可无。

例如,作为英语专业的学生翻译10句错3句,那么想靠英语谋生简直是异想天开,但若翻译10句正确10句时,英语将是你的护身符,同时也是找工作的敲门砖。

当完成第一部VBA著作后,爱好仍然是爱好,但同时也上升为事业,开始通过VBA养家,甚至几年后通过稿费在武汉买了一套住房。

2007年开始写作,至今已出版9.1Excel图书,包括:

1.Excel VBA范例大全》

2.Excel 2007常见技法与行业应用实例精讲》

3.Excel 2007 VBA开发技术大全》

4.Excel 2007函数案例速查宝典》

5.Excel VBA程序开发自学宝典》

6.Excel 2010 VBA编程与实践》

7.Excel 2010函数与图表速查手册》

8.Excel VBA程序开发自学宝典(第2版)》

9.Excel函数、图表与透视表从入门到精通》

10.《来吧,带你玩转Excel VBA

其中《Excel 2007 VBA开发技术大全》原本是两个网友的作品,由于她们时间不够,所以我友情客串一下,帮忙完成了该书最后一章,近50页。因此,只能算作我的0.1部图书。

VBA 有用吗

VBA是否有用?其优势如何体现?

这两个问题反复出现在论坛和QQ群中。

我想第一个问题已不需要回答,只要你看了前面的叙述,那么答案已经在你心中。

VBA的优势如何体现?这因人而异,就完全取决于用户的掌握程度和使用方式。对我而言,有太多太多的现实意义,除了前面说的写书外,还通过VBA开发商业插件,以及通过VBA大大简化工作。

说说我的两次亲身经历吧。

经历一是“VBA实现无人值守工作”。

大约六年前,我曾做过半年报表汇总工作,每天将前一天的品检部、生产部和生管部报表整理到一个工作簿中,然后分组统计,并生成图表和透视表发送给经理。以前的同事每天让三个部门的文员将报表发到邮箱中,然后打开三份报表并整理数据、生成总表,每天需要0.51小时。我接手该工作后,采用以下方式处理。

1  在服务器的共享磁盘中创建一个名为“明细”的文件夹,让三个部门的同事将每天完工的明细报表都按今天的日期命名并保存到该文件夹中。

2  在本地磁盘创建一个文件夹“模板”,其中存放一个用于汇总的模板工作簿,工作簿中采用VBA代码自动打开远程共享的明细文件,并按设定的流程全自动汇总报表,当“模板”文件夹中生成汇总表后将汇总结果自动复制一份到服务器中名为“总表”的共享文件夹中,文件以当天的日期命名。下图即为文件汇总流程与文件夹之间的关系示意图

3  通知经理从服务器共享文件夹“汇总表”中提取今日汇总的报表。

由于汇总表中的VBA代码设置为打开报表时自动执行,它会到指定的文件夹中检查是否存在需要汇总的三份报表,以日期文件名作为判断标准,如果不存在则产生提示框,然后自动关闭文件;

如果文件存在则自动汇总报表数据,完成后在本机保存一份汇总表,同时另存一份到共享文件夹“总表”中,一切工作全自动进行,需要执行的只有一步——双击打开本机中的总表模板。换言之,以往近1小时的工作现在只需要双击工作簿就完成了。

后来的某天,我因某些原因睡过了头,第二天早上9点多尚未起床,结果经理9:00开会时需要报表。当接通经理的电话后,我在电话中告知经理汇总表已经完成,自己有事在外,并请经理打开我的电脑,从D盘中打开汇总表模板查看即可。其实当经理打开该模板时,代码才开始运行,数秒钟后自动汇总完毕,并生成一个汇总表。

换言之,某些工作借助VBA可以实现无人值守,让代码全自动执行,从而解脱双手。

经历二是“3句代码让3小时工作变成3秒”。

有一次我去分公司处理电脑故障,看到办公室有个同事在制作一个生产报表。

下图是公司的产值表,表中需要计算的是每个员工生产的所有产品的数量乘以单价得到的产值。

要完成需求有三个难点:

l  每个员工生产的产品种类的数量不一致

l  产品数量和单价栏中包括单位名称且单位不一致

l  存放结果的单元格需要合并从而无法填充公式

我看到该同事在计算产值表时按上图中F列所示方式设计公式,不到5000行的数据每天需要花费35小时才能完成,而且计算结果的准确度也没有保障。

所以我为此报表写了一个自定义函数,只用了三句代码。完整代码如下:

Function Cal(rng1 As Range, rng2 As Range)

For i = 1 To Application.ThisCell.MergeArea.Rows.Count

Cal = Cal + Val(rng1.Offset(i - 1)) * Val(rng2.Offset(i - 1))

Next

End Function

 

调用代码的方法是选择F列第2行到工作表最后一个非空行的整个区域,然后在编辑栏中录入以下公式:

=cal(D2,E2)  

当按下组合键【Ctrl+Enter】后,选区中将自动填充所有公式。计算结果如下图所示。 

整个工作仅需3秒即可完成,而且计算结果100%准确。

本书特点

由于除了五笔打字以外,我的一切电脑知识都是自学而来,因此本书也以经典自学教材为最高目标,期望读者借助本书可以自学VBA,通过VBA提升工作效率。因此本书为了读者自学方便,在诸多细节处提供了人性化的提示和标识,尽可能地提升读者的阅读体验。

本书人性化细节主要体现在以下几个方面。

1  本书每一章的楔子都提供了一个虚拟人物罗斯的个人经历,通过小故事引出VBA正文描述。

全书共包含23个不同情节的小故事。

全书23章的内容从入门到中高级层层递进,而故事中的主人公罗斯的VBA技术水准也相应地逐步提升。不过在不同阶段会遇到不同的问题,书中一一给出相应的解决方案。在解决罗斯的疑难的同时,也帮助读者提高VBA技术。

本书通过23个小故事展示了罗斯的VBA技术成长历程,读者也可以跟随罗斯的脚步从入门到高级进修,在解决工作疑难的同时完善自己的VBA技术。

在每一个章节中,主人公罗斯都遇到了不同的问题,随后的正文则刚好解决该问题。事实上,

不少读者都是带着疑问学习VBA,在学习之前可以先阅读章节前的小故事,看看你和罗斯是否都走过了相同的道路。

2  本书讲解VBA语句的语法时,比其他书更注重细节标示。以往的简单一句语法说明“If

condition Then statements Else elsestatements”在本书中将填加语法说明及图示。 

当然,除了以上语法说明和图示外,还提供了更详细的文字注解和案例演示。

返回TrueFalse的条件语句

conditionTrue时执行此语句

ConditionFalse时执行此语句

3  为读者提供查询帮助的关键字提示。

新建工作表时使用Add即可,然而在帮助中搜索“Add”时很难找到想要的结果。而本书会在书中第一次出现新建工作表的案例时提供说明“查询帮助的关键字:Worksheets.Add方法”,读者只要按照提示查询帮助,即可以瞬间定位目标,提升学习效率。

4  书中的每个Sub过程和Function过程都提供了放置位置提示。因为根据我近6年做VBA图书售后服务的经验,发现很多VBA初学者将代码放错位置从而导致执行代码后无法获得正确结果,所以本书对所有完整的过程都标注代码放置位置。

5  随书光盘中提供了书中每个案例的案例文件,而且在每个案例文件的模块顶部提供代码思路分析,从而加快读者的理解、提升学习效率。

6  书中每句代码都提供了含义注释,而且为了帮助读者快速区分代码与代码含义注释,本书采用双色印刷,将代码与代码注释印刷为不同颜色。

7  为了给读者创建一个良好的学习环境,本书提供两个交流平台,包括售后服务论坛,网址如下:

http://www.exceltip.net/

 

其次提供售后服务QQ群,光盘中的每一个案例文件都标注了QQ群号。

衷心希望每一位读者都能通过本书全方位地掌握VBA,将VBA技术转换成生产力,同时也能通过VBA产生经济效益。

作者:罗刚君

2013-6

作者简介

罗刚君是ExcelTip技巧网等近10个办公软件论坛的版主,有着丰富的Office应用经验和图书写作经验。著有《Excel VBA程序开发自学宝典》、《Excel 2010 VBA编程与实践》、《Excel 2010函数与图表速查手册》和《Excel函数、图表与透视表从入门到精通》等10Excel图书,创建了数十个QQ群作为图书的售后服务群,读者可以随时与作者在线联系。

杨嘉恺是ExcelTip论坛的版主,对VBA读取网页数据和VBA操作数据库有着相当丰富的实战经验,读者可以随时通过论坛或者QQ群与作者交流。

前言

《来吧,带你玩转Excel VBA》是Excel VBA从入门到提高的通用教材。

本书采用Excel 2010的界面编写,除第17章制作功能区菜单外,其他内容皆通用于  Excel 2003Excel 2007Excel 2010Excel 2013

本书内容

本书主要分为操作自动化引言篇、入门篇、进阶篇和疑难解答篇,覆盖从入门到提高的所有内容,以满足不同层次的读者需求。

其中操作自动化引言篇简述了操作自动化的需求与方式,藉此引出VBA入门篇。

VBA入门篇包含第2章到第13章,主要介绍了与VBA相关的基本概念、常用语句的语法、错误处理技巧、使用数组、开发自定义函数和设计窗体等内容。

进阶篇包含第14章到第22章,主要介绍了类的应用、读取网页数据、制作菜单、开发插件、保护代码、制作安装程序,及开发具有撤销功能的插件等内容。

疑难解答篇即本书第23章,该章提供了365个疑难问答,帮助读者解决日常工作中的一些困惑。

详细安排如下。

1 章到第 3 章:解决一些VBA初学者们所关心的问题,包括如何录制宏、如何调用宏、认识代码窗口、如何手工编号代码、保存代码,以及了解什么样的代码适宜放在何处。

4 章和第 5 章:介绍VBA相关的基本概念,包括对象、属性、方法和事件,及认识数据类型与常量。

6章:教学条件语句和循环语句,这两种语句不可以通过录制宏来学习,但却是VBA中最重要的两类语句,所以本章耗费了较大的篇幅来逐一介绍所有条件语句和循环语句的语法,并通过大量的案例展示其应用思路。

7 章和第 8 章:主要通过案例强化前6章的知识应用,加深记忆和理解。

9 章和第 10 章:介绍对代码纠错的技术和数组应用。通过纠错语句可以让代码更完善,能应付更复杂的工作需求,借用数组则可以对代码加速,提升工作效率。

11章:介绍处理重复值的5种技术,其中最强大的是字典Dictionary应用。

12章:展示开发自定义函数的思路,并提供了7个自定义函数的开发步骤,有单个参数的函数、多个参数的函数以及不确定个数的参数的函数。

13章:讲述窗体与控件,学会本章知识点后,可以设计实用的窗体界面。

14 章和第 15 章:分别介绍类模块应用和读取网页数据,这属于VBA的高级应用。

16 章到第 18 章:主要介绍如何开发插件,包括为插件设计传统菜单或者功能区选项卡中的菜单。

19 章到第 21 章:主要介绍如何对插件进行再加工,包括提升插件的安全性、易用性和专业性,并把插件转换成专业工具,可以双击启动安装向导,且执行代码后可以撤消,使插件更加人性化。

22章:通过开发“制作工资条工具”的插件展示VBA知识点的综合应用。

23章:包含365个疑难问答,拓展读者的知识面。书中仅包含问题,答案存放在随书光盘中。

另外,随书光盘还提供了10个附录,包含内置图形对象的类型名称与含义、各种事件、窗体与控件的属性一览等。

读者对象

本书适合两类人群,一类是完全不懂Excel VBA,但需要通过VBA解决工作中的疑难者;另一类是有VBA基础,但需要进修的VBA高级应用者。

本书前13章主要讲述VBA的基本概念和常用语句的语法,同时还提供了关于单元格、工作表、工作簿和图形对象的案例应用,及工作表事件、工作簿事件和应用程序级事件的案例应用。最后还展示了利用防错语句提升代码的通用性、使用数组提升程序的执行效率,及开发自定义函数和窗体的技术。

13章的内容足以为每一位读者打下坚实的VBA基础。

从第14章开始属于VBA的高级应用,对于有VBA基础者可以直接进修此部分内容。通过第14章到第22章的教学,可以掌握制作专业插件与安装程序的思路。

本书特点

本书内容全面、讲解细致,同时在诸多细节方面也尽显人性化,注重读者的阅读体验。

?提供案例文件

由于VBA图书的案例较多,部分案例的代码较长,输入代码时极有可能输错或者输漏,从而导致代码不能正常执行。为了避免此问题,本书提供随书光盘一张,光盘中的文件按章节顺序命名,其中存放了书中所用到的所有案例文件,读者可以直接使用文件中的代码和数据,避免手工输入错误。

?代码思路分析

随书光盘的每个案例文件中都提供了代码思路分析,从而帮助读者快速读懂代码。

代码思路分析在每个模块的顶部,读者可以先查看思路分析再阅读代码。

?代码注释

书中以及光盘中每句代码皆提供代码的含义注释,力求清晰地传达出代码的功能与写作思路,帮助读者更快地掌握VBA语法。

?双色印刷

本书将VBA代码与代码的注释采用双色印刷,避免阅读和输入代码时混淆代码与注释,给读者创建一个绝佳的体验。

?提供查询帮助的关键字

当书中出现新的VBA语句时,为了便于读者快速掌握该语句的功能和语法,除了介绍含义解释外,还提供了在帮助中查询该语句的关键字,避免初学者因掌握不好关键字而查询失败。

例如插入工作表采用Add方法,但是在帮助中查询字键字“Add”很难找到关于插入工作表的帮助信息。对此,书中会标注“查询帮助的关键字:Worksheets.Add方法”,从而使读者可以快速且精确的帮到帮助信息。

?提示代码放置位置

书中对每一段完整的过程代码都会提示放置位置,避免读者将代码放错位置导致无法实现书中相同的效果。

售后服务

为了给读者创建一个良好的学习环境,提升阅读体验和学习效率,本书提供售后服务论坛和QQ群。读者有任何关于本书的疑问皆可在论坛求助,也可以将自己的心得在论坛发表,还可以将发现的错别字通过论坛反馈给作者,从而使本书重印时改进。

售后服务论坛地址如下:

http://www.exceltip.net/  

售后服务QQ群群号在随书光盘中,每一个案例文件中都提供群号。

作者介绍

本书由黄朝阳策划,由罗刚君和杨嘉凯编著。其中第15章由杨嘉恺撰写,其余章节由罗刚君撰写。另外,参与编写工作的还有连平全、汪德成、郑玖虎、郑建、王转秀、熊忠芳、王后松、黄梅、黄庆仔、曾小艳、秦伟和景刚,在此对他们表示感谢。

罗刚君是ExcelTip技巧网等近10个办公软件论坛的版主,有着丰富的Office应用经验和图书写作经验。著有《Excel VBA程序开发自学宝典》、《Excel 2010 VBA编程与实践》、《Excel 2010函数与图表速查手册》和《Excel函数、图表与透视表从入门到精通》等10Excel图书,创建了数十个QQ群作为图书的售后服务群,读者可以随时与作者在线联系。

杨嘉恺是ExcelTip论坛的版主,对VBA读取网页数据和VBA操作数据库有着相当丰富的实战经验,读者可以随时通过论坛或者QQ群与作者交流。

本书作者

2013-6

2013-6

你可能感兴趣的:(Excel,VBA)