ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 9523|回复: 12

我的VBA小屋

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-5-9 12:01 | 显示全部楼层 |阅读模式
本帖最后由 Plum125 于 2011-10-23 21:14 编辑

一 什么是vba(visual basic for application)
二,Vba发展史
60年代中期出现了basic编程语言
1991年微软发布了vb for windows
1993 vba 首次应用于excel5/project4
Excel5之前的版本中可以使用XLM宏,后来的版本中保留了宏表功能
Vba可以集成到其他商用软件中:autocad,wordperfect等
Vba全称是visual basic for application
Vba是microsoft visual basic 的应用程序版本
Vba使office形成了独立的编程环境,vba和vb的区别之一就是vba代码的执行先通过excel传递给操作系统,再给cpu

三、Vba用途(非常强大)
Vba应用场景:
1、自动执行重复的操作:比如格式化月报表(字体、边框、背景等)
2、进行复杂的数据分析对比(中间有编程过程)
3、生成报表和图表
4、个性化用户界面(可以自定义工具栏,定置操作界面)
5、Office组件的协同工作(直接在excel中用vba控制ppt/outlook/word)
6、Excel二次开发(很多市面的商用程序都用vba开发的)
四Vba作品展示
彭希仁版主作品:excel常用工具6.0版:运行工具后,工具栏增加了菜单,里面很多功能已经写好了,大幅度提高工作效率
徒然客版主作品:超级宏工具,运行后工具栏下方出现一个很美观的工具栏,集成了很多常用工具。完全免费的优秀范例。
Samesa多级菜单、甚至还有完整的应用软件系统,如通州市自来水公司-月末处理系统,excel的系统菜单不复存在,取而代之的是开发者定置的菜单和工具。
除了工作,vba还可以应用于娱乐,比如彭希仁的中国象棋,清风_II版主的excel连连看1.0

五、Visual basic编辑器
1、什么是visual basic编辑器:
Visual basiceditor编辑器通常简称为vbe
2、Vbe的用途:
输入和修改代码
运行和调试代码
3、如何打开vbe窗口?
        Excel菜单:工具-宏-visual basic编辑器
        快捷键alt+f11
        
Vbe功能窗口介绍:
1、如何显示相关功能窗口
Vbe的“视图”菜单中选中相关功能窗口
2、工程资源管理器
快捷键ctrl-r
Vbe中的“资源浏览器”
类似于目录树结构
3、代码窗口
先设置:工具-选项-编辑器(勾选自动语法检测、自动列出成员、自动显示快速信息、自动显示数据提示、自动缩进;窗口设置的3个选项全部勾选)
快捷键<F7>
输入时不必刻意大小写,vba会自动完成与提示
自动缩进格式可以使结构更清晰,方便检查
注释用’开始,可以从某行的某个位置开始,也可以是整行。为代码添加注释是个很好的习惯,添加、修改、升级时很重要。
六vba编程工具
vbe窗口鼠标滚屏工具-freewheel v2.4
代码美化工具-smartindent v3.5

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-17 23:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

关于“合并居中”与“跨列居中”的异同

http://t.excelhome.net/viewthrea ... amp;page=1#pid46517
“合并居中”和“跨列居中”的比较:
1、“合并居中”与“跨列居中”的相同点,就是最后的结果为居中显示,并且仅从外观上看好象都是跨几列进行了居中的显示。但它们却有着本质上的区别。
2、“合并居中”是对几个单元格进行操作后的结果,“居中”是水平对齐方式中的一种,而“合并居中”是进行所选单元格合并后再进行居中显示,应该说“合并居中”不是水平对齐方式中的一种。
3、而“跨列居中”在显示外观上跟“合并居中”有相似的地方,但它跟“居中”、“靠左”、“靠右”等一样是水平对齐方式中的一种。并且在进行该对齐设置后,所选中中的单元格也没有进行合并,他们还可以进行单独的操作。
居中.gif

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-17 23:15 | 显示全部楼层

如何找到录制宏时的“相对引用”

就在自定义工具栏的设置里面,勾选复选框。

视图-工具栏-自定义-工具栏-“停止录制”

[ 本帖最后由 Plum125 于 2010-5-18 16:22 编辑 ]
引用.png
停止录制.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-18 15:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

录制宏

宏,其实就是一组指令集,通过执行类似批处理的一组命令,来完成某种功能。
主要功能为:
1)将日常在EXCEL中的重复工作自动化;
2)能够处理在不同工作簿执行的重复步骤,比如将不同工作簿的表格设定为相同格式等(即循环操作);

    用宏来执行重复的操作,即可以避免因手工操作时的失误而需重新修改的麻烦,也可以提高工作效率。还有就是可以将一些日常经常使用的,需要点击多次才能生成的报表的操作录制成宏,并添加在工作栏上。
    录制宏有一定的局限性,比如不能生成执行循环(也就是重复语句)、给变量赋值、执行条件语句、显示对话框等代码。这些通过后期编辑修改可以解决,不过需要一定的vba基础。

一、宏安全级:
“宏”可能包含病毒,“宏安全级”是EXCEL自带的宏保护功能。
用户可以设置不同的宏保护级别来实现是否允许在EXCEL文件里运行VBA程序。只有启用宏才能运行EXCEL里的VBA程序。
修改宏安全级(可以在“宏安全性”对话框的“安全级”选项卡里设置或修改宏安全级)
修改宏安全级的三种方法:
1、工具-宏-安全性
2、工具-选项-安全性-宏安全性;
3、工具栏空白处右击,出现快捷菜单,选择“VISUAL BASIC”,在“VISUAL BASIC”菜单中点击“安全性(S)…”按钮。
二、录制宏“宏”使用VBA代码记录下来的一系列操作步骤的组合,可以使用录制宏功能,把操作步骤录制下来,执行宏,可以把宏记录下的操作依次执行一遍,可以使用“宏”简单完成需要重复执行多次的相同操作。
三、执行录制宏
执行录制宏的三种方法:
1、直接运行:工具-宏,选中需要执行的宏,点执行;
2、快捷键执行:可以为宏定义一个快捷键,定义快捷可以在录制宏前定义,也可以在完成宏录制后定义。
3、窗体控件(图片、图形)执行:工具栏空白处右击,出现快捷菜单,选择窗体,添加控件;在工作表插入图片然后指定宏。

需要注意的是绝对引用和相对引用在录制宏中的区别
绝对引用:运行VBA程序时,代码操作的单元格区域不会随着当前活动单元格的改变而改变;
相对引用:运行VBA程序时,代码操作的单元格区域会随着当前活动单元格的改变而改变;
这是要根据实际需要进行选择的。至于那个切换按钮,如果不自动弹出来的话,需要从工具选项栏里面调出来,勾选“停止录制”复选框即可。

[ 本帖最后由 Plum125 于 2010-5-18 16:21 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-5-20 16:55 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-5-21 06:58 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-22 13:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

从宏开始学习vba

从宏开始学习vba
老师:三戒

录制宏后,由于一些非相关操作也会被写在代码里面,需要简单修改,删除冗余代码,提高运行效率。

回顾框架:
3.1什么是宏
宏录制器好比就是个录像机,它具备有录像机的录制和播放的功能,当然录像机录制的是视频资料,而宏录制器录制的则是操作命令集,即宏。
引申到Excel中,当你打开宏的录制功能时,宏录制器会想录像机一样将你在Excel中的大多数操作进行录制,并且可对这些录制内容(即代码)进行回放和编辑。

3.2实例演示宏录制,执行(回访)的过程
通过宏的录制,批量设置12个月的工资明细表,通过with…end with对代码的修改,把属性统一设置,再利用for each…next对代码加入循环运行。

录制宏有三方面的局限性:
1会出错,不得不修改;
2有多余的语句,对需要完成的工作没有任何帮助,需要删除(下划线、空心字体、上标、下标等)
3、宏不会判断、循环,加入for each。。。next等完善代码结构。

3.3介绍一个批量打印文档的宏
http://club.excelhome.net/thread-276192-1-1.html
感觉三戒老师讲课虽然声音有点沙哑,但每句话讲的都很认真,正如其签名:老老实实做人,踏踏实实做学问。我要向老师学习!

根据遇到的问题在论坛搜到好多东东,都好棒:
For Each循环http://club.excelhome.net/viewth ... p;page=2#pid3075268
For Eacn 元素变量 In 对象集合或数组名称
      语句块1
      [Exit For]
      语句块2
next 元素变量


这里的“元素变量”是用来遍历集合或数中中元素的变量,它从集合或数组的第一个元素开始,直到最后一个元素,然后退出循环。

Range属性
http://club.excelhome.net/viewth ... p;page=5#pid2527031
http://club.excelhome.net/viewth ... p;page=1#pid2525016
Range对象是Excel应用程序中最常用的对象,一个Range对象代表一个单元格、一行、一列、包含一个或者更多单元格区域(可以是连续的单元格,也可以是不连续的单元格)中选定的单元格,甚至是多个工作表上的一组单元格,在操作Excel 内的任何区域之前都需要将其表示为一个Range对象,然后使用该Range对象的方法和属性
如:Sheet1.Range("A3:F6, B1:C5").Select

End属性http://club.excelhome.net/viewth ... ;page=16#pid3106368
Range对象有一个End属性,End属性返回的单元格就相当于在源单元格按住Ctrl键+上(或下、左、右)方向键所得到的单元格。它的语句格式简单写为:
  源区域.End(移动方向)
  移动方向可以是:
  xlToLeft :向左移动,相当于在源区域按Ctrl+左方向键。
  xlToRight:向右移动,相当于在源区域按Ctrl+右方向键。
  xlUp:向上移动,相当于在源区域按Ctrl+上方向键。
  xlDown:向下移动,相当于在源区域按Ctrl+下方向键。
http://club.excelhome.net/viewth ... p;page=1#pid1251339
end属性除了同对象本身所处是否连续块有关外,还跟行列的hidden隐藏属性有关,一般来说,就是遇到隐藏行列,end属性均将将其忽略。所以取隐藏对象的end属性时系统会发生错误,从而导致程序中断。
http://club.excelhome.net/viewth ... p;page=1#pid1452752
这个是yanjie版主的方法,目前看不懂,先记下来

单元格格式及边框设置
http://club.excelhome.net/viewth ... p;page=5#pid2526961
http://club.excelhome.net/viewth ... p;page=5#pid2527014
其中各种下划线类型和边框类型的英文需要慢慢熟悉:
.ColorIndex设置颜色
xlColorIndexAutomatic 自动填充
一串串的代码看起来很不入眼,但yuanzhuping版主讲解的相当细,修行在个人了。感觉vba真是需要付诸巨大努力才有所成。

[ 本帖最后由 Plum125 于 2010-5-22 13:12 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-26 19:01 | 显示全部楼层

总结3段代码的编写

注意offset和with的使用
  1. Sub Jianhua()
  2.     With Range("A1:E1")
  3.         .RowHeight = 25
  4.         .HorizontalAlignment = xlCenterAcrossSelection
  5.         .Offset(1).Interior.ColorIndex = 40
  6.         With .Font
  7.             .Name = "隶书"
  8.             .Bold = True
  9.             .Size = 14
  10.         End With
  11.         
  12.         With Range("A2:E27")
  13.             .Borders.LineStyle = xlContinuous
  14.             .HorizontalAlignment = xlCenter
  15.         End With
  16.     End With
  17. End Sub
复制代码
注意循环的3层嵌套,很有层次感,简洁明快
  1. Sub Mywith()
  2.     Dim I As Long
  3.    
  4.     With Range("C3:J9")
  5.         For I = 1 To 56
  6.             With .Cells(I)
  7.                 .Value = I
  8.                 .Interior.ColorIndex = I
  9.             End With
  10.         Next I
  11.     End With
  12. End Sub
复制代码
  1. Sub Mywith1()
  2.     Dim I As Long
  3.    
  4.     With Range("C3:J9")
  5.         For I = 1 To 56
  6.             With .Cells(I).Offset(0)
  7.                 .Value = I                                      ' 设置单元格中的值
  8.                 .Interior.ColorIndex = I                        ' 设置单元格背景色序号
  9.                 .HorizontalAlignment = xlCenter                 ' 设置单元格水平居中
  10.                 .VerticalAlignment = xlCenter                   ' 设置单元格垂直居中
  11.                 With .Font                                      ' 设置字体相关
  12.                     .Name = "宋体"
  13.                     .Size = 12
  14.                 End With
  15.             End With
  16.         Next
  17.         .Borders.LineStyle = xlContinuous
  18.     End With
  19. End Sub
复制代码
核心语句是for each循环和if条件判断
  1. Sub Macro1()
  2.     Dim objSheet    As Worksheet
  3.     Dim I           As Long
  4.    
  5.     For Each objSheet In Sheets
  6.         If Not (objSheet Is ActiveSheet) Then
  7.             Call objSheet.Range("A3:F3").Copy(Range("A3:F3").Offset(I))
  8.             I = I + 1
  9.         End If
  10.     Next objSheet
  11. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-6-1 17:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

SUB过程与程序流程控制语句

SUB过程与程序流程控制语句

使用录制宏的局限性:
录制的宏不能判断和循环,缺乏灵活性;
不具有人机交互能力,即把结果提示,根据用户的选择进行后续的操作,在宏运行中计算机也无法给出必要的提示;
无法显示excel对话框;无法显示和使用用户窗体

第一部分:SUB过程

一、什么是过程:一个过程就是一组完成所需操作的VBA代码的组合。
VBA的过程主要包括“SUB过程”和“FUNCTION过程”两种。
SUB过程不可以返回值,FUNCTION过程可以返回值。

二、声明SUB过程
1、录制的宏就是一个简单的SUB过程,使用录制宏功能只能生成SUB过程的代码。
2、SUB过程的特点:(以“SUB过程名()”开头,以“END SUB”结尾;SUB过程一般保存在模块里;不返回运行结果。)
3、声明SUB过程:
[PUBLIC (PRIVATE)][STATIC]SUB过程名称([参数1,参数2]……)
[语句块]
[EXIT SUB]
[语句块]
END SUB

三、从过程执行另一个过程
1、输入过程名称能以及参数,参数用逗号隔开。
过程名[,参数1,参数2……]
2、在过程名称以及参数前使用CALL关键字,参数用括号括起来,并用逗号隔开。
CALL 过程名[(参数1,参数2,……)]
3、利用APPLICATION对象的RUN方法
APPLICATION.RUN表示过程名的字符串(或字符串变量)[,参数1,参数2,……]

第二部分:判断与循环语句

程序流程控制
1、IF语句
IF 逻辑表达式THEN
语句块1
ELSE 语句块2
END IF

2、SELECT CASE语句
(测试表达式必须为数值表达式或字符串表达式;表达式列表可以是用逗号分开的表达式,也可以使用TO或IS关键字,如 CASE1,2,2,4
CASE 1TO 4
CASE IS <4
CASE语句后面可以多重表达式,各表达式的数据类型可以不相同,它们之间是“逻辑或”的关系,如CASE 1 TO 4,“A”
SELECT CASE测试表达式
CASE 表达式列表1
语句块1
CASE表达式列表2
语句块2
CASE表达式列表3
语句块3
……
CASE 表达式列表N
语句块N
END SELECT

3、FOR循环语句
FOR NEXT 循环语句
FOR 循环变量=初值TO 终值
循环体
[EXIT FOR]
循环体
NEXT [循环变量]

4、DO WHILE循环语句

5、DO UNITIL循环语句

[ 本帖最后由 Plum125 于 2010-6-1 17:43 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-6-1 17:45 | 显示全部楼层

“个人宏工作簿”删除的方法

http://t.excelhome.net/viewthrea ... amp;page=1#pid47560

当你“录制新宏”,保存在“个人宏工作簿”的时候,需要注意的问题:
1. “个人宏工作簿”保存路径:录在“个人宏工作簿”的代码,会放在“系统安装的盘符\Documents and Settings\电脑的用户名\Application Data\Microsoft\Excel\xlstart下的personal.xls隐藏文件里(excel2003),如果你xlstart文件夹下没有这个文件,当你录制的宏保存在“个人宏工作簿”的时候excel会给你在xlstart文件夹下自动创建一个personal.xls文件。
2. “个人宏工作簿”特点:可以在所有打开的工作簿中使用保存在“个人宏工作簿”文件下的宏。
3.如何删除“个人宏工作簿”:找到xlstart文件夹下的personal.xls文件并删除就可以了。
4.找不到personal.xls文件的解决方法:按上面的路径找不到personal.xls文件,你可以双击进入系统安装的盘符(一般为C盘),在C盘下搜索xlstart文件夹,找到后双击进入,就可以找到personal.xls文件了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-4 01:25 , Processed in 0.049604 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表