为您推荐:
精华内容
最热下载
问答
  • 5星
    49KB weixin_58444518 2021-05-21 11:46:39
  • 5星
    1.45MB zhangjin7422 2021-04-07 09:24:30
  • 文章目录Vba菜鸟教程编辑器宏vba基本语法运算符变量语句简写语句sub语句调用语句退出语句分支语句循环语句判断语句公式与函数在单元格输入公式利用单元格公式返回值调用工作表函数利用vba函数自定义函数操作对象操作...

    Vba菜鸟教程

    官方文档:https://docs.microsoft.com/zh-cn/office/vba/api/overview/language-reference
    代码完成后:工具-vbaproject属性-保护-查看时锁定-密码

    编辑器

    • 注释‘单引号开头,可通过调出编辑窗口批量注释和取消
    • 强制转行:插入两个空格,下划线,回车
    • debug
      • 在工具栏中,右键,调试工具栏
      • 首行加上optionexplicit使得编译更严格,变量申明
      • f8单步运行,在最左边点一下设置断点/f9
      • Debug Print “立即窗口输出过程的值:”&x
      • 本地窗口可以显示中断,逐步调试时的对象信息,变量值,数组信息,Stop可以中断

    • 开发者工具,设置安全性启用宏,保存文件需要保存为启用宏的工作簿
    • 使用相对流录制宏,不固定位置,相对位置操作
    • 加载宏(本地代码库)
      • 代码保存在模块
      • 保存文件格式为xla或xlam
      • 开发者工具——加载项——加载(要删除需要取消加载)
      • 快速访问工具栏——从下列位置选择命令-宏-添加为左上角倒三角小图标-将宏增加为一个小工具图标
    • 自定义功能区

    vba基本语法

    运算符

    • and 与
    • or 或
    • & 连接变量和字符串,前后有空格
    • <> 不等于
    • in 在什么里
    • like 可使用通配符
      • *任意个字符
      • ?一个字符
      • #一个数字
      • [A-W a-w]a-w或A-W中的一个字符
      • [!0-9] 字符不是0-9之间

    变量

    在这里插入图片描述

    Dim x As Integer 整数
    
    Dim st As String 文本
    
    Dim rg As Range 对象
    Set rg = Range("A1") ·对象赋值
    
    Dim arr(1 to 10) As Integer 数组
    
    Long 长整数, Single 单精度,Double 双精度,Date 时间
    
    
    • Public x As Interger '声明全局变量,所有模块都能用,不建议,可以使用函数取变量
    • isnumeric(x) 判断x是否是数字,在vba.Information中
    • set i = Range(“A1”) 'set,可以将对象赋值给变量
    • 判断变量未赋值 is nothing

    数组

    dim arr() '定义数组,不能单独给每个变量赋值,用区域赋值
    dim arr(10) '下标从0开始'
    ReDim [Preserve] arr(1 To j) '数组中不能直接定义变量。需要重定义才能加变量,Preserve保留原本有的值,只改大小
    dim arr(1 to  20)
    
    arr = Range("A1:D9") '给数组赋值
    Range("A11") = arr(7,2) '数组第七行,第二列
    
    '最大值
    Range("h3") = Application.WorksheetFunction.Max(arr)
    'match是找到值在数组中的位置,参数是要找的值,要找的数组,精确为0
    Range("h2") = Range("a" & Application.WorksheetFunction.Match(Range("h3"), arr, 0) + 1)
    
    '数组的上界,下界
    MsgBox UBound(arr)
    MsgBox LBound(arr)
    
    

    字典

    • 一个特殊的数组,去重复值
    '在VBE界面中 工具—引用勾选Microsoft scripting runtime,没有就浏览scrrun.dll-确定
    Dim dic As New Dictionary
    
    '推荐使用方法
    Dim dic
    Set dic = CreateObject("Scripting.Dictionary")
    
    
    '增加一项
    dic.Add Key, Item 
    '通过值取得,修改item
    Range("A1") = dic(key)
    dic(key) = 200
    
    '通过作为key存入字典,去掉重复值,keys取出
    For i = LBound(arr) To UBound(arr)
        If arr(i, 2) = Me.ListBox1.Value Then
            dic(arr(i, 3)) = 1
        End If
    Next
    Me.ListBox2.List = dic.keys
    

    语句

    简写语句

    '把语句中相同的部分提到前面
    With Selection.Font
            '字体
            .Name = "华文琥珀"
            '字号
            .Size = 9
    End With
    

    sub语句

    • 实现一个功能
    • private sub私有,本模块才能调用
    • public sub公有,默认
    Sub test(str as String)
        Range("A1") = 100
    End Sub
    

    调用语句

    调用其他程序
    Sub test1()
        Call test
    End Sub
    

    退出语句

    • End 退出所有程序
    • Stop 中断
    • Exit Sub 退出相应的sub,function,for,do
    • Exit function
    • Exit for
    • Exit do

    跳转语句

    goto-跳转到指定地方

    Sub test()
        Dim st
    100:
        st = Aplication.InputBox("请输入数字", "输入提示")
        If len(st) = 0 Then GoTo 100
    End Sub
    

    gosub-return-跳过去,返回来

    Sub test()
        Range("A1") = 100
        GoSub 100
        Range("A1") = 20
        Exit Sub
    100:
        Range("A1") = 50
        Return
    End Sub
    

    错误处理语句

    On Error Resume Next遇到错误,跳过,继续执行下一句

    Sub test()
      On Error Resume Next
      Range("A1") = 10
    End Sub
    

    On Error GoTo遇到错误,跳到指定行数

    Sub test()
      On Error GoTo 100
      Range("A1") = 10
      Exit Sub
    100:
      Range("A1") = 1
    End Sub
    

    On Error GoTo 0,取消错误跳过,使得On Error Resume Next没有作用

    Sub test()
      On Error Resume Next
      Range("A1") = 10
      If Range("A1").Value > 0 Then On Error GoTo 0
    End Sub
    

    循环语句

    for-to-next循环

    Sub test2()
    Dim x As Interger`声明变量
        For x = 1000 To 10 Step -1
            Cells(x, 1) = x
        Next x
    End Sub
    
    

    for-each-next循环

    Sub test2()
    Dim rg As Range
        For Each rg In Range("d2:d18")
            rg = re.Offset(0,-1)*rg.Offset(0,-2) 
        Next rg
    End Sub
    

    do-loop循环

    Sub test2()
    Dim x As Interger
        x = 1
        Do
            x = x + 1
            Cells(x, 4) = Cells(x, 2) * Cells(x, 3)
        Loop Until x = 18
    End Sub
    

    do-while循环

    Sub test2()
    Dim x As Interger
        x = 1
        Do while x < 18
            x = x + 1
            Cells(x, 4) = Cells(x, 2) * Cells(x, 3)
            If Cells(x, 4) = 25 Then
                Cells(x, 4) = 0
                Exit Do `跳出循环
        Loop
    End Sub
    

    判断语句

    if判断

    单条件判断
    Sub 判断1()
        If Range("A1").value > 0 Then
            Range("B1") = "正数"
        Else
            Range("B1") = "负数"
        End IF
    End Sub
    
    多条件判断
    Sub 判断1()
        If Range("A1").value > 0 Then
            Range("B1") = "正数"
        ElseIf Range("A1").value = 0 Then
            Range("B1") = "0"
        Else
            Range("B1") = "负数"
        End IF
    End Sub
    
    多条件判断
    Sub 判断1()
        If Range("A1") <> "" And Range("A2") <> "" Then
            Range("B1") = Range("A1")*And Range("A2")
        End IF
    End Sub
    
    单语句判断
    Sub 判断1()
        Range("B1").value = IIf(Range("A1") <= 0, "负数或0", "正数")
    End Sub
    

    select判断

    Sub 判断1()
        Select Case Range("A1").value
        Case 0 To 1000 
            Range("B1") = "正数"
        Case Is = 0 
            Range("B1") = "0"
        Case Else
            Range("B1") = "负数"
        End Select
    End Sub
    

    公式与函数

    在单元格输入公式

    输入普通公式

    Sub test()
        Range("A1") = "=B2*C2"
        Dim x As Interger
        For x = 2 To  6
            Cells(x, 1) = "=b"&x&"*C"&x `连接变量和字符串需要&
        Next x
    End Sub
    

    输入带引号的公式,引号加倍

    Sub test()
        Range("A1") = "=SUMIF(A2:A6,""b"",B2:B6)"
    End Sub
    

    输入数组公式,加上FormulaArray

    Sub test()
        Range("A1").FormulaArray = "=SUM(A2:A6*B2:B6)"
    End Sub
    

    利用单元格公式返回值

    • 使用Evaluate()
    Sub test()
        Range("A1") = Evaluate( "=SUMIF(A2:A6,""b"",B2:B6)")
        Range("A1") = Evaluate("=SUM(A2:A6*B2:B6)")
    End Sub
    

    调用工作表函数

    • 在Application.WorksheetFunction中,表,区域等使用vba中的写法
    Sub test()
    '跳过出错
    On Error Resume Next 
        Range("A1") = Application.WorksheetFunction.Sum(Range("d2:d6"))
        '统计sheet2表a列记录数
        Application.WorksheetFunction.CountA(Sheets(2).Range("a:a")) - 1
        '统计sheet3表f列是男的记录数
        Application.WorksheetFunction.CountIf(Sheets(3).Range("f:f"), "男")
        '查询的内容,查询范围,返回第几列,精确为0
        Application.WorksheetFunction.VLookup(Sheet1.Range("d9"), Sheets(2).Range("a:h"), 8, 0)
    End Sub
    

    利用vba函数

    Sub test()
        'E在A22单元格的位置,没有返回0
        Range("A1") = VBA.String.InStr(Range("A22"), "E") 
        
        '在VBA.Strings中,按符号分割字符串,返回数组
        'Range("A1") = Split(Range("A1"),"-")(0)
        
        With Sheet1
        'DateSerial根据数字转化为日期,取字符串的左边,中间,右边,取得地址,字符串个数,mid第二个参数从第几个字符串开始取
            .Range("b" & i) = DateSerial(Left(.Range("a" & i), 4), Mid(.Range("a" & i), 5, 2), Right(.Range("a" & i), 2))
        End With
        
        '带路径返回文件名,文件不存在返回空,可以使用通配符*,匹配到多个文件时,返回一个,继续使用dir不带参数,返回下一个,没有了返回空,再使用dir报错
        str = Dir("E:\code\exce_vba\*.xls*")
        
        '查找
        Set rng = Range("d:d").Find(Range("l3"))
        
        'timer算运行时间
        t = timer
        Range("A1") = timer - t
    End Sub
    

    常用的几类vba

    在这里插入图片描述

    自定义函数

    • 返回一个结果
    function shcount(x as Integer,str as string)
        shcount = Sheets.Count+x
    End function
    

    操作对象

    类模块

    • vba编辑界面-右键插入-类模块-属性菜单改类名
    • sub创建方法
    • 创建属性
    '类似函数,get只读属性,Let可写,Set对象变量
    Property Get Scount()
    Scount = Sheets.Count
    End Property
    
    
    • 创建对象:dim aa as new 类名称
    • 右键-导入\导出类模块

    excel应用对象

    • application
    • 隐藏窗口application.visible = false
    • 关闭应用application.quit

    操作工作簿

    • Workbooks 工作簿集合,Workbooks(N),打开的第n个工作簿
    • Workbooks(“工作簿名称”)
    • ThisWorkBook 代码所在工作簿
    • ActiveWorkbook 正在操作的工作簿

    方法

    Workbooks.Open Filename:="E:\code\exce_vba\1.xlsx" `打开
    Workbooks.Add `新建
    ActiveWorkbook.Sheet(1).Range("A1") = "wy" `操作
    ActiveWorkbook.Save `保存,一般在文档
    ActiveWorkbook.SaveAs Filename:="E:\code\exce_vba\1.xlsx" `另存为
    ActiveWorkbook.close  `关闭
    
    `屏幕更新以及取消,成对出现
    Application.ScreenUpdating = False 
    Application.ScreenUpdating = True
    
    '改文件名
    name "文件位置" as "改名后文件位置"
    

    属性

    操作工作表

    • Sheets(“工作表名称”)
    • Sheets(N),打开的第n个工作表,在左下角的位置
    • Sheet1 第一个插入的工作表,与位置无关,相当于本名
    • ActiveSheet 正在操作的工作表
    • Worksheets 不包括宏的工作表

    方法

    Sheet1.Select `选中表1
    
    Sheets.Add after:=Sheet3, Count:=4 `在第三张表后插入四张表
    
    `删除表格,需要先取消弹窗
    Excel.Application.DisplayAlerts = False
    Sheets(Sheets.Count).Delete
    Excel.Application.DisplayAlerts = True
    
    `复制一张新表
    Sheet4.Copy after:=Sheets(Sheets.Count)
    
    

    属性

    Sheets.Count `表的数量
    Sheet1.Name = "1月" `表的名称
    Sheet1.Visible = xlSheetVeryHidden '只有改变为true才可见
    Sheet1.Visible = xlSheetVisible '值为-1,使可见
    Sheet2.Protect "test" '保护
    Sheet2.Unprotect Password:="test" '取消保护
    

    操作单元格

    • Cells 所有单元格
    • Range(“单元格地址”),
    • Range(“A1:F2,D3,F4”)
    • Range(“A1”,“D1”)
    • [A1:D1] 固定的,不能加变量
    • Range(Cells(1,4),Cells(1,4))
    • Cellls(行数,列数)
    • Activecell 正被选中或编辑的单元格
    • Selection 正被选中的单元格或区域

    属性

    Value 值
    Name 名称
    Interior.ColorIndex = 3 单元格内部的颜色
    Font.ColorIndex = 3 单元格字体的颜色
    

    方法

    对象.方法 参数名称:=参数值

    ` 删除,清除内容
    Range ("A1:f122").Delete 
    Range("A1:f122").ClearContents
    
    `复制
    Range("A1:D1").Copy Destination:=Range("A2")
    Range("A1:D1").Copy Range("A2")
    
    `合并单元格
    range("A1:B1").Merge
    
    `偏移offset,下移,右移
    Range("A1").Offset(1, 1)
    
    `跳跃到相连数据块边缘,跳过空格
    Range("C1").End(xlDown)
    Range("A65536").End(xlUp).Row 最后一行
    
    `重新选区,以单元格为顶点几行,几列
    Range("A1").Resize(2,3)
    
    `整行,整列
    Range("A1").EntireRow
    Range("A1").EntireColumn
    
    `筛选
    Range("$A$1:$F$1048").AutoFilter Field:=4, Criteria1:="一车间"
    
    

    图形对象

    常见属性

    Dim shp As Shape
    
    For Each Shp In Sheet1.Shapes
        Shp.Name 名称
        Shp.TopLeftCell.Address  左上角地址
        Shp.Type 类型
        Shp.Delete 删除
        Shp.Left 位置左
        Shp.Top 位置上
        Shp.Width 位置宽
        Shp.Visible 可见性
        shp.FormControlType 表单控件类型
    Next
    

    常用方法

    '插入图片,帮助文档看详细参数
    Sheet1.Shapes.AddPicture("图片位置",msoFalse,  msoTrue, 左,上,宽,高)
    
    '简单控件
    shp.Characters.Text
    
    

    事件

    关闭事件

    `在事件中加入,使事件执行过程中不执行事件
    Application.EnableEvents = False
    Application.EnableEvents = True
    

    工作簿事件

    在这里插入图片描述

    工作表事件

    在这里插入图片描述

    控件

    • 设置格式-属性-大小和位置均固定

    窗体

    • vba编辑界面-右键插入-用户窗体
    • 双击窗体或里面的控件进行编程
    • ShowModal 显示模式,为true不可以点击其他窗口,独占
    • Show 显示
    • Hide 隐藏
    • UserForm_Activate 激活
    • UserForm_QueryClose 退出

    ActiveX控件

    属性,右键属性查看,常用有:

    • Enabled 可用性
    • Caption 标题
    • Visible 可见性

    OptionButton(单选按钮)

    • GroupName 组名,同组按钮互斥
    • Value 返回值

    Label (标签)

    SpinButton (微调按钮)

    • Value 返回值

    • MIN 最小值

    • MAX 最大值

    • change事件

    TextBox(文本框)

    • PasswordChar 密码字符,显示为密码形式
    • TabIndex 按下Tab键时的切换顺序

    CheckBox(复选框)

    ComboBox(下拉框)

    • List 数据源列表

    • AddItem 增加一个下拉项目

    • RemoveItem 移除一个项目

    • Clear

    ListBox (列表框)

    • ColumnCount 列,分为几列,list(2,3)变二维列表

    • List 数据源列表,数组

    • ListBox1.Selected(i) = True '查看i项是否被选中,被选中为true

    • AddItem 增加一个下拉项目

    • RemoveItem 移除一个项目

    • Clear

    CommandButton (按钮)

    用户信息交互

    msgbox弹窗

    msgbox("显示文字",显示样式几个样式用加号连接,标题,帮助文档位置,帮助文档索引值0)
    

    显示样式

    常数	值	描述
    vbOKOnly	0	只显示 确定 按钮
    VbOKCancel	1	显示 确定 及 取消 按钮。
    VbAbortRetryIgnore	2	显示 放弃、重试 及 忽略 按钮。
    VbYesNoCancel	3	显示 是、否 及 取消 按钮。
    VbYesNo	4	显示 是 及 否 按钮。
    VbRetryCancel	5	显示 重试 及 取消 按钮。
    VbCritical	16	危险图标
    VbQuestion	32	询问图标
    VbExclamation	48	警告图示
    VbInformation	64	信息图标
    vbDefaultButton1	0	第一个按钮是缺省值。
    vbDefaultButton2	256	第二个按钮是缺省值。
    vbDefaultButton3	512	第三个按钮是缺省值。
    vbDefaultButton4	768	第四个按钮是缺省值。
    vbApplicationModal	0	应用程序强制返回;应用程序一直被挂起,直到用户对消息框作出响应才继续工作。
    vbSystemModal	4096	系统强制返回;全部应用程序都被挂起,直到用户对消息框作出响应才继续工作。
    vbMsgBoxHelpButton	16384	将Help按钮添加到消息框
    VbMsgBoxSetForeground	65536	指定消息框窗口作为前景窗口,就是显示在窗口的最上层
    vbMsgBoxRight	524288	文本为右对齐
    vbMsgBoxRtlReading	1048576	指定文本应为在希伯来和阿拉伯语系统中的从右到左显示
    

    返回值

    常数	值	说明
    vbOK	1	确定
    vbCancel	2	取消
    vbAbort	3	终止
    vbRetry	4	重试
    vbIgnore	5	忽略
    vbYes	6	是
    vbNo	7	否
    

    inputbox输入框

    'val文本型数字转为数字型
    i = val(inputbox ("文字","标题","默认值",左边距,上边距,帮助文档位置,帮助文档索引值0)) 
    
    i = Application.Inputbox(提示文字,标题文字,默认值,左边距,上边距,帮助文件,帮助文件索引,输入类型)
    

    类型值:可使用加号连接

    值	含义
    0	公式
    1	数字
    2	文本 (字符串)
    4	逻辑值 (True 或 False)
    8	单元格引用,作为一个 Range 对象
    16	错误值,如 #N/A
    64	数值数组
    

    GetOpenFilename打开文件

    GetOpenFilename (文件类型,优先类型,对话框标题,按钮文字[不生效],是否支持多选)
    '返回文件完整路径,取消返回False,多选时返回数组,第一个文件下标为1
    '文件类型参数中,先指定文件类型名,再指定后缀,要成对出现
    '优先类型是指文件类型中列出的各种类型,哪种优先显示
    A= Application.GetOpenFilename("新表,*.xlsx,老表,*.xls", 1, "快特么选!", "确定", False)
    
    

    Dialogs(对话框)

    '对话框中所做的操作会真实执行,具体的值见附表
    Application.Dialogs(xlDialogSaveAs).Show
    Application.Dialogs(150).Show
    
    

    使用ADO操作外部数据

    使用ADO连接外部Excel数据源

    1 在VBE界面中 工具—引用
       勾选Microsoft ActiveX Data Object  x.x  Library 
    2 连接代码
      Sub test()
    Dim conn As New ADODB.Connection
    conn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=D:\data\data.xlsx;extended properties=""excel 12.0;HDR=YES"""
    ‘这里使用SQL对数据进行操作
    '抓取数据:CopyFromRecordse从数据集中拷贝
    'conn.Execute中执行sql语句
    'data是sheet名称,表使用[sheet名称$]
    
    Range(“a1”).CopyFromRecordset conn.Execute(“select * from [data$]”)
    
    conn.Close
    End Sub
    
    Data Source是要操作的数据地址
    HDR=YES是有表头,取数据表头忽略
    
    

    常用sql语句

    查询数据
    select * from [data$]
    查询某几个字段
    select 姓名,年龄 from [data$]
    带条件的查询
    select * from [data$] where 性别 = '男'
    合并两个表的数据,上下形式
    select * from [data$] union all select * from [data2$]
     插入新纪录
    insert into [data$] (姓名,性别,年龄) values ('AA','男',33) 
    修改一条数据
    update [data$] set 性别=‘男’,年龄=16 where 姓名=‘张三‘
    删除一条数据(不能用),可以通过多加一列,表示不删除,删除时更改值为删除,取得时候where值等于不删除
    delete from [data$]  where 姓名='张三'
    使用LEFT JOIN …ON…  (类似于VLOOKUP)
    select [data3$].姓名,性别,年龄,月薪 from [data$] left join [data3$] on [data$].姓名=[data3$].姓名
    先UNION ALL 再LEFT JOIN
    select * from (select * from [data$] union all select * from [data2$])a left join [data3$] on a.姓名=[data3$].姓名
    将查询结果赋值到数组
    arr = Application.WorksheetFunction.Transpose(conn.Execute("select * from [data$]").GetRows)
    
    

    使用ADO连接外部Access数据源

    1 在VBE界面中 工具—引用
       勾选Microsoft ActiveX Data Objects  x.x  Library 
    2 连接代码
      Sub test()
    Dim conn As New ADODB.Connection
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\data\Adata.accdb" 
    ‘这里使用SQL对数据进行操作,[数据表名称],可以使用删除sql语句
    conn.Close
    End Sub
    
    

    附表

    对齐方式

    With Selection
            '水平对齐方式
            .HorizontalAlignment = xlRight 
            '垂直对齐方式
            .VerticalAlignment = xlCenter
            '自动换行
            .WrapText = False
            '文字方向
            .Orientation = 0
            '缩进
            .AddIndent = False
            '缩进量
            .IndentLevel = 0
            '缩小字体填充
            .ShrinkToFit = False
            '文字方向
            .ReadingOrder = xlContext
            '合并单元格
            .MergeCells = False
    End With
    
    

    字体格式

    With Selection.Font
            '字体
            .Name = "华文琥珀"
            '字号
            .Size = 9
            '删除线
            .Strikethrough = False
            '上标
            .Superscript = False
            '下标
            .Subscript = False
            '大纲字体
            .OutlineFont = False
            '阴影
            .Shadow = False
            '下划线
            .Underline = xlUnderlineStyleNone
            '字体颜色
            .ColorIndex = xlAutomatic
            '颜色变深或变浅
            .TintAndShade = 0
            '主题字体
            .ThemeFont = xlThemeFontNone
        End With
    

    填充

    With Selection.Interior
            '图案样式
            .Pattern = xlSolid
            '图案颜色
            .PatternColorIndex = xlAutomatic
            '主体颜色
            .ThemeColor = xlThemeColorDark1
            '颜色变深或变浅
            .TintAndShade = -4.99893185216834E-02
            '填充色
            .Color = 65535
            '对象的淡色和底纹图案
            .PatternTintAndShade = 0
        End With
    

    对话框的值

    名称	值	说明
    xlDialogActivate	103	“激活”对话框
    xlDialogActiveCellFont	476	“活动单元格字体”对话框
    xlDialogAddChartAutoformat	390	“添加图表自动套用格式”对话框
    xlDialogAddinManager	321	“加载项管理器”对话框
    xlDialogAlignment	43	“对齐方式”对话框
    xlDialogApplyNames	133	“应用名称”对话框
    xlDialogApplyStyle	212	“应用样式”对话框
    xlDialogAppMove	170	“AppMove”对话框
    xlDialogAppSize	171	“AppSize”对话框
    xlDialogArrangeAll	12	“全部重排”对话框
    xlDialogAssignToObject	213	“给对象指定宏”对话框
    xlDialogAssignToTool	293	“给工具指定宏”对话框
    xlDialogAttachText	80	“附加文本”对话框
    xlDialogAttachToolbars	323	“附加工具栏”对话框
    xlDialogAutoCorrect	485	“自动校正”对话框
    xlDialogAxes	78	“坐标轴”对话框
    xlDialogBorder	45	“边框”对话框
    xlDialogCalculation	32	“计算”对话框
    xlDialogCellProtection	46	“单元格保护”对话框
    xlDialogChangeLink	166	“更改链接”对话框
    xlDialogChartAddData	392	“图表添加数据”对话框
    xlDialogChartLocation	527	“图表位置”对话框
    xlDialogChartOptionsDataLabelMultiple	724	“图表选项多个数据标签”对话框
    xlDialogChartOptionsDataLabels	505	“图表选项数据标签”对话框
    xlDialogChartOptionsDataTable	506	“图表选项数据表”对话框
    xlDialogChartSourceData	540	“图表源数据”对话框
    xlDialogChartTrend	350	“图表趋势”对话框
    xlDialogChartType	526	“图表类型”对话框
    xlDialogChartWizard	288	“图表向导”对话框
    xlDialogCheckboxProperties	435	“复选框属性”对话框
    xlDialogClear	52	“清除”对话框
    xlDialogColorPalette	161	“调色板”对话框
    xlDialogColumnWidth	47	“列宽”对话框
    xlDialogCombination	73	“组合图”对话框
    xlDialogConditionalFormatting	583	“条件格式”对话框
    xlDialogConsolidate	191	“合并计算”对话框
    xlDialogCopyChart	147	“复制图表”对话框
    xlDialogCopyPicture	108	“复制图片”对话框
    xlDialogCreateList	796	“创建列表”对话框
    xlDialogCreateNames	62	“创建名称”对话框
    xlDialogCreatePublisher	217	“创建发布者”对话框
    xlDialogCustomizeToolbar	276	“自定义工具栏”对话框
    xlDialogCustomViews	493	“自定义视图”对话框
    xlDialogDataDelete	36	“数据删除”对话框
    xlDialogDataLabel	379	“数据标签”对话框
    xlDialogDataLabelMultiple	723	“多个数据标签”对话框
    xlDialogDataSeries	40	“数据系列”对话框
    xlDialogDataValidation	525	“数据有效性”对话框
    xlDialogDefineName	61	“定义名称”对话框
    xlDialogDefineStyle	229	“定义样式”对话框
    xlDialogDeleteFormat	111	“删除格式”对话框
    xlDialogDeleteName	110	“删除名称”对话框
    xlDialogDemote	203	“降级”对话框
    xlDialogDisplay	27	“显示”对话框
    xlDialogDocumentInspector	862	“文档检查器”对话框
    xlDialogEditboxProperties	438	“编辑框属性”对话框
    xlDialogEditColor	223	“编辑颜色”对话框
    xlDialogEditDelete	54	“编辑删除”对话框
    xlDialogEditionOptions	251	“编辑选项”对话框
    xlDialogEditSeries	228	“编辑数据系列”对话框
    xlDialogErrorbarX	463	“误差线 X”对话框
    xlDialogErrorbarY	464	“误差线 Y”对话框
    xlDialogErrorChecking	732	“错误检查”对话框
    xlDialogEvaluateFormula	709	“公式求值”对话框
    xlDialogExternalDataProperties	530	“外部数据属性”对话框
    xlDialogExtract	35	“提取”对话框
    xlDialogFileDelete	6	“文件删除”对话框
    xlDialogFileSharing	481	“文件共享”对话框
    xlDialogFillGroup	200	“填充组”对话框
    xlDialogFillWorkgroup	301	“填充工作组”对话框
    xlDialogFilter	447	“对话框筛选”对话框
    xlDialogFilterAdvanced	370	“高级筛选”对话框
    xlDialogFindFile	475	“查找文件”对话框
    xlDialogFont	26	“字体”对话框
    xlDialogFontProperties	381	“字体属性”对话框
    xlDialogFormatAuto	269	“自动套用格式”对话框
    xlDialogFormatChart	465	“设置图表格式”对话框
    xlDialogFormatCharttype	423	“设置图表类型格式”对话框
    xlDialogFormatFont	150	“设置字体格式”对话框
    xlDialogFormatLegend	88	“图例格式”对话框
    xlDialogFormatMain	225	“设置主要格式”对话框
    xlDialogFormatMove	128	“设置移动格式”对话框
    xlDialogFormatNumber	42	“设置数字格式”对话框
    xlDialogFormatOverlay	226	“设置重叠格式”对话框
    xlDialogFormatSize	129	“设置大小”对话框
    xlDialogFormatText	89	“设置文本格式”对话框
    xlDialogFormulaFind	64	“查找公式”对话框
    xlDialogFormulaGoto	63	“转到公式”对话框
    xlDialogFormulaReplace	130	“替换公式”对话框
    xlDialogFunctionWizard	450	“函数向导”对话框
    xlDialogGallery3dArea	193	“三维面积图库”对话框
    xlDialogGallery3dBar	272	“三维条形图库”对话框
    xlDialogGallery3dColumn	194	“三维柱形图库”对话框
    xlDialogGallery3dLine	195	“三维折线图库”对话框
    xlDialogGallery3dPie	196	“三维饼图库”对话框
    xlDialogGallery3dSurface	273	“三维曲面图库”对话框
    xlDialogGalleryArea	67	“面积图库”对话框
    xlDialogGalleryBar	68	“条形图库”对话框
    xlDialogGalleryColumn	69	“柱形图库”对话框
    xlDialogGalleryCustom	388	“自定义库”对话框
    xlDialogGalleryDoughnut	344	“圆环图库”对话框
    xlDialogGalleryLine	70	“折线图库”对话框
    xlDialogGalleryPie	71	“饼图库”对话框
    xlDialogGalleryRadar	249	“雷达图库”对话框
    xlDialogGalleryScatter	72	“散点图库”对话框
    xlDialogGoalSeek	198	“单变量求解”对话框
    xlDialogGridlines	76	“网格线”对话框
    xlDialogImportTextFile	666	“导入文本文件”对话框
    xlDialogInsert	55	“插入”对话框
    xlDialogInsertHyperlink	596	“插入超链接”对话框
    xlDialogInsertObject	259	“插入对象”对话框
    xlDialogInsertPicture	342	“插入图片”对话框
    xlDialogInsertTitle	380	“插入标题”对话框
    xlDialogLabelProperties	436	“标签属性”对话框
    xlDialogListboxProperties	437	“列表框属性”对话框
    xlDialogMacroOptions	382	“宏选项”对话框
    xlDialogMailEditMailer	470	“编辑邮件发件人”对话框
    xlDialogMailLogon	339	“邮件登录”对话框
    xlDialogMailNextLetter	378	“发送下一信函”对话框
    xlDialogMainChart	85	“主要图”对话框
    xlDialogMainChartType	185	“图表类型”对话框
    xlDialogMenuEditor	322	“菜单编辑器”对话框
    xlDialogMove	262	“移动”对话框
    xlDialogMyPermission	834	“我的权限”对话框
    xlDialogNameManager	977	“名称管理器”对话框
    xlDialogNew	119	“新建”对话框
    xlDialogNewName	978	“新建名称”对话框
    xlDialogNewWebQuery	667	“新建 Web 查询”对话框
    xlDialogNote	154	“注意”对话框
    xlDialogObjectProperties	207	“对象属性”对话框
    xlDialogObjectProtection	214	“对象保护”对话框
    xlDialogOpen	1	“打开”对话框
    xlDialogOpenLinks	2	“打开链接”对话框
    xlDialogOpenMail	188	“打开邮件”对话框
    xlDialogOpenText	441	“打开文本”对话框
    xlDialogOptionsCalculation	318	“计算选项”对话框
    xlDialogOptionsChart	325	“图表选项”对话框
    xlDialogOptionsEdit	319	“编辑选项”对话框
    xlDialogOptionsGeneral	356	“常规选项”对话框
    xlDialogOptionsListsAdd	458	“添加列表选项”对话框
    xlDialogOptionsME	647	“ME 选项”对话框
    xlDialogOptionsTransition	355	“转换选项”对话框
    xlDialogOptionsView	320	“视图选项”对话框
    xlDialogOutline	142	“大纲”对话框
    xlDialogOverlay	86	“覆盖图”对话框
    xlDialogOverlayChartType	186	“覆盖图图表类型”对话框
    xlDialogPageSetup	7	“页面设置”对话框
    xlDialogParse	91	“分列”对话框
    xlDialogPasteNames	58	“粘贴名称”对话框
    xlDialogPasteSpecial	53	“选择性粘贴”对话框
    xlDialogPatterns	84	“图案”对话框
    xlDialogPermission	832	“权限”对话框
    xlDialogPhonetic	656	“拼音”对话框
    xlDialogPivotCalculatedField	570	“数据透视表计算字段”对话框
    xlDialogPivotCalculatedItem	572	“数据透视表计算项”对话框
    xlDialogPivotClientServerSet	689	“设置数据透视表客户机服务器”对话框
    xlDialogPivotFieldGroup	433	“组合数据透视表字段”对话框
    xlDialogPivotFieldProperties	313	“数据透视表字段属性”对话框
    xlDialogPivotFieldUngroup	434	“取消组合数据透视表字段”对话框
    xlDialogPivotShowPages	421	“数据透视表显示页”对话框
    xlDialogPivotSolveOrder	568	“数据透视表求解次序”对话框
    xlDialogPivotTableOptions	567	“数据透视表选项”对话框
    xlDialogPivotTableWizard	312	“数据透视表向导”对话框
    xlDialogPlacement	300	“位置”对话框
    xlDialogPrint	8	“打印”对话框
    xlDialogPrinterSetup	9	“打印机设置”对话框
    xlDialogPrintPreview	222	“打印预览”对话框
    xlDialogPromote	202	“升级”对话框
    xlDialogProperties	474	“属性”对话框
    xlDialogPropertyFields	754	“属性字段”对话框
    xlDialogProtectDocument	28	“保护文档”对话框
    xlDialogProtectSharing	620	“保护共享”对话框
    xlDialogPublishAsWebPage	653	“发布为网页”对话框
    xlDialogPushbuttonProperties	445	“按钮属性”对话框
    xlDialogReplaceFont	134	“替换字体”对话框
    xlDialogRoutingSlip	336	“传送名单”对话框
    xlDialogRowHeight	127	“行高”对话框
    xlDialogRun	17	“运行”对话框
    xlDialogSaveAs	5	“另存为”对话框
    xlDialogSaveCopyAs	456	“副本另存为”对话框
    xlDialogSaveNewObject	208	“保存新对象”对话框
    xlDialogSaveWorkbook	145	“保存工作簿”对话框
    xlDialogSaveWorkspace	285	“保存工作区”对话框
    xlDialogScale	87	“缩放”对话框
    xlDialogScenarioAdd	307	“添加方案”对话框
    xlDialogScenarioCells	305	“单元格方案”对话框
    xlDialogScenarioEdit	308	“编辑方案”对话框
    xlDialogScenarioMerge	473	“合并方案”对话框
    xlDialogScenarioSummary	311	“方案摘要”对话框
    xlDialogScrollbarProperties	420	“滚动条属性”对话框
    xlDialogSearch	731	“搜索”对话框
    xlDialogSelectSpecial	132	“特殊选定”对话框
    xlDialogSendMail	189	“发送邮件”对话框
    xlDialogSeriesAxes	460	“系列坐标轴”对话框
    xlDialogSeriesOptions	557	“系列选项”对话框
    xlDialogSeriesOrder	466	“系列次序”对话框
    xlDialogSeriesShape	504	“系列形状”对话框
    xlDialogSeriesX	461	“系列 X”对话框
    xlDialogSeriesY	462	“系列 Y”对话框
    xlDialogSetBackgroundPicture	509	“设置背景图片”对话框
    xlDialogSetPrintTitles	23	“设置打印标题”对话框
    xlDialogSetUpdateStatus	159	“设置更新状态”对话框
    xlDialogShowDetail	204	“显示明细数据”对话框
    xlDialogShowToolbar	220	“显示工具栏”对话框
    xlDialogSize	261	“大小”对话框
    xlDialogSort	39	“排序”对话框
    xlDialogSortSpecial	192	“选择性排序”对话框
    xlDialogSplit	137	“拆分”对话框
    xlDialogStandardFont	190	“标准字体”对话框
    xlDialogStandardWidth	472	“标准宽度”对话框
    xlDialogStyle	44	“样式”对话框
    xlDialogSubscribeTo	218	“订阅”对话框
    xlDialogSubtotalCreate	398	“创建分类汇总”对话框
    xlDialogSummaryInfo	474	“摘要信息”对话框
    xlDialogTable	41	“表”对话框
    xlDialogTabOrder	394	“Tab 键次序”对话框
    xlDialogTextToColumns	422	“分列”对话框
    xlDialogUnhide	94	“取消隐藏”对话框
    xlDialogUpdateLink	201	“更新链接”对话框
    xlDialogVbaInsertFile	328	“VBA 插入文件”对话框
    xlDialogVbaMakeAddin	478	“VBA 创建加载项”对话框
    xlDialogVbaProcedureDefinition	330	“VBA 过程定义”对话框
    xlDialogView3d	197	“三维视图”对话框
    xlDialogWebOptionsBrowsers	773	“Web 浏览器选项”对话框
    xlDialogWebOptionsEncoding	686	“Web 编码选项”对话框
    xlDialogWebOptionsFiles	684	“Web 文件选项”对话框
    xlDialogWebOptionsFonts	687	“Web 字体选项”对话框
    xlDialogWebOptionsGeneral	683	“Web 常规选项”对话框
    xlDialogWebOptionsPictures	685	“Web 图片选项”对话框
    xlDialogWindowMove	14	“窗口移动”对话框
    xlDialogWindowSize	13	“窗口大小”对话框
    xlDialogWorkbookAdd	281	“添加工作簿”对话框
    xlDialogWorkbookCopy	283	“复制工作簿”对话框
    xlDialogWorkbookInsert	354	“插入工作簿”对话框
    xlDialogWorkbookMove	282	“移动工作簿”对话框
    xlDialogWorkbookName	386	“命名工作簿”对话框
    xlDialogWorkbookNew	302	“新建工作簿”对话框
    xlDialogWorkbookOptions	284	“工作簿选项”对话框
    xlDialogWorkbookProtect	417	“保护工作簿”对话框
    xlDialogWorkbookTabSplit	415	“拆分工作簿标签”对话框
    xlDialogWorkbookUnhide	384	“取消隐藏工作簿”对话框
    xlDialogWorkgroup	199	“工作组”对话框
    xlDialogWorkspace	95	“工作区”对话框
    xlDialogZoom	256	“缩放”对话框
    
    
    展开全文
    qq_32392853 2020-05-02 18:21:15
  • 4星
    19.09MB yularna 2015-07-01 12:31:25
  • VBA介绍 Visual Basic for Applications(VBA)是 VisualBasic 的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展 Windows 的应用程序功能,特别是Microsoft ...

    VBA介绍

    Visual Basic for Applications(VBA)是 VisualBasic 的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展 Windows 的应用程序功能,特别是Microsoft Office软件。

    说简单点,VBA 是运行在 Microsoft Office 软件之上,可以用来编写非软件自带的功能的编程语言。Office 软件提供丰富的功能接口,VBA 可以调用它们,实现自定义的需求。基本上,能用鼠标和键盘能做的事情,VBA 也能做。

    正如前文所述,VBA 可以运行在 Office 软件上,包括 Excel、Word、PPT、Outlook 等。VBA 语言在 Office 软件中是通用的,基本语法和用法都相同。但是每一个软件具有自己独有的对象,例如 Excel 有单元格对象,Word 有段落对象,PPT 有幻灯片对象。

    编写第一个VBA宏

    」:简单的说,宏是一段可以运行的 VBA 代码片段。

    step one 创建启用宏的工作簿

    首先新建一个工作簿,并将工作簿保存为「启用宏的工作簿」类型。详细步骤查看这篇文章。
    在这里插入图片描述

    step two 打开 VBA 编辑器

    通过功能区「开发工具 → 代码→Visual Basic」或快捷键 Alt + F11 打开 VBA 编辑器。详细步骤参考这篇文章。
    在这里插入图片描述

    step three

    Excel 工作簿中的 VBA 代码通常保存在工作表对象或模块中。本例中,我们用模块保存 VBA 代码。

    首先选中左侧工程列表中的工作簿,后右键,在弹出的选项列表中,选择「插入」。二级菜单中,选择「模块」,完成插入新模块。
    在这里插入图片描述
    插入完成后,在工程列表对应工作簿内,在模块文件夹下,显示新插入的模块。新插入的模块的默认名称是,模块 x,本例中是模块1。在属性窗口,可以修改模块的名称。
    在这里插入图片描述

    step four 打开模块

    双击上一步插入的模块1,在右侧代码窗口区域里,将打开模块1的代码编辑器。在右侧代码窗口中当前打开的代码编辑器所对应的模块,在编辑器标题末尾可以看到。
    在这里插入图片描述

    step five 创建一个宏(VBA 过程)

    在代码编辑窗口中,输入以下代码:

    Sub MyCode()
        
    End Sub
    

    这段代码是一个空的 VBA 过程,只有开始和结束。过程的其他代码,都在这中间编写。

    其中 SubSubroutine 的缩写,直译过来是子程序。在 VBA 中表示一个过程,也是代表一个过程的开始。下一行 End Sub 表示过程的结束。
    在这里插入图片描述

    step six 编写 VBA 过程实体部分

    过程的实体部分指的是,真正会被执行的部分。上一步创建的是一个空的 VBA 过程,里面不包含实体代码。虽然可以正常运行,但是不会有结果输出。

    这一步我们编写 VBA 过程的实体部分。将如下代码输入到过程的开始和结束处之间。

    MsgBox "Hello World"
    

    在这里插入图片描述

    step seven 运行代码

    现在我们已经写完了一个完整的 VBA 过程,现在运行它,看一下结果。

    将光标放置在代码的任何一处,点击工具栏上的运行「▶ 」按钮,或按 F5,运行代码。

    在这里插入图片描述
    可以看到运行结果,Excel 弹出一个对话框,显示内容正是在代码中编写的内容。

    在这里插入图片描述

    认识VBA编辑器

    在这里插入图片描述
    编辑器中每个模块的基本用法如下:

    • 工具栏:编辑器命令栏,与 Excel 功能区域类似,包含 Excel VBA 开发相关的命令。
    • VBA 工程:显示当前 VBA 工程包含的所有对象。通常,一个工作簿就是一个 VBA 工程,其中包括 Excel
      对象、工作表对象、模块等。
    • 属性窗口:查看和设置选中对象的属性的窗口。
    • 代码编辑窗口:实际编写代码的位置。编写、修改、保存代码,都在这里进行。
    • 立即窗口:代码运行过程中,打印出的内容,在立即窗口中显示。一般用于调试代码。
    管理VBA工程

    通常,一个工作簿就是一个 VBA 工程,其中包括 Excel 对象、工作表对象、模块等。当多个工作簿同时打开时,他们公用同一个 VBA 编辑器,VBA 工程界面显示所有的 VBA 工程。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mAmknVH3-1594377170684)(images/VBA教程/image-20200709165047990.png)]

    插入/删除模块

    在一个 VBA 工程中想要插入新的模块时,可在 VBA 工程右键,选择插入类型即可。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xrQEQnPK-1594377170686)(images/VBA教程/image-20200709165315694.png)]

    要删除模块,选中模块,右键,选择「移除 模块」

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-57FjvZZy-1594377170687)(images/VBA教程/image-20200709165336961.png)]

    语法介绍

    程序结构示例

    首先,本篇将使用以下代码,介绍各种程序结构,大家可以先看一下。

    Sub MyCode()
    
        '声明循环变量和是否为空变量
        Dim i As Integer
        Dim isBlank As Boolean
        
        '循环 A2-A10 单元格
        For i = 2 To 10
        
            '存储单元格是否为空的结果
            isBlank = Cells(i, 1).Value = ""
            
            '如果为空,则用上方的单元格的值填充当前单元格
            If isBlank Then
                Cells(i, 1) = Cells(i - 1, 1)
            End If
            
        Next i
    
    End Sub
    

    以上代码运行后,在 A2:A10 单元格区域,依次判断每一个单元格是否为空,如果是空,则用上一个单元格的值填充。

    过程

    过程是 VBA 中,程序实际运行的最小结构。单独的一行或多行代码无法运行,必须把它们放置在一个过程里,才能运行。

    在示例中,Sub 过程名() 开头,End Sub 为结尾部分是一个过程的主题,其余代码需要放置在两者之间。

    Sub MyCode()
    
    End Sub
    

    程序语句

    语句,是表示一个完整意思的一行代码。

    例如,示例中第一行,声明变量就是一条语句。它表示,声明一个整型变量。同理,第二行、第三行和其余的每一行都是语句。VBA 中的过程,就是由这样一条条语句构成的。

    Dim i As Integer
    Dim isBlank As Boolean
    

    通常,一行就是一个语句,除非它用换行符或合并符号.

    Excel VBA 对象

    我们学习 VBA 的最终目的是操纵 Excel,完成一些特定的目标。其中,操纵 Excel 就是通过 Excel VBA 对象完成的。

    在示例中,Cells() 就是一个 Excel VBA 对象,表示一个单元格,提供行号和列号指定单元格。

    程序运行结构

    接下来是程序结构中最核心的部分,也是最有意思的部分,程序运行结构。大部分编程语言都具备基本的三种程序运行结构,分别是顺序结构、循环结构、判断结构。各种简单到复杂的算法,都是由这三种基本的结构,相互组合而完成。

    1.顺序结构

    首先是基本的顺序结构。顺序结构,顾名思义就是按照顺序依次执行。VBA 中的顺序就是从上到下、从左到右的顺序。

    在示例中,首先运行两个声明语句,然后运行循环结构,以此类推。值得注意的事,当程序有嵌套时,嵌套的部分也是按照顺序指定的。

    在这里插入图片描述

    2.循环结构

    第二个基本结构是循环结构。当使用循环结构时,循环部分代码,按照指定的循环次数,循环重复执行。

    在我们的示例中,For 至 Next i 之间的代码就是一个循环代码。
    在这里插入图片描述
    VBA 中,有多种循环结构,本例中是 For 循环结构。For 循环结构中,第一行指定循环次数,最后一行表示开始下一个循环。

    '循环开始
    For i = 2 To 10
    	'这里是循环的代码
    Next i
    
    3.判断结构

    最后一种基本结构是,判断结构。简单来说,该结构中,当提供的表达式为真(True)时,判断结构的主体部分才会被执行,否则跳过。

    在示例代码中,If 开头和 End If 结尾处是典型的判断结构。第一行,判断 isBlank 变量是否为真,如果是,则执行判断结构主体部分,否则跳过。

    '如果为空,则用上方的单元格的值填充当前单元格
    If isBlank Then
        Cells(i, 1) = Cells(i - 1, 1)
    End If
    

    在这里插入图片描述

    运行

    下面,我们实际运行我们的示例代码,看一看它具体的效果。
    在这里插入图片描述




    Excel 是一个对象,这个对象包含很多属性和子对象,而 VBA 是可以操作这些对象的工具,实现各种各样的效果。例如,Excel 包括 Range 对象,即单元格对象,使用 VBA 可以改变单元格对象的填充颜色属性。用代码表示如下。

    'A1 单元格的填充颜色设置为颜色号为 49407 的颜色
    Range("A1").Interior.Color = 49407
    
    • Range(“A1”)、Interior、Color 等是 Excel 具备的对象和属性;
    • 对象和属性的操作,是通过 VBA 语言实现的,即上面是一行 VBA 代码。中间的等号(=)是 VBA 语言的赋值符号,也是能改变单元格填充颜色的关键所在。

    变量

    变量是存储数据的一种表达方式。在程序开始,可以声明一个变量,指定变量的类型(数字、文本、逻辑值等),并给变量赋值。在程序其他地方,就可以用该变量,使其存储的值参与运算。

    '声明一个文本类型的变量
    Dim val As String
    '给 val 变量赋值,即 "Hello World"
    val = "Hello World"
    '在 A1 单元格写入 val 变量存储的数据
    Range("A1").Value = val
    

    数组

    组表示一组同类型的数据的集合,是 VBA 中最重要的概念之一。以下面的代码为例:

    '创建数组
    Dim Val(1 to 4) As String
    '给数组的元素赋值
    Val(1) = "Excel"
    Val(2) = "Word"
    Val(3) = "PowerPoint"
    Val(4) = "Outlook"
    

    基础运算符

    使用 VBA 开发某项功能,本质上是,对变量进行基础的运算和操作,例如加减乘除比较等。为此,VBA 提供了很多运算符和操作符,利用它们可以实现复杂的运算。

    今天先学习 VBA 提供的基础运算符和操作,以及它们的基本用法。VBA 运算符可以分为以下 6 类:

    • 赋值运算符
    • 算数运算符
    • 比较运算符
    • 逻辑运算符
    • 连接运算符
    • 其他运算符

    VBA 中的连接运算符用于连接 2 个或多个文本。其用法与 Excel 公式中的 & 符号相同。

    连接操作符
    运算符说明示例
    &连接两个文本“Zhang” & ” ” & “San” -> “Zhang San”
    其他操作符
    运算符说明
    _ (下划线)将一行代码分解成两行
    : ( 英文冒号)将两行代码放置在一行
    比较运算符

    比较运算符,比较提供的两个变量,如果符合比较条件,返回 True,否则,返回 False。

    假设 a = 10b = 3-> 表示结果。

    运算符说明示例
    =比较两个值是否相等a = b -> False
    >大于a > b -> True
    >=大于等于a >= b => False
    <小于a < b -> False
    <=小于等于a <= b -> False
    <>不等于a <> b -> True
    注释

    通常,一段代码写完后,不会完全没问题。在实际使用过程中可能需要修改,符合最新的需求。过一段时间再打开查看时,可能已经忘记了当时的思路,不能很快想起来有些代码实际的用途,更不用说让别人查看了。这时,就需要注释出场了。

    注释是对代码的一种解释,不影响代码的运行。VBA 中的注释语句是,以英文单引号 (')开头,后接需要解释说明的内容。

    选择结构
    if Then 结构

    选择结构中,If Then 结构是最基础的一个。它只有条件表达式真时,执行的代码。

    If Then 结构基本语法如下,其中 End If是选择结构的结束标志。

    If 条件表达式 Then
        '表达式为真时,执行的代码
    End If
    

    现在我们看实际的例子,判断学生是否及格,及格条件是成绩 ≥60。如果及格,在C列对应单元格填写“及格”。具体代码如下:

    Sub MyCode()
    
        Dim i As Integer
        
        For i = 2 To 10
        
            If Cells(i, "B").Value >= 60 Then
                Cells(i, "C") = "及格"
            End If
            
        Next i
    
    End Sub
    

    我们可以看到,我们使用 B 列中的学生成绩与 60 分比较,如果≥60分,就在 C 列填写及格。

    条件表达式是 Cells(i, "B").Value >= 60,选择性执行的代码部分是 Cells(i, "C") = "及格"

    其中,For 语句是表示循环结构,这里只需知道程序从第一个学生循环到最后一个学生,依次判断每个学生的成绩。循环结构将在下一篇中做详细介绍。

    将以上代码运行后,可以看到运行结果如下:

    在这里插入图片描述

    If Else 结构

    很多时候,我们根据表达式的真假,真时执行一块代码,假时执行另一块代码。这种需求可以使用 If Else结构实现。

    If Else结构中,条件表达式在真时,执行Then后的代码;条件表达式为假时,执行 Else后的代码。基本语法如下:

    If 条件表达式 Then
        '真时执行的代码
    Else
        '假时执行的代码
    End If
    

    我们继续看实际的例子。在上一个例子的基础上,这次对不及格的学生,在C列填入不及格。代码如下:

    Sub MyCode()
    
        Dim i As Integer
        
        For i = 2 To 10
        
            If Cells(i, "B").Value >= 60 Then
                Cells(i, "C") = "及格"
            Else
                Cells(i, "C") = "不及格"
            End If
            
        Next i
    
    End Sub
    

    在这个例子中,条件表达式 Cells(i, "B").Value >= 60为假时,表示学生成绩低于60分,即不及格。这时就执行 Else后的代码。

    程序运行结果如下:
    在这里插入图片描述

    循环结构

    VBA 中程序循环结构基础,以及多种循环结构形式。包括子类在内,VBA 中常使用的循环结构包括 6 种,它们是:

    循环结构说明
    For … Next 循环按指定次数循环执行
    For Each 循环逐一遍历数据集合中的每一个元素
    Do While … Loop 循环当条件为真时,循环执行
    Do … Loop While 循环当条件为真时,循环执行。无论条件真假,至少运行一次
    Do Until … Loop 循环直到条件为真时,循环执行
    Do … Loop Until 循环直到条件为真时,循环执行。无论条件真假,至少运行一次

    此外,学习了两种跳出循环的语句,它们是:

    跳出语句说明
    Exit For跳出 For 循环
    Exit Do跳出 Do While/Until 循环

    本文介绍两个常用的循环

    For 循环
    1. For … Next 循环

    使用 For ... Next循环可以按指定次数,循环执行一段代码。For 循环使用一个数字变量,从初始值开始,每循环一次,变量值增加或减小,直到变量的值等于指定的结束值时,循环结束。

    For ... Next 循环语法如下:

    For [变量] = [初始值] To [结束值] Step [步长]
        '这里是循环执行的语句
    Next
    

    其中:

    • [变量] 是一个数字类型变量,可在循环执行的语句里使用。
    • [初始值] 和 [结束值] 是给定的值;
    • [步长] 是每次循环时,变量的增量。如果为正值,变量增大;如果为负值,变量减小。

    下面看一个实际的例子,求 1 至 10 数字的累积和。

    Sub MyCode()
    
        Dim i As Integer
        Dim sum As Integer
        
        For i = 1 To 10 Step 1
            sum = sum + i
        Next
        
    End Sub
    

    可以看到,For 循环使用i变量,循环 10 次,i 的值从 1 到 10 变化。

    值得注意的是,For 循环的 Step 值如果是 1,则 Step 关键词可省略。上述过程循环部分可写成如下方式:

    For i = 1 To 10
        sum = sum + i
    Next
    
    1. Do While 循环

    Do While循环用于满足指定条件时循环执行一段代码的情形。循环的指定条件在 While关键词后书写。

    Do While … Loop循环,根据 While 关键词后的条件表达式的值,真时执行,假时停止执行。基本语法如下:

    Do While [条件表达式]
        '循环执行的代码
    Loop
    

    其中,只要 [条件表达式] 为真,将一直循环执行。[条件表达式] 一旦为假,则停止循环,程序执行 Loop 关键词后的代码。

    看一个实际的例子,还是求 1- 10 累积和。

    Sub MyCode()
    
        Dim i As Integer
        Dim sum As Integer
        
        i = 1
        Do While i <= 10
            sum = sum + i
            i = i + 1
        Loop
        
    End Sub
    

    i变量的初始值是 1,根据 While 后的条件,只要 i 变量小于等于 10,后续的代码就可以一直循环执行。

    这里为了演示使用了 Do While 循环,实际情况下,这种求和问题,使用 For 循环更简洁。

    With 结构语法

    With 结构由 WithEnd With 两个语句构成,对象的属性和方法都写在两者之间。基本语法如下:

    With [对象]
        .[属性] = [数据]
        .[方法]
        '其他属性和方法
    End With
    

    With 结构里,对象的属性和方法均有点 (.)符号开始,后接对象的属性名和方法名。

    With 结构实例

    现在看一个实际的例子,需要将工作簿中 Sheet1 工作表设置新名称,然后设置标签颜色为黑色,最后隐藏工作表。

    如果不用 With 结构,代码如下:

    Sub MyCode()
    
        Worksheets("Sheet1").Name = "新名称"
        Worksheets("Sheet1").Tab.ThemeColor = xlThemeColorLight1
        Worksheets("Sheet1").Visible = xlSheetHidden
        
    End Sub
    

    可以看到,每个语句都重复写 Worksheets(“Sheet1”) 部分。

    使用 With 结构,可以避免重复写同一个对象名,代码如下:

    Sub MyCode()
    
        With Worksheets("Sheet1")
            .Name = "新名称"
            .Tab.ThemeColor = xlThemeColorLight1
            .Visible = xlSheetHidden
        End With
        
    End Sub
    

    复制实例

    本实例实现的是把很多excel表格的一些数据单元复制到一个新的文档上。

    Sub 合并当前目录下所有工作簿的全部工作表()
    
        Dim MyPath, MyName, AWbName
    
        Dim Wb As Workbook, WbN As String
    
        Dim G As Long
    
        Dim Num As Long
    
        Dim BOX As String
    
        Application.ScreenUpdating = False
    
        MyPath = ActiveWorkbook.Path
    
        MyName = Dir(MyPath & "\" & "*.xls")
    
        AWbName = ActiveWorkbook.Name
    
        Num = 0
    
        Do While MyName <> ""
    
            If MyName <> AWbName Then
    
                Set Wb = Workbooks.Open(MyPath & "\" & MyName)
    
                Num = Num + 1
    
                With Workbooks(1).ActiveSheet
    
                    .Cells(.Range("A65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4)
    
                    'For G = 1 To Sheets.Count
    
                        Wb.Sheets(1).Range("A3:E3").Copy .Cells(.Range("A65536").End(xlUp).Row + 2, 1)
                        Wb.Sheets(1).Range("C9:D18").Copy .Cells(.Range("A65536").End(xlUp).Row + 2, 1)
    
                    'Next
    
                    WbN = WbN & Chr(13) & Wb.Name
    
                    Wb.Close False
    
                End With
    
            End If
    
            MyName = Dir
    
        Loop
    
        Range("A1").Select
    
        Application.ScreenUpdating = True
    
        MsgBox "共合并了" & Num & "个工作薄下的全部工作表。如下:" & Chr(13) & WbN, vbInformation, "提示"
    
    End Sub
    
    
    展开全文
    O_MMMM_O 2020-07-10 19:27:39
  • 3.12MB ssyldd 2019-01-01 18:51:06
  • 将永恒君的百宝箱设为星标精品文章第一时间读挺长时间没有整理文章了,最近着重把之前分享过的一些系列教程类的文章汇总一下,方便后续的查看。1、爬虫工具Web Scraper系列(视频教程)Web Scraper是一款快速获取大量...
    7b02c5b6beeca72b147b57496edbc277.gif 将永恒君的百宝箱 设为 星标  精品文章第一时间读挺长时间没有整理文章了,最近着重把之前分享过的一些 系列教程类的文章汇总一下,方便后续的查看。

    1、爬虫工具Web Scraper系列(视频教程)

    d488a79174b4b539e30f6d26510a9a93.png

    Web Scraper是一款快速获取大量网页数据的非常实用的小工具,让你轻松快捷获取想要的海量数据。

    教程(一)- 安装
    教程(二)- 基本用法之安装、配置、运行
    教程(三)- 基本用法(常用选择器类型)
    教程(四)- 进阶用法(同一个页面爬取多个类型内容)
    教程(五)- 进阶用法(爬取向下滚动加载页面)
    教程(六)- 进阶用法(网址有规律变化进行翻页)
    教程(七)- 进阶用法(点击「翻页器」进行翻页)
    教程(八)- 进阶用法(点击「更多」进行翻页)
    教程(九)- 进阶用法(动态加载进行翻页)
    教程(十)- 爬取二级页面的内容

    2、python爬虫系列

    f18abf855bedb8bc714f3600d855881c.png

    使用python编写爬虫可以有更好的灵活性,满足更高级别的需求。

    系列(1)- 概述
    系列(2)- requests库基本使用
    系列(3)- 网页数据解析(bs4、lxml、Json库)
    系列(4)- 提取网页数据(正则表达式、bs4、xpath)
    系列(5)- 看了这篇文章你也可以一键下载网络小说

    3、Excel vba实例分类汇总

    1141a148fab7d8aa8c93673b136677a8.png

    相信大家对Excel VBA的实用性已经很明白了,永恒君这里把之前分享过的实例再分类整理一下,方便以后的查询和使用。传送门在这里:收藏 | 27个Excel vba实例汇总(附赠VBA教程)
    大致分类如下:

    单元格操作

    实例(1)- 批量制作工资表头
    实例(5)- 快速合并n多个相同值的单元格
    实例(9)- 批量插入、删除表格中的空行
    实例(11)- 拆分单元格并自动填充
    实例(12)- 如何合并多个单元格而不丢失单元格的数据?
    实例(13)- 自动生成序号、一键排版(列宽、行高自适应等)

    工作表(簿)操作

    实例(2)- 批量将工作表拆分为单独文件
    实例(3)- 多个工作簿批量合并
    实例(4)- 根据已有名称,批量新建表格
    实例(7)- 一键批量打印工作簿

    数据汇总

    实例(6)- 一键汇总多个sheet数据到总表
    实例(19) –  一键汇总不完全相同的sheet到总表

    数据提取

    实例(8)- 利用正则表达式进行定向提取
    实例(10)- 统计同一列中出现次数并标注
    实例(14)- 依据指定单元格的值,复制并插入相同数量的行
    实例(15)- 按指定字段一键筛选并取最低价记录
    实例 (16) - 按指定字段分类批量提取内容
    实例 (17) - 遍历多个工作簿并提取内容到总表
    实例(18) – 一键将单列长数据平均拆成多列
    实例(20) – 一键填充每月员工拜访地区
    实例(22) – 一键筛选其他工作表或工作簿的数据
    实例(24) - 新股(债)中签一键批量查询
    实例(27) - 一键按列分类并保存单独文件

    word操作

    实例(23) - 一键批量提取word表格内容
    实例(26) – 一键批量提取word文字内容

    其他

    实例(25) - 班级随机点名并播放
    实例(21) – 如何快速准确录入数据
    excel如何快速汇总多个类别的综合?
    VBA运行后加上进度条,酷不酷?
    两句代码快速提高VBA运行效率
    正则表达式,查找、筛选数据的利器,你不能不会!

    4、Python实例(附源码)

    ce792322f2e735dd1371e6d0bcfd7b53.png

    1、教你如何用python制作一个微信机器人陪你聊天,只要几行代码
    2、用python定制网页跟踪神器,有信息更新第一时间通知你(附视频演示)
    3、把python网页跟踪神器部署到云上,彻底解放你的电脑
    4、Python帮你定制批量获取你想要的信息
    5、带你看看不一样的微信!
    6、微信一键统计、自动通过申请、自动回复(操作演示)
    7、python工具分享 - 在线小说一键下载
    8、这样获取可转债行情信息,直观又方便
    9、Python帮你定制批量获取智联招聘的信息
    10、用python给女友准备个礼物吧~
    11、python实现浏览器自动化操作

    5、花样U盘

    d30104009094467afb2601085b7c46db.png神马,U盘装系统到现在都还不会?视频|用一个U盘绕过windows登陆密码
    谁说U盘只能用来存储文件资料,这些功能都了解吗?(附视频)
    手机玩游戏不爽?来试试Phoenix OS凤凰系统
    把凤凰系统装进U盘里,打造PC上的可移动android系统

    6、密码安全

    db1dd7ce22ca3a894671c69367105172.png

    忘记windows密码怎么办?
    一文教你3分钟搞定忘记的windows密码
    你的密码容易被人知道,登录网站时千万要留心这个!

    欢迎交流!

    微信公众号:永恒君的百宝箱个人博客:www.yhjbox.com

    展开全文
    weixin_39907922 2020-11-20 15:57:14
  • 杨仕航 2016-04-19 15:17:27
  • 5星
    5.28MB shbc001 2014-09-22 11:36:34
  • 5星
    1.86MB baidu_27450489 2015-04-16 11:40:55
  • 4.48MB u013699551 2014-09-07 15:51:11
  • 48.35MB lianghui2018 2019-01-05 15:42:12
  • 之前讲过怎样利用OPEN方法从多个Excel中获得数据,今天我们再来看一个类似的例子,这次我们不是从Excel中取数据,而是要对Excel进行一系列的操作,例如我们要对文件夹中的所有Excel的Sheet1的A1输入“战战如疯”,将...

    之前讲过怎样利用OPEN方法从多个Excel中获得数据,今天我们再来看一个类似的例子,这次我们不是从Excel中取数据,而是要对Excel进行一系列的操作,例如我们要对文件夹中的所有Excel的Sheet1的A1输入“战战如疯”,将Sheet2表格删除。之前我们讲过打开工作簿可以用OPEN或GetObject,而遍历用的是Dir方法,今天我们就用Open方法结合Dir遍历来讲下怎么解决批量操作的问题。看下面的代码

    Sub test()

    Dim mypath, myfile

    mypath = ThisWorkbook.Path & "\"

    myfile = Dir(mypath & "*.xlsx")

    Application.ScreenUpdating = False            '关闭屏幕更新

    Application.DisplayAlerts = False                 '关闭提示框

    Do While myfile <> ""

    If myfile <> ThisWorkbook.Name Then

    Workbooks.Open mypath & myfile

    With ActiveWorkbook

    .Sheets(1).Range("A1") = "战战如疯"           '这两行就是你要对该工作簿进行的操作,换成自己的代码即可使用

    .Sheets(2).Delete

    End With

    ActiveWorkbook.Save

    ActiveWorkbook.Close

    End If

    myfile = Dir

    Loop

    Application.DisplayAlerts = True

    Application.ScreenUpdating = True

    End Sub

    上面的代码利用Dir对当前文件夹下所有xlsx后缀的文件进行遍历,遍历的解释参见“利用Dir遍历某文件夹下的所有文件”然后利用Open方法打开工作簿,剩下的就是对其进行操作。需要注意的是操作对象要声明是哪个工作簿,ActiveWorkbook指的是刚刚打开的工作簿,英文逗号不要少了。

    操作很简单,我就不加示例文件了,自己复制代码,随便建几个空白工作簿试下就可以了。

    展开全文
    weixin_31068553 2020-12-29 04:41:26
  • 4星
    35MB realkinglion 2013-05-01 22:44:54
  • weixin_39652810 2020-12-22 18:27:33
  • 39KB weixin_44309347 2018-12-28 09:50:11
  • 22.25MB zqy_197508 2011-11-16 15:25:47
  • sunmano 2019-08-27 10:35:51
  • u013955940 2018-03-05 19:02:14
  • weixin_33345728 2021-05-15 23:08:02
  • m0_38052645 2018-08-02 09:14:06
  • 431KB liziger 2019-05-17 11:25:49
  • u013382616 2014-01-10 21:32:08
  • cumichun6193 2020-08-21 15:38:51
  • 5星
    19.06MB yuzhongyum 2010-06-05 20:32:53
  • weixin_33717479 2020-05-28 10:24:00
  • 45KB freemanal 2016-06-14 11:05:49
  • weixin_33749242 2009-10-29 11:06:00
  • 741KB wy13660639489 2019-10-09 14:27:19
  • iteye_20954 2008-03-24 16:04:00
  • weixin_32155269 2021-06-08 18:58:46
  • weixin_39996134 2021-04-25 15:07:12

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 687
精华内容 274
关键字:

vba打印教程