VBA之宏基本篇共20页文档.docx
- 文档编号:23903999
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:12
- 大小:24.08KB
VBA之宏基本篇共20页文档.docx
《VBA之宏基本篇共20页文档.docx》由会员分享,可在线阅读,更多相关《VBA之宏基本篇共20页文档.docx(12页珍藏版)》请在冰豆网上搜索。
VBA之宏基本篇共20页文档
VBA之宏基本础篇
前面几贴的自定义基本都是Excel的功能,只是可能大家没有仔细总结,后面的自定义就基本是用VBA来完成的。
我曾经说过,在excel的应用中,我还中最喜欢VBA和学习研究VBA,ZSH_000也有一贴VBA的入门贴,那我也来讲讲我心中对VBA的认识。
什么是宏?
宏是VBA语言编出的一段程序,是一系列命令和函数,存储于 Visual Basic 模块中,并且在需要执行该项任务时可随时运行。
什么是VBA?
VBA是Visual Basic for Applications 的简称,Visual Basic(VB)在office的应用版。
VBA是与VB类似或者对大家说可以说是一样的语言,而VB是以易用易学著称!
我以前曾经考过二级的C,后来本来想学C++却因自己一个人学习,倍感困难而放弃。
但从一个偶然的机会发现Office里的VBA起而开始学习VB,但后来大部份都是在VBA里学习,而没有进一步再去,但学习VB的途径会比较多,大家也可能从学习VB开始。
宏有什么用?
如果经常在 Microsoft Excel 中重复某项任务,那么可以用宏自动执行该任务。
这是宏在Excel帮助中的用途,而宏的用处不仅仅在于此。
就象有人说,VB能干什么?
而有人回答,什么都可以!
但个人认为,不一定什么东西非要用VBA,Excel中本身自带的很多功能都能解决很多的问题!
但这些功能也都能通过代码的方式来表达!
怎么开始学习VBA?
这是不少吧友常问的问题之一。
个人认为学习什么东西,最好的开始是兴趣,本贴的创建的原因也在于此。
后面的内容可能大家在工作与生活中都没有什么实际的用处,但我希望后面的内容能引起大家对VBA编程的兴趣。
而开始学习VBA我认为第一步从录制宏开始。
何为录制宏?
录制宏是excel的一个功能,它能将用户的操作转化为代码,这样即使你一点都不懂得编程,也可以通过录制宏来生成一段宏!
这个功能在工具菜单/宏中。
点击录制新宏,在选择保存的地方(个人宏工作簿/当前工作簿或新工作簿),接着只要按我们平时的操作过程操作Excel,完了之后按停止录制宏结束,这样就可以生成一段宏程序。
录制宏的功能有何用?
除了能生成一段宏外,我们还可以将操作的过程序变成宏后,再通过其代码来了解这过程的相关要用到的属性啦,方法啦等,对于初学者,这是一个非常好的自学方法之一。
从哪可以看到宏代码?
宏我们录制好了,那我们从哪里可以看到我们录好的宏的代码呢?
点击工具/宏/VBA编辑器或按Alt+F11,就可以进入VBA编辑器,在里面就可以看到我们录制好的代码。
怎么运行宏?
从工具/宏/宏中,通过选择其中的名称,就可以运行我们的宏了,当然我们也可以在VBA编辑器中运行宏,先将光标移到宏所在的代码中,再点击运行菜单中的运行子过程或窗体,或按工具栏中的相应的按钮,或用快捷键F5,就可以运行子过程了,注意!
!
!
宏对文件的一切操作是不可撤消的,在不了解宏的功能之前,最好的方法是先保存文件(更好就备份一份啦),然后再运行宏,如果发现宏运行后的结果有误,就可以关闭文件且不保存,这样再打开文件就可以还原到运行宏前的状态(注:
宏也可以自行保存文件,这时这个办法就无效了)
VBA之宏操作篇
其实这一篇与上一篇是写给完全不了解VBA的朋友,让他们也可能体会一下之后的功能,但!
这个贴子的内容,我在上篇已说过,目的是让吧友们对VBA产生兴趣而不是教大家从零开始!
怎么获得帮助?
还记得第一贴中我的见意了吗?
现在就要用到VBA的帮助了!
在VBA编辑器中按F1即可调出VBA的帮助,如果大家有兴趣细细地看上一次(全部哦!
),那你一定会从中收获不少的。
如果更快地获得帮助,找到帮助的内容呢?
一个当然就是在索引与应答向导里寻找,另一个就是先选择代码中的词,再按F1即可。
第一个宏!
上贴已介绍大家如何利用录制宏生成我们的宏代码,而这一贴,我来介绍如何利用VBA编辑器来创建一个宏!
学过编程的朋友都知道有名的Hello!
World!
的程序,那我们现在就来创建这个宏!
新建一个文件后,保存这hello,然后进入VBA编辑器,在工程资源管理器中选择这个hello工程(默认在左上侧的窗口,看不到工程资源管理器,可以点击菜单视图/工程资源管理器或按Ctrl+R,工具栏中也有对应的按钮),然后点击插入/模块(工具栏中也有相应按钮),这时工程资源管理器就会多了一个模块,里面就多了一个模块1(也有可能是英文名),双击这个东东,就可以编辑我们的代码了。
接下来在菜单插入/过程中添过一个子程序,名称命名为hello,点击确定后就会自动生成一个过程序的头Public Sub hello()和尾End Sub,那么我们的代码就可以在这之间加入了!
这个程序我们用三行代码做三件事!
在A1格中写入Hello!
World!
,在立即窗口(默认在右下方,没有看到立即窗口,也在视图中点击立即窗口让它显示)中写入Hello!
World!
,用一个消息框弹出Hello!
World!
,三行代码为:
Range("A1").Value = "Hello!
World!
"
Debug.Print "Hello!
World!
"
MsgBox "Hello!
World!
"
运行宏后就各到我们上面要做的事情了!
最后再说几个VBA有关的概念:
什么叫个人宏工作簿?
个人宏工作簿名称为PERSONAL.XLS,如果存在,是随EXCEL启动而打开的,可以从窗口/取消隐藏看到它的真面目,第一次可以录制一个宏并保存在个人宏工作簿来生成它。
怎样才能将网页代码移到你的文件中?
复制,粘贴到你的代码窗口即可,有些朋友可能没有包含过程的头与尾,自行加入即可。
怎样才能将一个文件的代码移到另一个文件?
除了上面说的方法,还可以导出整个模块(右击该模块)再导入(右击需要导入的工程)即可。
VBA之自定义函数
这一贴说的是自定义函数。
Excel本身已自带了很多函数,供我们使用,但有些问题用原有的函数解决起来很复杂,甚至是无能为力,但有了VBA,可能就可以现实。
怎样自定义一个函数?
下面我们建一个名为RangeCount和函数,用来统计给定单元格数量。
上贴说过怎么插入一个宏(子程序),其实细心的朋友就会发现,里面有一项函数的选项,就是用这个添加了!
键入你需要的名称RangeCount,即会自动生成一个函数的头Public Function RangeCount()和尾End Function!
这时大家可以知道,子程序都是以Sub关键字开头,而函数是以Function关键字开头。
怎样给自定义函数传递参数?
用过Sum函数的朋友都知道Sum的用法,在单元格中键入=Sum(A1:
A10)就能对A1:
A10进行求和,那么怎么让我们的自定义函数也有此功能呢,其实很简单,只要在Function RangeCount()中的(与)之间加入即可,象现在我们要给这个自定义函数传递一个单元格的参数,即在()间加入XRan As Range即可。
其中XRan就是我们给这个参数设定的名称,As 是关键字,而Range就是给定参当数的类型(单元格类型),更详细的说明可以参见VBA的帮助(上贴有说明怎么用帮助了吧:
))。
怎么样自定义函数加入功能?
其实也和子程序一样,在函数的头Public Function RangeCount()和尾End Function之间就可以加入代码,我们这个函数的代码只有一句:
RangeCount = XRan.Count
怎么样让自定义函数返回值?
从上面的例子看出,只要将函数的名称设定为需要返回的值即可。
怎么当前工作表中使用自定久函数?
使用自定义函数的方法其实和一般函数的方法是一样的,在单元格中键入=RangeCount(A1:
A10),即可以得到值(10)!
当然,也可以通过菜单插入/函数,在类别中选择用户自定义里找到你自定义的函数。
怎么在工作表里使用别的工作表里的自定义函数?
从菜单插入/函数,类别中的用户自定义里,可以看到,如果这个自定义函数不是在当前的工作表里的,函数会变成——文件名.xls!
函数名了,这样我们使用上面的自定义函数就变成=Book1.xls!
RangeCount(A1:
A10)(设我们刚才保存文件为Book1)。
怎么样在任何工作表中使用自定义函数?
自定义了函数后,每一次使用都要打开这个工作簿,不方便,那么怎么样让任何工作簿都能使用这个自定义函数呢?
有两个方法,第一个就是把代码写在上面说到的个人宏工作簿中,因为个人宏工作簿都是随Excel自动打开的,那么我们就可以通过PERSONAL.XLS!
函数名来使用这个自定义函数。
第二个方法就是加载宏(关于加载宏的其它用法和具体说明以后还会有专门的一贴),将包含这个自定义函数的工作簿,去掉无关的内容(不去当然也行啦!
)后另存为加载宏(不会不知道怎么另存吧,汗!
后注!
),这样在菜单工具/加载宏里,将相关项前打勾,即可使用该自定义函数,这时使用函数的方法只要直接用函数名即可,如=RangeCount(A1:
A10)。
最后再说一点大家少遇到的现象:
用过VBA后,大家知道在同一模块中是不能有相同名称的子程序与函数的,如果有,运行时会提示存在二义性!
但在不同模块中,却能有相同甸称的函数存在,那么怎么使用这样的函数呢?
从菜单插入/函数,类别中的用户自定义里,我们可以看出这样的函数变成模块名.函数名了,这样我们的使用方法就是=模块1.RangeCount(A1:
A10)或=模块2.RangeCount(A1:
A10)。
后注:
详细的另存为加载宏的过程,点击菜单/文件/另存为,在文件类型里选择Microsoft Excel加载宏项,这时文件夹自动转到保存加载宏的AddIns,再保存即可。
附:
上面RangeCount的完整代码:
Function RangeCount(XRan As Range)
RangeCount = XRan.Count
End Function
下面给出两个自定义函数,按给颜色求和SumColor与计数CountColor
Function SumColor(rColor As Range, rSumRange As Range)
Dim rCell As Range
Dim iCol As Integer
Dim vResult
Application.Volatile
iCol = rColor.Interior.ColorIndex
For Each rCell In rSumRange
If rCell.Interior.ColorIndex = iCol Then
vResult = WorksheetFunction.Sum(rCell) + vResult
End If
Next rCell
SumColor = vResult
End Function
Function CountColor(rColor As Range, rSumRange As Range)
Dim rCell As Range
Dim iCol As Integer
Dim vResult
Application.Volatile
iCol = rColor.Interior.ColorIndex
For Each rCell In rSumRange
If rCell.Interior.ColorIndex = iCol Then
vResult = vResult + 1
End If
Next rCell
CountColor = vResult
End Function
自定义模板
今天突然发现还有一个不是VBA的自定义项没有说——模板。
以下几点是Excel关于模板的说明。
关于模板:
若要创建新工作簿,使其具有您所希望的格式,则可基于模板来新建工作簿。
模板中可包含格式样式、标准的文本(如页眉和行列标志)、公式、Visual Basic for Applications 宏和自定义工具栏等。
默认工作簿模板:
您可创建默认工作簿模板。
该模板定义了您启动 Microsoft Excel 时打开的新工作簿的格式和内容。
通过单击“新建” 或选择“模板”对话框(“通用模板”、“新建工作簿”任务窗格)中的工作簿模板所创建的工作簿是基于默认工作簿模板的文件。
默认的工作簿模板的文件名为 Book.xlt。
您可以为特定的任务和项目创建其他自定义的工作簿模板。
默认工作表模板:
您可创建默认工作表模板。
该模板定义了您使用“工作表”命令(“插入”菜单)插入的默认工作表的格式和内容。
默认的工作表模板的文件名为 Sheet.xlt。
如果您需要在工作簿中使用多种工作表,那么您可以创建其他的自定义工作表模板。
保存默认工作簿和工作表模板:
如果您已创建了名为 Book.xlt 或 Sheet.xlt 的模板,并保存在了 XLStart 文件夹中,Microsoft Excel 将使用该模板来创建新的默认工作簿或插入的新工作表。
XLStart 文件夹通常位于:
C:
\Program Files\Microsoft Office\Office10\XLStart若要使用保存于网络文件位置上的模板文件 (.xlt),您可按替补启动文件夹指定位置。
保存在 XLStart 文件夹中的自定义模板或替补启动文件夹会出现在“模板”对话框(“通用模板”,“新建工作簿”任务窗格)中的“常规”选项卡上。
共享模板:
如果正在使用 Microsoft Windows 95 或其后续版本,或者是 Windows NT 4.0 或其后续版本,则可将自定义模板保存到网络上,使其他用户也可使用。
例如,要让某个工作小组的所有成员都使用特定项目的同一个自定义模板,则可将其放在能被所有成员访问的网络文件夹中。
然后创建访问该文件夹或模板的快捷方式,并让所有成员将该快捷方式放入各自的 Templates 文件夹中。
而在VBA中,如何获得当前计算机中模板的路径?
可以用Application.TemplatesPath!
在VBA编程的初期,可以利用模板来生成固定格式的工作簿或工作表,这样可以减少代码的数量。
但有利就有弊,这样的宏在别的计算机使用时,就要连同模块一起,否则就无法正常运行!
但对于初期或自己快速建立宏,利用好之前的已定义好的模板资源,不失为一个很好的过渡方法。
自定义Excel加载宏
什么是加载宏?
加载宏程序是一类程序,它们为 Microsoft Excel 添加可选的命令和功能。
加载宏的分类!
Excel 有三种类型的加载宏程序:
Excel 加载宏、自定义的组件对象模型 (COM) 加载宏和自动化加载宏。
而我们这里说的和以后讲的加载宏都是第一类加载宏。
"如何安装加载宏?
在使用某个加载宏前,必须先将其安装在计算机上,再将其加载到 Excel 中。
默认情况下,加载宏(*.xla 文件)将安装在以下某个位置上:
Microsoft Office/Office 文件夹的 Library 文件夹或其中的某个子文件夹。
Documents and Settings/
你也可以将XLS文件,通过文件/另存为,将其另存为Xla加载宏文件。
"
如何将加载宏装入 Excel?
安装完加载宏之后,还必须将加载宏装入 Excel。
在工具/加载宏中,里面就列出你电脑中的所有安装的加载宏项,将对应项的勾勾选上即可加载加载宏。
如何卸载 Excel中的加载宏?
相对应,在工具/加载宏中,里面就列出你电脑中的所有安装的加载宏项,将对应项的勾勾去除即可。
将加载宏卸载只是从 Excel 中删除加载宏的功能和命令,但计算机上依然保留着加载宏程序,因此您还可以轻松地重新装载该加载宏。
如何在加载宏加载和关闭时运行特定的代码?
在AddinInstall 事件和AddinUnInstall 事件中加入相应的代码即可,当然,这是加载宏加载和关闭时特有的事件,你可以选择在Workbook_open(打开)和Workbook_BeforeClose(关闭)中加入相应的加代。
如何在自定义的加载宏中加入说明?
细心的朋友会发现,当我们选择每个Excel自带的加载宏时,在其下方会有一段文字说明这个加载宏,其实我们自定义的加载宏里也可以自已加入一段说明的,只要在其文件/属性的备注中写入这段说明即可,这样看起来是不是专业一点*~_~*,也方便让其它使用加载宏的朋友在加载前多一点了解它。
加载宏就说到这里了,再加上前面的说明,你是不是可以将以前的自定义函数啦,宏啦用加载宏分发别其他朋友了:
),再下面的几项自定义项,能让你的一些不懂VBA的朋友更能易用你编好的加载宏,敬请关注哦!
自定义菜单项
上贴讲过了加载宏,并见意大家将以前的自定义函数啦,宏啦用加载宏分发别其他朋友。
自定义函数包含在加载宏后的使用方法前面已说过,而宏呢?
如果让别人使用加载宏里的宏?
在宏的基础篇中,我们已说过宏怎么运行,但其实最方便的方法就是在我们的工具栏中建立一个按钮来调用这个宏。
怎么自定义一个按钮?
首先要确保要更改的工具栏是可见的,再单击“工具栏选项”箭头指向“添加或删除按钮”或用右击单击工具栏,再单击“自定义”,单击“命令”选项卡,在类别中选择“宏”,将“自定义按钮”拖拉到你需要的工具栏的位置即可。
而有多项的话,我们还可以自定义一个菜单项来包含这一些按钮。
怎么自定义一个菜单项?
和自定义按钮是差不多的,只是最后一步的操作是将“自定义菜单项”拖拉到你需要的工具栏的位置即可。
怎么将按钮与宏关联?
刚刚建立好的按钮,在第一次单击它是,会弹出一个菜单,让你选择与其相关联的宏,这时选择要关联的宏的名称即可。
但我们可以这样操作,右击工具栏后选择“自定义”,选择需要关联宏的按钮,然后在“更改所选内容”中的指定宏中指定或修改!
如何更改这个自定义按钮的外观?
在刚才说的“更改所选内容”项里,还可以更改这个按钮的名称,图标,样式,只要在此做相应的修改即可,要说明的一点是,在名称中用&后面跟着英文的话,就变成相对应的键盘按键,修改后我们看到的是这个英文下面加一条划线来表示!
如何删除自定义的菜单?
还按照上面的操作,将要删除的菜单拖拉到工具栏外,或选择它,再点击“更改所选内容”里的删除即可。
上面说了手工怎么样建立的删除自己的菜单,而怎么让加载宏自己建一个菜单,并在关闭时将其删除呢?
前贴说过,可以在AddinInstall 事件与AddinUnInstall 事件或者Workbook_open事情和Workbook_BeforeClose事件中,加入代码,来让加载宏打开与关闭时运行这些代码,还有一个方法就是在模块中定义auto_open(打开时运行)与auto_close(关闭时运行)这两个过程来实现,下面给出一个例子:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Dim AName, MName(2, 1), DelMenu
(2) As Boolean
Sub auto_open()
Dim MyMenu As CommandBarPopup
Dim MyBtn As CommandBarButton
Dim i As Byte
Dim XT As String
On Error Resume Next
AName = "自定义(&Z)" '菜单名称
MName(0, 0) = "XXExcel吧(&A)" '菜单项名称
MName(0, 1) = "BaiDuExcelBa" '指定宏名称
MName(1, 0) = "Excel吧主页(&B)" '菜单项名称
MName(1, 1) = "ExcelBaZy" '指定宏名称
MName(2, 0) = "Excel各页名(&C)" '菜单项名称
MName(2, 1) = "Excel各页名" '指定宏名称
Set MyMenu = CommandBars("Worksheet Menu Bar").Controls(AName)
If MyMenu Is Nothing Then
Set MyMenu = CommandBars("Worksheet Menu Bar").Controls.Add(Type:
=msoControlPopup)
MyMenu.Caption = AName
End If
For i = 0 To UBound(MName)
Set MyBtn = MyMenumandBar.Controls(MName(i, 0))
If MyBtn Is Nothing Then
DelMenu(i) = True
Set MyBtn = MyMenumandBar.Controls.Add(Type:
=msoControlButton)
With MyBtn
.Style = msoButtonIconAndCaption
.FaceId = 79 + MyBtn.Index
.Caption = MName(i, 0)
.OnAction = MName(i, 1)
End With
Else
DelMenu(i) = False
XT = XT & vbCrLf & MName(i, 0)
End If
Set MyBtn = Nothing
Next
自定义右键菜单
前面说过了自定义菜单与工具栏,如果大家利用好了,就可以很方便地让别人使用你编辑好的功能了。
而这一贴要讲的,利用右键的菜单,让调用功能更为方便。
当我们使用右键时,Excel相对应都会有一些功能在右键的菜单中出现,比如右击单元格时有设定单元格的功能,右击行号与列标时,有设定行高与列宽的功能,那么,我们也可以相应在我们需要的时候,将功能将入右键的菜单中,方便调用,比如下面说的自定义宏——合并复制选择单元格的内容,即可以加入到在右击单元格时产生的右键菜单中。
其实这些菜单的使用方法和前面将的菜单与工具栏是类似的,工具栏对应的是CommandBars对象,菜单对应的是CommandBarControl对象,而CommandBarControl 对象中又分有三种——ComandBarButton(按钮控件)、CommandBarComboBox(组合框控件)以及这贴说的CommandBarPopup(弹出式控件),下面给出一段程序,在表格中列出全部的弹出式控件的名称及项目等内容。
Sub ListPopups()
Dim ctl As CommandBarControl
Dim cb As CommandBar
Dim intRow As Integer 'Tracks row in worksheet
'下面一行是检查当前工作表是否没有内容
If
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VBA 宏基 本篇 20 文档