经典Excel VBA代码
Application(Excel程序)篇
Application.EnableEvents = True / False ’启用 / 禁用所有事件
Application.DisplayAlerts = True / False ’显示 / 关闭警告框提示框
Application.ScreenUpdating = True / False ’显示 / 关闭屏幕刷新
Application.StatusBar = " 软件报专用 " ’在地址栏中显示文本,标题栏用Caption属性
Application.Cursor = xlIBeam ‘设置光标形状为Ⅰ字形,xlWait为沙漏(等待)形,xlNormal为正常
Application.WindowState = xlMinimized ‘窗口最小化,xlMaximized最大化,xlNormal为正常
Application.ActivateMicrosoftApp xlMicrosoftWord ’开启Word应用程序
Application.TemplatesPath ‘获取工作簿模板的位置
Application.CalculateFull ’重新计算所有打开的工作簿中的数据
Application.RecentFiles.Maximum = 2 ’将最近使用的文档列表数设为2
Application.RecentFiles( 3 ).Open ’打开最近打开的文档中的第3个文档
Application.AutoCorrect.AddReplacement " sweek " , " 软件报 " ’自动将输入的 " sweek " 更正为 " 软件报 "
Application.Dialogs(xlDialogPrint).Show ‘显示打印文档的对话框
Application.OnTime Now + TimeValue ( " 00:00:45 " ), " process " ’45分钟后执行指定过程
Application.OnTime TimeValue ( " 14:00:00 " ), " process " ’下午2点执行指定过程
Application.OnTime EarliestTime: = TimeValue ( " 14:00:00 " ), _
Procedure: = " process " , Schedule: = False ’取消指定时间的过程的执行
工作簿 / 工作表篇
ActiveWorkbook.Sheets.Count ’获取活动工作薄中工作表数
ActiveWorkbook.LinkSources(xlExcelLinks)( 1 ) ‘返回当前工作簿中的第一条链接
ThisWorkbook.Worksheets(“sheet2”).Visible = xlSheetHidden ‘隐藏工作表,与在Excel菜单中执行“格式—工作表—隐藏”操作一样
ThisWorkbook.Worksheets(“sheet2”).Visible = xlSheetVeryHidden ‘隐藏工作表,不能通过在Excel菜单中执行“格式—工作表—取消隐藏”来重新显示工作表
ThisWorkbook.Worksheets(“sheet2”).Visible = xlSheetVisible ‘显示被隐藏的工作表
ThisWorkbook.Sheets( 1 ).ProtectContents ‘检查工作表是否受到保护
ActiveSheet.Columns( " B " ).Cut
ActiveSheet.Columns( " F " ).Insert ‘以上两句将B列数据移至F列,原C列后的数据左移
ActiveSheet.Range(“A:A”).EntireColumn.AutoFit ‘自动调整当前工作表A列的列宽
ActiveSheet.Cells.SpecialCells(xlCellTypeConstants,xlTextValues) ‘选中当前工作表中常量和文本单元格
ActiveSheet.Cells.SpecialCells(xlCellTypeConstants,xlErrors + xlTextValues) ‘选中当前工作表中常量和文本及错误值单元格
ActiveSheet.UsedRange.Rows.Count ‘当前工作表中已使用的行数
ThisWorkbook.Worksheets.Add ThisWorkbook.Worksheets( 3 ), , 2 ‘在第3张工作表之前添加2个新的工作表
ActiveSheet.Move After: = ActiveWorkbook. _
Sheets(ActiveWorkbook.Sheets.Count) ’将当前工作表移至工作表的最后
Worksheets( Array (“sheet1”,”sheet2”)).Select ’同时选择工作表sheet1和sheet2
ActiveSheet.UsedRange.FormatConditions.Delete ‘删除当前工作表中应用的条件格式
Cells.Hyperlinks.Delete ‘取消当前工作表中所有单元格的超链接
ActiveSheet.PageSetup.RightFooter = ActiveWorkbook.FullName ‘在页脚显示文件的路径
ActiveSheet.PrintPreview Enablechanges: = False ‘禁用显示在Excel的“打印预览”窗口中的“设置”和“页边距”按钮
单元格 / 单元格区域篇
ActiveSheet.UsedRange.Row ‘获取已使用的单元格区域的第一行的行号
Range(“A65536”).End(xlUp).Row ‘返回A列最后一行(即记录的总条数)
cell.Range(“A1”).HasFormula ‘检查单元格或单元格区域中的第一个单元格是否含有公式或cell.HasFormula ‘工作表中单元格是否含有公式
Target.EntireColumn.Select ‘选择单元格所在的整个列,Target.EntireRow.Select为选择单元格所在的整行
ActiveCell.Row ‘活动单元格所在的行号,ActiveCell.Column为活动单元格所在的列数
ActiveWindow.ScrollRow = 2 ’将当前工作表窗口滚动到第2行
ActiveWindow.ScrollColumn = 5 ’将当前工作表窗口滚动到第5列
Worksheets( " sheet1 " ).Range( " A1:C5 " ).CopyPicture xlScreen, xlBitmap ’将指定的单元格区域的内容复制成屏幕快照
Selection.Hyperlinks.Delete ‘删除所选区域的所有链接
ActiveSheet.Cells( 1 , 1 ).Font.Bold = TRUE ‘Bold属性用于设置字体是否为加粗, Size属性设置字体大小, ColorIndex属性设置字体颜色(其值为颜色索引号), Italic属性设置字型是否为倾斜, Name属性设置字体名称
ActiveSheet.Cells( 1 , 1 ).Interior.ColorIndex = 3 ‘将单元格的背景色设置为红色
IsEmpty (ActiveCell.Value) ’判断活动单元格中是否有值
ActiveCell.Value = UCase (ActiveCell.Value) ’将当前单元格中的字符转换成大写
ActiveCell.Value = StrConv(ActiveCell.Value, vbLowerCase) ’将活动单元格中的字符串转换成小写
ActiveCell.CurrentRegion.Select ’选择当前活动单元格所在的连续的非空区域,也可以用Range(ActiveCell, UsedRange.End(xlDown)).Select
ActiveCell.Offset( 1 , 0 ).Select ’活动单元格下移一行
Range(“B2”).Offset(ColumnOffset: = 1 )或Range(“B2”).Offset(, 1 ) ‘读取指定单元格右侧单元格中的数据
Range(“B2”).Offset(Rowoffset: =- 1 )或Range(“B2”).Offset( - 1 ) ‘读取指定单元格上一行单元格中的数据
Range(“A1”).Copy Range(“B1”) ’复制单元格A1中的内容到B1中
Range(“A1:D8”).Copy Range(“H1”) ’将指定单元格区域复制到从H1开始的区域中,用Cut方法可以实现剪切操作
ActiveWindow.RangeSelection.Value = " 软件报 " ’将指定字符串输入到所选单元格区域中
窗体(控件)篇
Option Explicit ’强制对模块内所有变量进行声明
Userform1.Show ‘显示用户窗体
Load Userform1 ‘加载一个用户窗体,但该窗体处于隐藏状态
Userform1.Hide ‘隐藏用户窗体
Unload Userform1 或 Unload Me ‘卸载用户窗体
Me.Height = Int ( 0.5 * ActiveWindow.Height) ‘窗体高度为当前活动窗口高度的一半,宽度用ActiveWindow. Width属性
UserForm1.ComboBox1.AddItem Sheets( " Sheet1 " ).Cells( 1 , 1 ) ‘将指定单元格中的数据添加到复合框中
ListBox1.List = MyProduct() ‘将数组MyProduct的值添加到列表框ListBox1中
ListBox1.RowSource = ”Sheet1!isum” ‘将工作表Sheet1中名为的isum区域的值添加到列表框中
ListBox1.Selected( 0 ) ‘选中列表框中的指定的条目
ListBox1.RemoveItem ListBox1.ListIndex ‘移除列表框中选中的条目
If MsgBox (“要退出吗?”,vbYesNo) <> vbYes Then Exit Sub ’返回值不为“是”,则退出
Config = vbYesNo + vbQuestion + vbDefaultButton2 ’使用常量的组合,赋值组Config变量,并设置第二个按钮为缺省按钮
MsgBox “This is the first line.” & vbNewLine & “ Second line.” ’在消息框中强制换行,也可用vbCrLf代替vbNewLine。
MsgBox " 平均值为: " & Format(Application.WorksheetFunction.Average(Selection), " #,##0.00 " ),vbInformation, " 显示选区平均值 " ’应用工作表函数返回所选区域的平均值并按指定显示的格式
公式与函数
Application.WorksheetFunction.IsNumber(“A1”) ’检查指定单元格中的数据是否为数字
Range(“A:A”).Find(Application.WorksheetFunction.Max(Range(“A:A”))).Activate
’激活单元格区域A列中最大值的单元格
Application.MacroOptions Macro: = ”GetSum”,Category: = 4 ‘将自定义的GetSum函数指定给Excel中的“统计函数”类别
Application.MacroOptions Macro: = ” GetSum”, _
Description: = ”先求和,然后再输出。” ‘为自定义函数GetSum进行功能说明
Application.WorksheetFunction.CountA(Cell.EntireColumn) ‘返回该单元格所在列非空单元格的数量,所在行使用EntireRow属性
Application.WorksheetFunction.CountA(Cells) ‘返回当前工作表中非空单元格数量
图表篇
ActiveSheet.ChartObjects.Delete ‘删除工作表中所有的ChartObject对象
ActiveWorkbook.Charts.Delete ‘删除当前工作簿中所有的图表工作表 ActiveSheet.ChartObjects.Count ’获取当前工作表中图表的个数
Worksheets( " Sheet1 " ).ChartObjects( 1 ).Chart. _
Export Filename: = " C:MyChart.gif " , FilterName: = " GIF " ‘将指定工作表中的图表1导出到C盘上并命名为MyChart.gif
Application.EnableEvents = True / False ’启用 / 禁用所有事件
Application.DisplayAlerts = True / False ’显示 / 关闭警告框提示框
Application.ScreenUpdating = True / False ’显示 / 关闭屏幕刷新
Application.StatusBar = " 软件报专用 " ’在地址栏中显示文本,标题栏用Caption属性
Application.Cursor = xlIBeam ‘设置光标形状为Ⅰ字形,xlWait为沙漏(等待)形,xlNormal为正常
Application.WindowState = xlMinimized ‘窗口最小化,xlMaximized最大化,xlNormal为正常
Application.ActivateMicrosoftApp xlMicrosoftWord ’开启Word应用程序
Application.TemplatesPath ‘获取工作簿模板的位置
Application.CalculateFull ’重新计算所有打开的工作簿中的数据
Application.RecentFiles.Maximum = 2 ’将最近使用的文档列表数设为2
Application.RecentFiles( 3 ).Open ’打开最近打开的文档中的第3个文档
Application.AutoCorrect.AddReplacement " sweek " , " 软件报 " ’自动将输入的 " sweek " 更正为 " 软件报 "
Application.Dialogs(xlDialogPrint).Show ‘显示打印文档的对话框
Application.OnTime Now + TimeValue ( " 00:00:45 " ), " process " ’45分钟后执行指定过程
Application.OnTime TimeValue ( " 14:00:00 " ), " process " ’下午2点执行指定过程
Application.OnTime EarliestTime: = TimeValue ( " 14:00:00 " ), _
Procedure: = " process " , Schedule: = False ’取消指定时间的过程的执行
工作簿 / 工作表篇
ActiveWorkbook.Sheets.Count ’获取活动工作薄中工作表数
ActiveWorkbook.LinkSources(xlExcelLinks)( 1 ) ‘返回当前工作簿中的第一条链接
ThisWorkbook.Worksheets(“sheet2”).Visible = xlSheetHidden ‘隐藏工作表,与在Excel菜单中执行“格式—工作表—隐藏”操作一样
ThisWorkbook.Worksheets(“sheet2”).Visible = xlSheetVeryHidden ‘隐藏工作表,不能通过在Excel菜单中执行“格式—工作表—取消隐藏”来重新显示工作表
ThisWorkbook.Worksheets(“sheet2”).Visible = xlSheetVisible ‘显示被隐藏的工作表
ThisWorkbook.Sheets( 1 ).ProtectContents ‘检查工作表是否受到保护
ActiveSheet.Columns( " B " ).Cut
ActiveSheet.Columns( " F " ).Insert ‘以上两句将B列数据移至F列,原C列后的数据左移
ActiveSheet.Range(“A:A”).EntireColumn.AutoFit ‘自动调整当前工作表A列的列宽
ActiveSheet.Cells.SpecialCells(xlCellTypeConstants,xlTextValues) ‘选中当前工作表中常量和文本单元格
ActiveSheet.Cells.SpecialCells(xlCellTypeConstants,xlErrors + xlTextValues) ‘选中当前工作表中常量和文本及错误值单元格
ActiveSheet.UsedRange.Rows.Count ‘当前工作表中已使用的行数
ThisWorkbook.Worksheets.Add ThisWorkbook.Worksheets( 3 ), , 2 ‘在第3张工作表之前添加2个新的工作表
ActiveSheet.Move After: = ActiveWorkbook. _
Sheets(ActiveWorkbook.Sheets.Count) ’将当前工作表移至工作表的最后
Worksheets( Array (“sheet1”,”sheet2”)).Select ’同时选择工作表sheet1和sheet2
ActiveSheet.UsedRange.FormatConditions.Delete ‘删除当前工作表中应用的条件格式
Cells.Hyperlinks.Delete ‘取消当前工作表中所有单元格的超链接
ActiveSheet.PageSetup.RightFooter = ActiveWorkbook.FullName ‘在页脚显示文件的路径
ActiveSheet.PrintPreview Enablechanges: = False ‘禁用显示在Excel的“打印预览”窗口中的“设置”和“页边距”按钮
单元格 / 单元格区域篇
ActiveSheet.UsedRange.Row ‘获取已使用的单元格区域的第一行的行号
Range(“A65536”).End(xlUp).Row ‘返回A列最后一行(即记录的总条数)
cell.Range(“A1”).HasFormula ‘检查单元格或单元格区域中的第一个单元格是否含有公式或cell.HasFormula ‘工作表中单元格是否含有公式
Target.EntireColumn.Select ‘选择单元格所在的整个列,Target.EntireRow.Select为选择单元格所在的整行
ActiveCell.Row ‘活动单元格所在的行号,ActiveCell.Column为活动单元格所在的列数
ActiveWindow.ScrollRow = 2 ’将当前工作表窗口滚动到第2行
ActiveWindow.ScrollColumn = 5 ’将当前工作表窗口滚动到第5列
Worksheets( " sheet1 " ).Range( " A1:C5 " ).CopyPicture xlScreen, xlBitmap ’将指定的单元格区域的内容复制成屏幕快照
Selection.Hyperlinks.Delete ‘删除所选区域的所有链接
ActiveSheet.Cells( 1 , 1 ).Font.Bold = TRUE ‘Bold属性用于设置字体是否为加粗, Size属性设置字体大小, ColorIndex属性设置字体颜色(其值为颜色索引号), Italic属性设置字型是否为倾斜, Name属性设置字体名称
ActiveSheet.Cells( 1 , 1 ).Interior.ColorIndex = 3 ‘将单元格的背景色设置为红色
IsEmpty (ActiveCell.Value) ’判断活动单元格中是否有值
ActiveCell.Value = UCase (ActiveCell.Value) ’将当前单元格中的字符转换成大写
ActiveCell.Value = StrConv(ActiveCell.Value, vbLowerCase) ’将活动单元格中的字符串转换成小写
ActiveCell.CurrentRegion.Select ’选择当前活动单元格所在的连续的非空区域,也可以用Range(ActiveCell, UsedRange.End(xlDown)).Select
ActiveCell.Offset( 1 , 0 ).Select ’活动单元格下移一行
Range(“B2”).Offset(ColumnOffset: = 1 )或Range(“B2”).Offset(, 1 ) ‘读取指定单元格右侧单元格中的数据
Range(“B2”).Offset(Rowoffset: =- 1 )或Range(“B2”).Offset( - 1 ) ‘读取指定单元格上一行单元格中的数据
Range(“A1”).Copy Range(“B1”) ’复制单元格A1中的内容到B1中
Range(“A1:D8”).Copy Range(“H1”) ’将指定单元格区域复制到从H1开始的区域中,用Cut方法可以实现剪切操作
ActiveWindow.RangeSelection.Value = " 软件报 " ’将指定字符串输入到所选单元格区域中
窗体(控件)篇
Option Explicit ’强制对模块内所有变量进行声明
Userform1.Show ‘显示用户窗体
Load Userform1 ‘加载一个用户窗体,但该窗体处于隐藏状态
Userform1.Hide ‘隐藏用户窗体
Unload Userform1 或 Unload Me ‘卸载用户窗体
Me.Height = Int ( 0.5 * ActiveWindow.Height) ‘窗体高度为当前活动窗口高度的一半,宽度用ActiveWindow. Width属性
UserForm1.ComboBox1.AddItem Sheets( " Sheet1 " ).Cells( 1 , 1 ) ‘将指定单元格中的数据添加到复合框中
ListBox1.List = MyProduct() ‘将数组MyProduct的值添加到列表框ListBox1中
ListBox1.RowSource = ”Sheet1!isum” ‘将工作表Sheet1中名为的isum区域的值添加到列表框中
ListBox1.Selected( 0 ) ‘选中列表框中的指定的条目
ListBox1.RemoveItem ListBox1.ListIndex ‘移除列表框中选中的条目
If MsgBox (“要退出吗?”,vbYesNo) <> vbYes Then Exit Sub ’返回值不为“是”,则退出
Config = vbYesNo + vbQuestion + vbDefaultButton2 ’使用常量的组合,赋值组Config变量,并设置第二个按钮为缺省按钮
MsgBox “This is the first line.” & vbNewLine & “ Second line.” ’在消息框中强制换行,也可用vbCrLf代替vbNewLine。
MsgBox " 平均值为: " & Format(Application.WorksheetFunction.Average(Selection), " #,##0.00 " ),vbInformation, " 显示选区平均值 " ’应用工作表函数返回所选区域的平均值并按指定显示的格式
公式与函数
Application.WorksheetFunction.IsNumber(“A1”) ’检查指定单元格中的数据是否为数字
Range(“A:A”).Find(Application.WorksheetFunction.Max(Range(“A:A”))).Activate
’激活单元格区域A列中最大值的单元格
Application.MacroOptions Macro: = ”GetSum”,Category: = 4 ‘将自定义的GetSum函数指定给Excel中的“统计函数”类别
Application.MacroOptions Macro: = ” GetSum”, _
Description: = ”先求和,然后再输出。” ‘为自定义函数GetSum进行功能说明
Application.WorksheetFunction.CountA(Cell.EntireColumn) ‘返回该单元格所在列非空单元格的数量,所在行使用EntireRow属性
Application.WorksheetFunction.CountA(Cells) ‘返回当前工作表中非空单元格数量
图表篇
ActiveSheet.ChartObjects.Delete ‘删除工作表中所有的ChartObject对象
ActiveWorkbook.Charts.Delete ‘删除当前工作簿中所有的图表工作表 ActiveSheet.ChartObjects.Count ’获取当前工作表中图表的个数
Worksheets( " Sheet1 " ).ChartObjects( 1 ).Chart. _
Export Filename: = " C:MyChart.gif " , FilterName: = " GIF " ‘将指定工作表中的图表1导出到C盘上并命名为MyChart.gif