用过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_Select
Selection.CurrentRegion.Select
End sub
返回当前单元格中数据删除前后空格后的值
sub my_trim
msgbox Trim(ActiveCell.Value)
end sub
单元格位移
sub my_offset
ActiveCell.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 = "你好!!!"
给指定单元格赋值
例如:A1单元格内容设为"HELLO"
Range("a1").value="hello"
又如:你现在的工作簿在sheet1上,你要往sheet2的A1单元格中插入"HELLO"
1.
sheets("sheet2").select
range("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 Worksheet
For Each my In Worksheets
my.PrintPreview
Next my
得到当前单元格的地址
msgbox ActiveCell.Address
得到当前日期及时间
msgbox date & chr(13) & time
保护工作簿
ActiveSheet.Protect
取消保护工作簿
ActiveSheet.Unprotect
给活动工作表改名为 "liu"
ActiveSheet.Name = "liu"
打开一个应用程序
AppActivate (Shell("C:WINDOWSCALC.EXE"))
增加一个工作表
Worksheets.Add
删除活动工作表
activesheet.delete
打开一个工作簿文件
Workbooks.Open FileName:="C:My DocumentsBook2.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 = 20
End With
With 语句
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 = 1
ActiveWindow.ScrollColumn = 1
定制系统日期
Dim MyDate, MyDay
MyDate = #12/12/69#
MyDay = Day(MyDate)
返回当天的时间
Dim MyDate, MyYear
MyDate = Date
MyYear = Year(MyDate)
MsgBox MyYear
inputbox<输入框>
XX=InputBox ("Enter number of months to add")
得到一个文件名
Dim kk As String
kk = Application.GetOpenFilename("EXCEL (*.XLS), *.XLS", Title:="提示:请打开一个EXCEL文件:")
msgbox kk

打开zoom对话框
Application.Dialogs(xlDialogZoom).Show

激活字体对话框
Application.Dialogs(xlDialogActiveCellFont).Show

打开另存对话框
Dim kk As String
kk = Application.GetSaveAsFilename("excel (*.xls), *.xls")
Workbooks.Open kk

 


1 excle快捷键大全
对工具栏进行操作的快捷键
激活菜单栏,F10,Alt
选定前一个或下一个工具栏,Ctrl+Tab或Ctrl+Shift+Tab
选定工具栏中的下一个或前一个按钮或菜单,Tab或Shift+Tab(当某个工具栏被激活时)
打开选定的菜单,Enter
运行选按钮的操作,Enter
在选定的文本框中输入文本,Enter
在对话框中使用的快捷键
取消当前任务,Esc
单击相应命令,Alt+下划线字母
单击选定的按钮,Enter
在选项中前移,Tab
在选项后移,Shift+Tab
在选项卡中前移,Ctrl+Tab
在选项卡中后移,Ctrl+Shift+Tab
刷新“另存为”或“打开”对话框,F5
插入、删除和复制选定区域的快捷键
复制选定区域,Ctrl+C
粘贴选定区域,Ctrl+V
剪切选定区域,Ctrl+X
清除选定区域的内容,Delete
插入空白单元格,Ctrl+Shift+加号
删除选定区域,Ctrl+-
撤消最后一次操作,Ctrl+Z
使用“office助手”需要用到的快捷键
关闭“office助手”提供的消息,Esc
通过“office助手”获取帮助信息,F1
显示下一项提示,Alt+N
显示前一项提示,Alt+B
在向导中显示或隐藏“office助手”,空格键
对窗口进行操作的快捷键
切换到下一个程序,Alt+Tab
切换到前一个程序,Alt+Shift+Tab
显示windwos“开始”菜单,Ctrl+Esc
关闭活动工作薄窗口,Ctrl+W
恢复活动工作薄窗口,Ctrl+F5
切换到下一个工作薄窗口,Ctrl+F6
切换到前一个工作薄窗口,Ctrl+Shift+F6
执行“移动”命令(菜单栏中的工作薄图标菜单),Ctrl+F7
运行“大小”命令(菜单栏中的工作薄图标菜单),Ctrl+F8
将工作薄窗口最小化为图标,Ctrl+F9
最大化或恢复工作薄窗口,Ctrl+F10
在“打开”或“另存为”对话框中更新可见的文件,F5
使用对话框进行操作的快捷键
切换到对话框中的下一个选项卡,Ctrl+Tab或Ctrl+PageDown
切换到对话框中的前一个选项卡,Ctrl+Shift+Tab或Ctrl+PageUp
移动到下一个选项或选项组,Tab
移动到前一个选项或选项组,Shift+Tab
在活动下拉列表框的选项间移动,或在选项组选项间移动,方向键
招待活动按钮的操作,或选定或清除当前复选框,空格键
取消命令或关闭对话框,Esc
在文本框中进行操作的快捷键
移动到内容的开始,Home
移动到内容的最后,End
向左或向右移动一个字符,左右方向键
向左或向右移动一个字,Ctrl+左右方向键
选定从插入点到开始的输入内容,Shift+Home
选定从插入点到最后的输入内容,Shift+End
选定或取消左面的一个字符,Shift+左方向键
选定或取消右面的一个字符,Shift+右方向键
选定或取消左面的一个字,Ctrl+Shift+左方向键
选定或取消右面的一个字,Ctrl+Shift+右方向键
在工作表和工作薄中选定单元格、列、行或对象的快捷键
选定当前单元格周围的区域,Ctrl+Shift+*(星号)
将选定区域扩展一个单元格宽度,Shift+方向键
将选定区域扩展到与活动单元格同一行或同一列的最后一个非空白单元格,Ctrl+Shift+方向键
将选定区域扩展到行首,Shift+Home
将选定区域扩展到工作表的开始,Ctrl+Shift+Home
将选定区域扩展到工作表的最后一个包含数据的单元格,Ctrl+Shift+End
选定整列,Ctrl+空格键
选定整行,Shift+空格键
选定整个工作表,Ctrl+A
若已选定多个单元格,则只选定其中的活动单元格,Shift+Backspace
将选定区域向下扩展一屏,Shift+PageDown
将选定区域向上扩展一屏,Shift+PageUp
在选定一个对象时,选定工作表上的所有对象,Ctrl+Shift+空格键
在隐藏对象、显示对象与对象占位符之间切换,Ctrl+6
显示或隐藏“常用”工具栏,Ctrl+7
分级显示数据的快捷键
取消行或列分组,Alt+Shift+左方向键
对行或列分组,Alt+Shift+右方向键
显示或隐藏分级显示符号,Ctrl+8
隐藏选定行,Ctrl+9
取消隐藏选定行,Ctrl+Shift+(
隐藏选定列,Ctrl+0
取消隐藏选定列,Ctrl+Shift+)
编辑单元格的快捷键
完成单元格输入,Enter
取消单元格输入,Esc
重复单元格一次操作,F4或Ctrl+Y
在单元格中折行,Alt+Enter
删除插入点左边的字符或删除选定区域,Backspace
删除插入点右边的字符或删除选定区域,Delete
向上下左右移动一个字符,方向键
移到行首,Home
移到行尾,End
编辑单元格批注,Shift+F2
由行或列标志创建名称,Ctrl+Shift+F3
向下填充,Ctrl+D
向右填充,Ctrl+R
用当前输入项填充选定的单元格区域,Ctrl+Enter
完成单元格输入并在选定区域中下移,Enter
完成单元格输入并在选定区域中上移,Shift+Enter
完成单元格输入并在选定区域中右移,Tab
完成单元格输入并在选定区域中左移,Shift+Tab
在单元格或编辑栏中使用的快捷键
键入公式,=(等号)
取消单元格或编辑栏中的输入项,Esc
编辑当前单元格,F2
编辑活动单元格并清除其内容,或在编辑时删除前一个字符,Backspace
将名称粘贴到公式中,F3
定义名称,Ctrl+F3
计算所有打开工作薄中的所有工作表,F9
计算活动工作表,Shift+F9
输入“自动求和”公式,Alt+=(等号)
输入日期,Ctrl+;
输入时间,Ctrl+Shift+:
插入超级链接,Ctrl+K
完成单元格输入,Enter
将当前单元格上方单元格中的数值复制到当前单元格或编辑栏,Ctrl+Shift+(双引号)
将当前单元格上方单元格中的公式复制到当前单元格或编辑栏,Ctrl+'(单引号)
在显示单元格值与单元格公式间转换,Ctrl+`(撇号)
输入数组公式,Ctrl+Shift+Enter
键入有效函数名后,显示公式选项板,Ctrl+A
键入有效函数名后,为该函数插入变量名和括号,Ctrl+Shift+A
显示“记忆式键入”列表,Ctrl+下方向键
快捷键与数据格式设置
显示“样式”命令,Alt+'(单引号)
显示“单元格”命令,Ctrl+1
应用常规数字格式,Ctrl+Shift+~
应用带两个小数位的“贷币”格式,Ctrl+Shift+$
应用不带小数位的“百分比”格式,Ctrl+shift+%
应用带两个小数位的“科学记数”数字格式,,Ctrl+shift+^
应用年月日“日期”格式,Ctrl+shift+#
应用小时和分钟“时间”格式,并表明上午或下午,Ctrl+shift+@
应用外边框,Ctrl+shift+&
取消选定单元格区域中的所有边框,Ctrl+shift+_
应用或取消字体加粗格式,Ctrl+B
应用或取消字体倾斜格式,Ctrl+I
应用或取消字体下划线格式,Ctrl+U
应用或取消删除线格式,Ctrl+5
隐藏行,Ctrl+9
取消隐藏行,Ctrl+Shift+(
隐藏列,Ctrl+0
取消隐藏列,Ctrl+Shift+)

使用 Excel 2003 工作表的 VBA 示例 
 

适用范围:
Microsoft Office Excel 2003
摘要:寻找能够为 Excel 工作表增加额外功能的宏。只需稍加练习,您就可以扩展这些程序,使其适合您自己的应用程序。
本页内容

引言

导出带有逗号和引号分隔符的文本文件

计算包含公式、文本或数字的单元格数量

使用 Saved 属性确定工作簿是否已发生更

合并数据列

数组中的总行数和总列数

结论
引言
本文介绍几个 Microsoft Visual Basic for Applications (VBA) 宏,您可以使用这些宏为 Microsoft Office Excel 2003 工作簿和工作表增加额外的功能。这些宏将为您的应用程序提供新的功能或增强现有的功能。阅读示例的同时,您应该寻找扩展这些宏的方法,以适合您自己的情况。

导出带有逗号和引号分隔符的文本文件
Excel 没有自动将数据导出为文本文件的菜单命令,因此导出的文本文件同时带有逗号和引号分隔符。例如,没有命令能自动创建包含以下内容的文本文件:
"Text1","Text2","Text3"

但是,您可以使用 VBA 宏在 Excel 中创建该功能。这种文件格式是在诸如 Microsoft Office Access 2003 和 Microsoft Office Word 2003 之类的应用程序中导入文本数据时常见的格式。
您可以在如下所示的 VBA 宏中使用 Print 语句,导出同时带有逗号和引号分隔符的文本文件。要使该程序正常运行,必须在运行该程序之前选择包含数据的单元格。
使用以下示例之前,请执行以下步骤:
1. 打开一个新工作簿。
2. 在“工具”菜单中,指向“宏”,然后单击“Visual Basic 编辑器”(或者简单地按下 ALT+F11 组合键)。在“Visual Basic 编辑器”中,单击“插入”菜单,然后单击“模块”。
3. 将以下示例代码键入或粘贴到模块中:
Sub QuoteCommaExport()
Dim DestFile As String
Dim FileNum As Integer
Dim ColumnCount As Integer
Dim RowCount As Integer
' 提示用户指定目标文件名。
DestFile = InputBox("Enter the destination filename" & _
Chr(10) & "(with complete path and extension):", _
"Quote-Comma Exporter")
' 获取下一个可用的文件句柄编号。
FileNum = FreeFile()
' 关闭错误检查功能。
On Error Resume Next
' 尝试打开目标文件以供输出。
Open DestFile For Output As #FileNum
' 如果出现错误,则报告错误并结束程序。
If Err <> 0 Then
MsgBox "Cannot open filename " & DestFile
End
End If
' 打开错误检查功能。
On Error GoTo 0
' 循环选择的每一行。
For RowCount = 1 To Selection.Rows.Count
' 循环选择的每一列。
For ColumnCount = 1 To Selection.Columns.Count
' 将当前单元格中的文本写入到文件中,文本用引号括起来。
Print #FileNum, """" & Selection.Cells(RowCount, _
ColumnCount).Text & """";
' 检查单元格是否位于最后一列。
If ColumnCount = Selection.Columns.Count Then
' 如果是,则写入一个空行。
Print #FileNum,
Else
' 否则,则写入一个逗号。
Print #FileNum, ",";
End If
' 开始 ColumnCount 循环的下一个迭代。
Next ColumnCount
' 开始 RowCount 循环的下一个迭代。
Next RowCount
' 关闭目标文件。
Close #FileNum
End Sub

4. 运行该宏之前,请选择要导出的数据,然后在“工具”菜单中指向“宏”并单击“宏”。
5. 选择 QuoteCommaExport 宏,然后单击“运行”。

计算包含公式、文本或数字的单元格数量
在 Excel 中,您可以对包含公式、文本或数字的工作表中的单元格数量进行计算,方法是使用“定位条件”对话框选择单元格,然后运行计算所选单元格数量的宏。例如,当您需要设置表格以确定合计列的每一行是否都包含公式而不用手动检查每一行时,此方法可能很有用。
选择单元格
要选择公式、文本或数字,请执行以下步骤:
1. 在“编辑”菜单中,单击“定位”,然后单击“定位条件”。
2. 在“定位条件”对话框中,要选择所有公式,请单击“公式”并确保选中“数字”、“文本”、“逻辑值”以及“错误”复选框。要选择文本,请选择“常量”选项,然后仅单击并选中“文本”复选框。要选择数字,请选择“常量”选项,然后仅单击并选中“数字”复选框。
计算所选单元格数量的 VBA 代码
要计算所选的单元格数量并在消息框中显示计算结果,请使用以下程序:
Sub Count_Selection()
Dim cell As Object
Dim count As Integer
count = 0
For Each cell In Selection
count = count + 1
Next cell
MsgBox count & " item(s) selected"
End Sub

您可以将此程序指定给一个命令按钮,这样,当您单击该按钮时,将显示所选项的数量。

使用 Saved 属性确定工作簿是否已发生更改
可以通过检查工作簿的 Saved 属性来确定工作簿是否已发生更改。根据工作簿是否发生了更改,Saved 属性将返回 True 或 False 值。
注意:用户除了可以通过“事件”设置 Saved 属性外,还可以通过代码将其设置为 True 或 False。本节包含的示例宏说明了如何在这两种情况下使用 Saved 属性。
工作表中的各种情况(例如存在可变函数)都可能会影响 Saved 属性。可变函数是指工作表中每次发生更改时都会重新计算的函数,而不管发生的更改是否影响到这些函数。某些常见的可变函数包括 RAND()、NOW()、TODAY() 和 OFFSET()。
如果活动工作簿包含未保存的更改,第一个宏将显示如下消息:
Sub TestForUnsavedChanges()
If ActiveWorkbook.Saved = False Then
MsgBox "This workbook contains unsaved changes."
End If
End Sub

下一个宏将关闭包含示例代码的工作簿并放弃对工作簿所做的所有更改:
Sub CloseWithoutChanges()
ThisWorkbook.Saved = True
ThisWorkbook.Close
End Sub

下一个宏将关闭包含示例代码的工作簿并放弃对工作簿所做的所有更改:
Sub CloseWithoutChanges()
ThisWorkbook.Saved = True
ThisWorkbook.Close
End Sub

下面的示例宏也将关闭工作簿并放弃更改:
Sub CloseWithoutChanges()
ThisWorkbook.Close SaveChanges:=False
End Sub


合并数据列
在 Excel 中,可以使用宏合并两个相邻列中的数据并在包含数据的右侧列中显示结果,完全不需要手动设置公式。本节包含的示例宏就可以实现此功能。
Sub ConcatColumns()
Do While ActiveCell <> "" ' 一直循环,直到活动单元格为空。
ActiveCell.Offset(0, 1).FormulaR1C1 = _
ActiveCell.Offset(0, -1) & " " & ActiveCell.Offset(0, 0)
ActiveCell.Offset(1, 0).Select
Loop
End Sub

要使用宏,请执行以下步骤:
1. 打开包含数据的工作簿。
2. 按 ALT+F11 组合键激活“Visual Basic 编辑器”。
3. 在“插入”菜单中,单击“模块”以插入一个模块。在模块的代码窗口中键入上面的宏。
4. 单击“文件”菜单中的“关闭并返回到 Microsoft Excel”。
5. 选择包含要合并的数据的工作表。
6. 单击要合并的右侧数据列的第一个单元格。例如,如果单元格 A1:A100 和 B1:B100 包含数据,则单击单元格 B1。
7. 在“工具”菜单中,指向“宏”并单击“宏”。选择 ConcatColumns 宏并单击“运行”。
注意:可以用语句 ActiveCell.Offset(0, 1).Formula 替换语句 ActiveCell.Offset(0, 1).FormulaR1C1。如果仅使用文本和数字(不包含公式),那么两个语句的效果相同。第一个语句末尾使用的 R1C1 表示第一行的第一列,这是 Excel 帮助主题中大多数示例使用的形式。

数组中的总行数和总列数
在 Excel 中,可以使用数组来计算和操作工作表中的数据,还可以使用宏将某个范围内的单元格中的值存储到一个数组中。本节中的示例宏代码将在一个矩形单元格区域中添加一行和一列,以包含该区域中每一行和每一列中的单元格总数。
具体的步骤是,代码从活动工作表上活动单元格周围的当前单元格区域中读取数据。宏将这些数据存储在一个数组中,计算每一行和每一列中的单元格总数,然后将输出显示在工作表中。数组的大小由当前区域中的单元格数量决定。
注意:此宏不会在工作表中添加任何公式,因此如果该范围内的单元格总数有变化,则必须重新运行宏。
使用以下示例之前,请执行以下步骤:
1. 打开一个新工作簿。
2. 在“工具”菜单中,指向“宏”,然后单击“Visual Basic 编辑器”(或者简单地按下 ALT+F11 组合键)。在“Visual Basic 编辑器”中的“插入”菜单中,单击“模块”。
将以下示例代码键入或粘贴到模块中:
Sub TotalRowsAndColumns()
' 此宏假定您已从
' 要计算单元格总数的矩形区域内
' 选择了一个单元格或一组单元格。行和列的单元格总数将出现在
' 当前区域下面的行和右侧的列中。
Dim r As Integer
Dim c As Integer
Dim i As Integer
Dim j As Integer
Dim myArray As Variant
' 将 myArray 声明为变量将使数组可以接收
' 一组单元格。此时,数组将自动转换为
' 以下标 myArray(1,1) 开始的数组。
' 指当前所选单元格周围的区域。
With Selection.CurrentRegion
r = .Rows.Count
c = .Columns.Count
' 重新计算总行数和总列数并将结果存储到数组中。
myArray = .Resize(r + 1, c + 1)
' 在下面的嵌套循环中,变量 i 跟踪
' 行号,变量 j 跟踪
' 列号。j 在可用列中每循环一次,
' i 就递增一,而 j
' 则重新从一到 c 循环一次。
For i = 1 To r
For j = 1 To c
' 行 i 的总数
myArray(i, c + 1) = myArray(i, c + 1) + myArray(i, j)
' 列 j 的总数
myArray(r + 1, j) = myArray(r + 1, j) + myArray(i, j)
' 总计
myArray(r + 1, c + 1) = myArray(r + 1, c + 1) + myArray(i, j)
Next j
Next i
' 将数组返回工作表,数组中现在包含一个
' 新行和一个新列,用于存储总数。
.Resize(r + 1, c + 1) = myArray
End With
End Sub

3. 突出显示要求和区域中的一个单元格,在“工具”菜单中,指向“宏”并单击“宏”。
4. 选择 TotalRowsAndColumns 宏,然后单击“运行”。
注意:要执行与本示例中的运算类似的运算,可以修改宏代码。例如,要对选定范围内的单元格中包含的值进行减法、乘法或除法运算,可以更改数学运算符。

结论
本文介绍了各种 VBA 宏,使用这些宏可以减少使用工作表所需的工作量。此外,您还可以修改本文介绍的大多数宏以扩展它们的功能。始终记住可以在工具或提示库中添加更多宏,您将会受益匪浅。


VBA系列讲座(1):VBA是什么?
 

1.1 VBA是什么
  直到90年代早期,使应用程序自动化还是充满挑战性的领域.对每个需要自动化的应用程序,人们不得不学习一种不同的自动化语言.例如:可以用EXCEL的宏语言来使EXCEL自动化,使用WORD BASIC使WORD自动化,等等.微软决定让它开发出来的应用程序共享一种通用的自动化语言--------Visual Basic For Application(VBA),可以认为VBA是非常流行的应用程序开发语言VASUAL BASIC 的子集.实际上VBA是"寄生于"VB应用程序的版本.VBA和VB的区别包括如下几个方面:
  1. VB是设计用于创建标准的应用程序,而VBA是使已有的应用程序(EXCEL等)自动化
  2. VB具有自己的开发环境,而VBA必须寄生于已有的应用程序.
  3. 要运行VB开发的应用程序,用户不必安装VB,因为VB开发出的应用程序是可执行文件(*.EXE),而VBA开发的程序必须依赖于它的"父"应用程序,例如EXCEL.
  尽管存在这些不同,VBA和VB在结构上仍然十分相似.事实上,如果你已经了解了VB,会发现学习VBA非常快.相应的,学完VBA会给学习VB打下坚实的基础.而且,当学会在EXCEL中用VBA创建解决方案后,即已具备在WORD ACCESS OUTLOOK FOXPRO PROWERPOINT 中用VBA创建解决方案的大部分知识.
  * VBA一个关键特征是你所学的知识在微软的一些产品中可以相互转化.
  * VBA可以称作EXCEL的“遥控器”.
  VBA究竟是什么?更确切地讲,它是一种自动化语言,它可以使常用的程序自动化,可以创建自定义的解决方案.
   此外,如果你愿意,还可以将EXCEL用做开发平台实现应用程序.
1.2 EXCEL环境中基于应用程序自动化的优点
  也许你想知道VBA可以干什么?使用VBA可以实现的功能包括:
  1. 使重复的任务自动化.
  2. 自定义EXCEL工具栏,菜单和界面.
  3. 简化模板的使用.
  4. 自定义EXCEL,使其成为开发平台.
  5. 创建报表.
  6. 对数据进行复杂的操作和分析.
  用EXCEL作为开发平台有如下原因:
  1. EXCEL本身功能强大,包括打印,文件处理,格式化和文本编辑.
  2. EXCEL内置大量函数.
  3. EXCEL界面熟悉.
  4. 可连接到多种数据库.
  用其他语言开发应用程序,一半的工作是编写一些基本功能的模块,包括文件的打开和保存,打印,复制等.而用EXCEL作为开发平台,则由于EXCEL已经具备这些基本功能,你要做的只是使用它.
1.3 录制简单的宏
  在介绍学习VBA之前,应该花几分钟录制一个宏。
  新术语:“宏”,指一系列EXCEL能够执行的VBA语句。
  以下将要录制的宏非常简单,只是改变单元格颜色。请完成如下步骤:
  1)打开新工作簿,确认其他工作簿已经关闭。
  2)选择A1单元格。调出“常用”工具栏。
  3)选择“工具”—“宏”—“录制新宏”。
  4)输入“改变颜色”作为宏名替换默认宏名,单击确定,注意,此时状态栏中显示“录制”,特别是“停止录制”工具栏也显示出来。替换默认宏名主要是便于分别这些宏。
  ★ 宏名最多可为255个字符,并且必须以字母开始。其中可用的字符包括:字母、数字和下划线。宏名中不允许出现空格。通常用下划线代表空格。
  5)选择“格式”的“单元格”,选择“图案”选项中的红色,单击“确定”。
  6)单击“停止录制”工具栏按钮,结束宏录制过程。
  ※ 如果“停止录制”工具栏开始并未出现,请选择“工具”—“宏”—“停止录制”。
  录制完一个宏后就可以执行它了。
1.4 执行宏
  当执行一个宏时,EXCEL按照宏语句执行的情况就像VBA代码在对EXCEL进行“遥控”。但VBA的“遥控”不仅能使操作变得简便,还能使你获得一些使用EXCEL标准命令所无法实现的功能。而且,一旦熟悉了EXCEL的“遥控”,你都会奇怪自己在没有这些“遥控”的情况下,到底是怎么熬过来的。要执行刚才录制的宏,可以按以下步骤进行:
  1)选择任何一个单元格,比如A3。
  2)选择“工具”—“宏”—“宏”,显示“宏”对话框。
  3)选择“改变颜色”,选择“执行”,则A3单元格的颜色变为红色。试着选择其它单元格和几个单元格组成的区域,然后再执行宏,以便加深印象。
1.5 查看录制的代码
  到底是什么在控制EXCEL的运行呢?你可能有些疑惑.好,让我们看看VBA的语句吧.
  1)选择“工具”—“宏”—“宏”,显示“宏”对话框。
  2)单击列表中的“改变颜色”,选择“编辑”按钮。
  此时,会打开VBA的编辑器窗口(VBE)。关于该编辑器,以后再详细说明,先将注意力集中到显示的代码上。代码如下:(日期和姓名会有不同)
Sub 改变颜色()

’ 改变颜色 Macro
’ xw 记录的宏 2000-6-10


With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
End Sub
将来会十分熟悉这种代码,虽然现在它们看上去像一种奇怪的外语。学习VBA或编程语言在某种程度上比较像在学习一种外语。
Sub 改变颜色():这是宏的名称。
中间的以“ ’”开头的五行称为“注释”,它在录制宏时自动产生。
以With 开头到End With 结束的结构是With结构语句,这段语句是宏的主要部分。注意单词“selection”,它代表“突出显示的区域”(即:选定区域)。With Selection.Interior :它读作“选择区域的的内部”.这整段语句设置该区域内部的一些“属性”。
其中:
.ColorIndex = 3: 将该内部设为红色。注意:有一小圆点,它的作用在于简化语句,小圆点代替出现在With后的词,它是With结构的一部分。另外:红色被数字化为3.(红色警戒是否可称作:3号警戒,嗯?)有兴趣的话,你将3改为其他数字试试看。
.Pattern = xlSolid:设置该区域的内部图案。由于是录制宏,所以,虽然你并未设置这一项,宏仍然将其记录下来(因为在“图案”选项中有此一项,只是你为曾设置而已)。xlSolid表示纯色。
.PatternColorIndex = xlAutomatic:表示内部图案底纹颜色为自动配色。
End With:结束With 语句。
End Sub:整个宏的结束语
1.6 编辑录制的代码
   在上一节,我们录制了一个宏并查看了代码,代码中有两句实际上并不起作用。哪两句?现在,在宏中作一个修改,删除多余行,直到和下面代码相同:
Sub 改变颜色()

’ 改变颜色 Macro
’ xw 记录的宏 2000-6-10


With Selection.Interior
.ColorIndex = 3
End With
End Sub
  完成后,在工作表中试验一下。你会发现结果和修改前的状况一样。在With 语句前加入一行:
Range("A5").Select
  试着运行该宏,则无论开始选择哪个单元格,宏运行结果都是使A5单元格变红.
  现在可以看到,编辑录制的宏同样非常简单。需要编辑宏是因为以下三个方面的原因。一:在录制中出错而不得不修改。二:录制的宏中有多余的语句需要删除,提高宏的运行速度。三:希望增加宏的功能。比如:加入判断或循环等无法录制的语句。
1.7 录制宏的局限性
  希望自动化的许多EXCEL过程大多都可以用录制宏来完成.但是宏记录器存在以下局限性.通过宏记录器无法完成的工作有:
  1)录制的宏无判断或循环能力.
  2)人机交互能力差,即用户无法进行输入,计算机无法给出提示.
  3)无法显示EXCEL对话框.
  4)无法显示自定义窗体.
1.8 小结
  本学时中,你已经掌握了VBA的一些基础知识,你会录制宏、编辑宏而且了解了录制宏的局限性.你很努力.并且已经为将来学习VBA甚至VB等编程语言打下了基础.关键是你已经了解了一个谜底,就是说,你了解了什么是编程.下面是些小练习,做完后才可以去玩哟.
  思考:
  1)VBA只能用于EXCEL吗?
  2)VBA是基于哪种语言?
  3)说说EXCEL和VBA的关系.
  4)为什么要用宏?