ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] VBA 代码段汇集[不断的更新中]

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2018-12-16 19:30 | 显示全部楼层 |阅读模式
本帖最后由 民扬 于 2018-12-18 18:10 编辑

                       vba语句
(1) Option Explicit '强制对模块内所有变量进行声明
(2) Option Base 1 '指定数组的第一个下标为1
(3) On Error Resume Next '忽略错误继续执行VBA代码,避免出现错误消息
(4) On Error GoTo 100 '当错误发生时跳转到过程中的某个位置
(5) On Error GoTo 0 '恢复正常的错误提示
(6) Application.DisplayAlerts=False '在程序执行过程中使出现的警告框不显示
(7) Application.DisplayAlerts=True '在程序执行过程中
(8) Application.ScreenUpdating=False '关闭屏幕刷新
(9) Application.ScreenUpdating = True '打开屏幕刷新
(10)  Workbooks.Add() '创建一个新的工作簿
(11)  Workbooks(“book1.xls”).Activate '激活名为book1的工作簿
(12) ThisWorkbook.Save '保存工作簿
(13) ThisWorkbook.close '关闭当前工作簿
(14)  ActiveWorkbook.Sheets.Count '获取活动工作薄中工作表数
(15)  ActiveWorkbook.name  '返回活动工作薄的名称
(16) ThisWorkbook.Name ‘返回当前工作簿名称
(17) ThisWorkbook.FullName ‘返回当前工作簿路径和名
(18) (18) ActiveSheet.UsedRange.Rows.Count ‘当前工作表中已使用的行数
(19) Rows.Count ‘获取工作表的行数(注:考虑兼容性)
(20)  Sheets(Sheet1).Name= “Sum” '将Sheet1命名为Sum
(21)  ThisWorkbook.Sheets.Add Before:=Worksheets(1) '添加一个新工作表在第一工作表前
(22)  ActiveSheet.Move After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count) '将当前工作表移至工作表的最后
(23)  Worksheets(Array(“sheet1”,”sheet2”)).Select '同时选择工作表1和工作表2
(24)  Sheets(“sheet1”).Delete或 Sheets(1).Delete '删除工作表1
(25)  ActiveSheet.UsedRange.FormatConditions.Delete ‘删除当前工作表中所有的条件格式
(26)  Cells.Hyperlinks.Delete ‘取消当前工作表所有超链接
(27) ActiveCell.CurrentRegion.Select选择当前活动单元格所包含的范围,上下左右无空行
(28)  Cells.Select ‘选定当前工作表的所有单元格
(29)  Range(“A1”).ClearContents '清除活动工作表上单元格A1中的Selection.ClearContents '清除选定区域内容Range(“A1:D4”).Clear '彻底清除A1至D4单元格区域的内容,包括格式
(30)  Cells.Clear '清除工作表中所有单元格的内容
(31) ActiveCell.Offset(1,0).Select '活动单元格下移一行,同理,可下移一列
(32)  Range(“A1”).Copy Range(“B1”) '复制单元格A1,粘贴到单元格B1中
(33) Range(“A1:D8”).Copy Range(“F1”) '将单元格区域复制到单元格F1开始的区域中
(34) Range(“A1:D8”).Cut Range(“F1”) '剪切单元格区域A1至D8,复制到单元格F1开始的区域中
(35) Range(“A1”).CurrentRegion.Copy Sheets(“Sheet2”).Range(“A1”) '复制包含A1的单元格区域到工作表2中以A1起始的单元格区域中注:CurrentRegion属性等价于定位命令,由一个矩形单元格块组成,周围是一个或多个空行或列
(36) ActiveWindow.RangeSelection.Count '活动窗口中选择的单元格数
(37)  Selection.Count '当前选中区域的单元格数
(38) Range(“A1”).Interior.ColorIndex ‘获取单元格A1背景色
(39)  cells.count ‘返回当前工作表的单元格数
(40) Range(“B3”).Resize(11, 3)
(41) Union(Range(“A1:A9”),Range(“D1:D9”)) 区域连接
(42) Intersect(Range(“A1:B9”),Range(“A1:D9”))) ‘返回的交叉区域
(43)  Selection.Columns.Count ‘当前选中的单元格区域中的列数
(44) Selection.Rows.Count ‘当前选中的单元格区域中的行数
(45) ActiveSheet.UsedRange.Row  ‘获取单元格区域中使用的第一行的行号
(46)  Application.WorksheetFunction.IsNumber(“A1”) '使用工作表函数检查A1单元格中的数据是否为数字
(47) Range(“A:A”).Find(Application.WorksheetFunction.Max(Range(“A:A”))).Activate'激活单元格区域A列中最大值的单元格
(48) MsgBox “Hello!” '消息框中显示消息Hello
(49) Ans=MsgBox(“Continue?”,vbYesNo) '在消息框中点击“是”按钮,则Ans值为vbYes;点击“否”按钮,则Ans值为vbNo。
(50)  Userform1.Show ‘显示用户窗体
(51) Load Userform1 ‘加载一个用户窗体,但该窗体处于隐藏状态
(52)  Userform1.Hide ‘隐藏用户窗体
(53) Unload Userform1 或 Unload Me ‘卸载用户窗体
(54) UserForm1.Show 0‘将窗体设置为无模式状态
(55)  Application.EnableEvents=False '禁用所有事件
(56) Application.EnableEvents = True '启用所有事件
(57) Set d = CreateObject(Scripting.Dictionary) ‘创建一个 Dictionary 对象变量
(58)  d.Add "a", "Athens" '为对象变量添加关键字和条
(59)  Application.OnKey “^I”,”macro” '设置Ctrl+I键为macro过程的快捷键
(60)  Application.CutCopyMode=False ‘退出剪切/复制模式
(61)  Application.Volatile True '无论何时工作表中任意单元格重新计算,都会强制计算该函数
(62) Application.Volatile False '只有在该函数的一个或多个参数发生改变时,才会重新计算该函数
(63)  Err.Clear ‘清除程序运行过程中所有的错误
(64) Workbooks.Close ‘关闭所有打开的工作簿
(65) ActiveWorkbook.Path ‘返回当前工作簿的路径(注:若工作簿未保存,则为空)
(66) ActiveWorkbook.Saved ‘返回工作簿的存储值(若已保存则为False)
(67) Application.Visible = False ‘隐藏工作簿
(68) Application.Visible = True ‘显示工作簿
(69)  ActiveSheet.Columns("B").Insert ‘在A列右侧插入列,即插入B列
(70) ActiveSheet.Columns("E").Cut  
(71) ActiveSheet.Columns("B").Insert  70,71两句将E列数据移至B列,原B列及以后的数据相应后移
(72) ActiveSheet.Calculate ‘计算当前工作表
(73) ThisWorkbook.Worksheets(“sheet1”).Visible=xlSheetHidden ‘正常隐藏工作表,同在Excel菜单中选择“格式——工作表——隐藏”操作一样
(74) ThisWorkbook.Worksheets(“sheet1”).Visible=xlSheetVeryHidden ‘隐藏工作表,不能通过在Excel菜单中选择“格式——工作表——取消隐藏”来重新显示工作
(75) ThisWorkbook.Worksheets(“sheet1”).Visible=xlSheetVisible ‘显示被隐藏的工作表
(76)  ThisWorkbook.Sheets(1).ProtectContents ‘检查工作表是否受到保护
(77)  ThisWorkbook.Worksheets.Add Count:=2, Before:=ThisWorkbook.Worksheets(2) 或 ThisWorkbook.Workshees.Add ThisWorkbook.Worksheets(2), , 2  ‘在第二个工作表之前添加两个新的工作表
(78) ThisWorkbook.Worksheets(3).Copy ‘复制一个工作表到新的工作簿
(79)  ThisWorkbook.Worksheets(3).Copy ThisWorkbook.Worksheets(2) ‘复制第三个工作表到第二个工作表之前
(80) ThisWorkbook.Worksheets(1).Activate ‘当前工作簿中的第一个工作表被激活
(81)  ThisWorkbook.Worksheets("Sheet1").Rows(1).Hidden = True ‘将工作表Sheet1中的1隐藏
(82) ActiveCell.EntireRow.Hidden = True ‘将当前工作表中活动单元格所在的行隐藏
(83)   ActiveSheet.Range(“A:A”).EntireColumn.AutoFit ‘自动调整当前工作表A列列宽
(84) ActiveSheet.Cells.SpecialCells(xlCellTypeConstants,xlTextValues) ‘选中当前工作表中常量和文本单元格
(85) ActiveSheet.Cells.SpecialCells(xlCellTypeConstants,xlErrors+xlTextValues) ‘选中当前工作表中常量和文本及错误值单元格
(86)  Application.WorksheetFunction.CountA(Range(“A:A”))+1 ‘获取A列的下一个空单元格
(87) Set FirstCell=Range(RefEdit1.Text).Range(“A1”) ‘设置某单元格区域左上角单元格
(88)  Application.OnTime Now + TimeValue("00:00:15"), "myProcedure" ‘等待15秒后运行myProcedure过程
(89) Application对象
(90)  Application.UserName ‘返回应用程序的用户名
(91)  Application.Caller.Parent.Parent ‘返回调用函数的工作簿名称
(92)  Application.StatusBar=”请等待……” ‘将文本写到状态栏
(93)  Application.StatusBar=False ‘将状态栏重新设置成正常状态
(94)  Application.Transpose(Array(“Sun”,”Mon”,”Tur”,”Wed”,”Thu”,”Fri”,”Sat”)) ‘返回一个垂直的数组
(95)  Application.ActiveCell.Address ‘返回活动单元格的地址(注:返回的是绝对地址)
(96)  Application.ActiveSheet.Name ‘返回活动工作表的名称
(97)  Application.ActiveWindow.Caption ‘返回活动窗口的标题
(98) Application.ActiveWorkbook.Name ‘返回活动工作簿的名称
(99)  Application.Selection.Address ‘返回所选区域的地址
(100) Application.ThisWorkbook.Name ‘返回当前工作簿的名称
(101)  Range(A1:A10).Value=Application.WorksheetFunction.Transpose(MyArray) ‘将一含有10个元素的数组转置成垂直方向的工作表单元格区域(A1至A10)注:因为当把一维数组的内容传递给某个单元格区域时,该单元格区域中的单元格必须是水平方向的,即含有多列的一行。若必须使用垂直方向的单元格区域,则必须先将数组进行转置,成为垂直的。
(102) Cells(rows.count,1).End(xlUp).Row+1 ‘返回A列最后一行的下一行
(103)  rng.Range(“A1”) ‘返回区域左上角的单元格
(104)  ActiveSheet.Range("A:B").Sort Key1:=Columns("B"), Key2:=Columns("A"), Header:=xlYes ‘两个关键字排序,相邻两列,B列为主关键字,A列为次关键字,升序排列
(105)  cell.Range(“A1”).HasFormula ‘检查单元格或单元格区域中的第一个单元格是否含有公式或cell.HasFormula ‘工作表中单元格是否含有公式
(106)  Cell.EntireColumn ‘单元格所在的整列
(107) Cell.EntireRow ‘单元格所在的整行
(108) rng.Address ‘返回rng区域的地址
(109)  Range(“D5:D10”).Cells(1,1) ‘返回单元格区域D5:D10中左上角单元格
(110)  ActiveCell.Row ‘活动单元格所在的行数
(111) ActiveCell.Column ‘活动单元格所在的列数
(112)  Set MyRange=Range(“A1:A5”) ‘创建一个名为MyRange的对象变量
(113)  Application.Calculation = xlCalculationManual ‘设置工作簿手动计算
(114) Application.Calculation = xlCalculationAutomatic ‘工作簿自动计算
(115)  Worksheets(1).EnableCalculation = False ‘不对第一张工作表自动进行重算
(116) ActiveSheet.Shapes.AddPicture "d:\sx.jpg", True, True, 60, 20, 400, 300 '在当前工作表中插入一张d盘中名为sx的图片
(117) sheets("sheet2").Range("2:65536").ClearContents'清空单元格内容
(118) sheets("sheet2").Range("2:65536").Delete '删除单元格的内容及格式
(119) sheets("sheet2").Range("2:65536").Clear '清空单元格的内容及格式
(120) [iu1].end(1).column '最后一列
(121) [a65536].end(3).row'A列最后一行
        worksheet.range("A65536").End(xlUp).row'A列最后一行

        对比一下Value属性,Text属性和Formula属性
(122) Value是单元格的数字内容
(123) Text是文本内容
(124) Formula是最原本的,输入内容







评分

4

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-16 20:52 | 显示全部楼层
本帖最后由 民扬 于 2018-12-19 18:31 编辑

Private Sub Worksheet_Change(ByVal Target As Range) ‘根据B列数据填充,A列自动生成序号
If Target.Column = 2 Then
Cells(Target.Row, 1) = Target.Row
End If
End Sub

Sub nnn() '方法一:查找出区域列内最后一行
Dim arr, c%
arr = UsedRange
c = Cells(UBound(arr), 256).End(xlToLeft).Column
msgbox c
End Sub
Sub kkk()'方法二:查找出区域列内最后一行
    Dim theCell As Range
    With ActiveSheet
If .FilterMode Then .ShowAllData
End With
    Set theCell = Cells.Find("*", Cells(1), xlFormulas, xlPart, xlByRows, xlPrevious, False, False, False)
    If Not theCell Is Nothing Then MsgBox theCell.Column
End Sub


Sub selectionSaveAs() '选中区域另存工作薄
    Dim sRng As Range                 '定义区域为选择区域
    Set sRng = Selection
    Dim tBook As Workbook
    Set tBook = Workbooks.Add         '新建工作薄
    Dim fName$                        '定义工作薄完整名
    fName = Application.Dialogs(5).Show '是调用另存为对话框,
'    fName = ThisWorkbook.Path & "\Sheet3导出" & Format(Date, "yyyy-MM-dd") & "_" & Format(Time, "hhmmss") & ".xlsx"         'Sheet3日期_时间.xlsx
    With tBook
    sRng.Copy .Sheets(1).[A1]      '复制选中区域
'        Close True, fName             '关闭并保存新工作薄
    End With
'  Shell "explorer.exe /select," & fName, vbNormalFocus    '在浏览器中选中导出工作薄
'  Set tBook = Nothing
End Sub

Sub 工作表另存为()
p = "z:\test\" '文件路径,根据实际修改,必须已存在的路径(可以不选择直接运行下方代码)
Application.ScreenUpdating = False
For Each s In ThisWorkbook.Worksheets
With s
.UsedRange.Value = .UsedRange.Value
.Copy
ActiveWorkbook.SaveAs p & .Name & ".xls", xlExcel8 '建副本,可以关闭
End With
ActiveWorkbook.CloseExit for '如果是单个工作表加"Exit for",所有工作表不加。
Next
Application.ScreenUpdating = True
MsgBox "保存成功"
End Sub

Public Enum WorkDays  '枚举案例一
    星期日
    星期一
    星期二
    星期三
    星期四
    星期五
    星期六
End Enum
Sub test() '两段编码同时用
Dim wd As WorkDays  '赋值
For a1a = 0 To 6
wd = a1a  '数值变化时,就是选择星期一至星期日
If [a1] = wd Then  '当[a1]单元格设置为5时
MsgBox [a1]  '消息框中显示消息“5”
  End If
Next
End Sub
Private Sub CommandButton7_Click() '打印页面
Dim c1c, d1d
c1c = Sheet6.Range("a" & Rows.Count).End(3).Row + 1
    If [a7] <> "" And [a43] <> "" And [a79] <> "" Then
        MsgBox "现在打印<第一页><共三页>"
       ActiveSheet.PageSetup.PrintArea = "a1:h108"     '设置打印区域
       ActiveWindow.SelectedSheets.PrintOut From:=1, To:=3, Copies:=1, Collate:=True
       ActiveSheet.PageSetup.PrintArea = ""       '取消打印区域的设置"
        MsgBox "打印完毕!"
    ElseIf [a7] <> "" And [a43] <> "" And [a79] = "" Then
     MsgBox "现在打印<第一页><共二页>"
       ActiveSheet.PageSetup.PrintArea = "a1:h72"     '设置打印区域
       ActiveWindow.SelectedSheets.PrintOut From:=1, To:=3, Copies:=1, Collate:=True
       ActiveSheet.PageSetup.PrintArea = ""       '取消打印区域的设置"
        MsgBox "打印完毕!"
    Else
    MsgBox "现在打印<第一页><共一页>"
       ActiveSheet.PageSetup.PrintArea = "a1:h36"     '设置打印区域
       ActiveWindow.SelectedSheets.PrintOut From:=1, To:=3, Copies:=1, Collate:=True
       ActiveSheet.PageSetup.PrintArea = ""       '取消打印区域的设置"
        MsgBox "打印完毕!"
        End If
End Sub






补充内容 (2018-12-20 10:22):
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 2 Or Target.Row < 2 Then Exit Sub

With Worksheets("201812")
Dim i%, j%, x%
i = Range("g65536").End(xlUp).Row '取得B列最后..

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-16 21:21 | 显示全部楼层
本帖最后由 民扬 于 2018-12-17 06:53 编辑



                    vBA里常用单词
Sub 开始
End结束
Range单元格,单元格区域
Msgbox 输出函数
Inputbox输入函数
Cells所有单元格
Sheets工作表集合
Worksheets工作表集合
Workbooks工作簿集合
Thisworkbook: 代码所在的工作簿
Activeworkbook活动工作簿
Ativecell活动单元格
Dim定义变量关键字
Redim重新定义变量关键字
Integer整型,简写 %
Long 长整型,简写&
Single单精度 简写!
Double 双精度 简写#
String字符串型 $
Variant 变体型,有的叫做万能型,如果不定义就是这个变体型
Object 对象
Usedrange 用过的区域
Union 联合
Intersect 交叉
Resize 重新定义区域大小
CurrentRegion:相连的
Value 值
Call呼叫
Visible可见性
Rows所有的行
Columns 所有列
Createobject引用动态库文件函数
Dictionary 字典
Regexp 正则
Application Excel里最高对象
Format格式函数
Timer记时器
WorksheetFunction工作表函数
Transpose工作表里的转置函数
Add添加
Before前面
After 后面
Kye关键字
Item条目对
Remove清空
Removeall清空所有
Exists存在
Count点数
Array数组函数
Preserve保存
Ubound 上界
Lbound下界
Erase清空数组
Split 分割
Join 连接,组合
Filter筛选
Index 工作表引用函数
Function函数
Volatile易失性
ColorIndex颜色索引
Interior底纹
Font字体
Show显示
Unload关闭窗体
Onkey按钮事件
Ontime事件
Delete删除
Open打开
SaveSs保存

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-12-17 09:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
支持一下,谢谢分享。。。。。。。

TA的精华主题

TA的得分主题

发表于 2018-12-17 10:09 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-17 23:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
259个Excl常用宏

259个Excel常用宏.rar

95.72 KB, 下载次数: 536

TA的精华主题

TA的得分主题

发表于 2018-12-18 09:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
向大神们学习

TA的精华主题

TA的得分主题

发表于 2018-12-18 12:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
赞一个,标记一下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-20 12:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Private Sub Worksheet_Change(ByVal Target As Range) '根据g列(可改任意列)数据填充,A列自动生成序号
If Target.Column <> 2 Or Target.Row < 2 Then Exit Sub
With Sheet6  '工作表名称
Dim i%, j%, x%
i = Sheet6.Range("g65536").End(xlUp).Row '取得g列最后一个非空单元格行号
j = Sheet6.Range("g65536").End(xlUp).Row - 1
If i < 2 Then Exit Sub '当没有数据,只有标题行存在时,退出程序
If Cells(i - 1, 7) = "客户名称" And Cells(i, 7) <> "" And Cells(i - 6, 1) = "序号" Then
    Cells(i, 2).Offset(0, -1) = i - j  '偏移单元格
ElseIf Cells(i, 7) <> "" And Cells(i, 1) = "" Then
x = Cells(i - 1, 1)
x = x + 1
Cells(i, 2).Offset(0, -1) = x
End If
End With
End Sub

TA的精华主题

TA的得分主题

发表于 2018-12-20 13:14 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 11:29 , Processed in 0.049060 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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