精华内容
下载资源
问答
  • VBA编程教程

    2018-08-13 16:59:00
    Excel-VBA-编程教程(完整版).pdf从基础开始,很完整。
  • vba编程教程视频教程by Preethi Kasireddy 通过Preethi Kasireddy 我已经完成了编程教程。 怎么办? (I’ve done programming tutorials. Now what?) This week’s question for my Ask Preethi series is about ...

    vba编程教程视频教程

    by Preethi Kasireddy

    通过Preethi Kasireddy

    我已经完成了编程教程。 怎么办? (I’ve done programming tutorials. Now what?)

    This week’s question for my Ask Preethi series is about how to go from simply doing tutorials to the actually building real world applications.

    本周我的Ask Preethi系列的问题是关于如何从简单地编写教程到实际构建实际应用程序的过程。

    问题 (The Question)

    I know basics of Html, CSS, JavaScript, and jQuery. I’ve followed lots of tutorials to make simple sites. But I am stuck now, what should I do next. How can I use what I learned to build something real?

    我了解HTML,CSS,JavaScript和jQuery的基础知识。 我遵循了很多教程来制作简单的网站。 但是我现在陷入困境,下一步该怎么办。 我如何使用学到的东西来构建真实的东西?

    这是我的答案 (Here’s my answer)

    So, you decided to learn to code and maybe went through a few online tutorials. You know a lot of different things — syntax, conditionals, classes, prototypes, etc.

    因此,您决定学习编码,并可能阅读了一些在线教程。 您知道很多不同的东西-语法,条件,类,原型等。

    But what’s next? You actually want to build something, but it feels like you’re not able to put everything together.

    但是接下来呢? 您实际上想构建某些东西,但是感觉好像您无法将所有内容放在一起。

    What do you do next? Well, here’s my 13-minute answer to this question:

    下一步你要怎么做? 好吧,这是我对这个问题的13分钟回答:

    翻译自: https://www.freecodecamp.org/news/ive-done-programming-tutorials-now-what-1dd1bc26cf55/

    vba编程教程视频教程

    展开全文
  • Access Vba 编程教程

    热门讨论 2009-07-29 23:13:33
    AccessVba编程教程,PDF格式,欢迎下载学习!
  • VBA基础教程 文章目录VBA基础教程VBA简介VBA环境简单介绍第一个代码过程函数基本语法变量数据类型时间函数字符串Format格式字符串常量运算符算术运算符比较运算符逻辑运算符运算符比较数组输入和输出控制程序流程...

    VBA基础教程

    VBA简介

    VBAVisual Basic For Appilication,属于VB语言的的子集。

    VBA环境简单介绍

    无论打开多少EXCEL表格,都会共享一个IDE环境。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rQ9eAzWe-1615651551095)(images/VBA基础教程一/打开VB_IDE.gif)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZwXdBfam-1615651551097)(images/VBA基础教程一/image-20210227175708925.png)]
    每一个Excel文件,对应的VBA工程都有4类对象,包括: Microsoft Excel对象、窗体、模块和类模块。

    Microsoft Excel对象 Microsoft Excel对象代表了Excel文件及其包括的工作薄等几个对象,包括所有的 Sheet和一个Workbook,分别表示文件(工作薄)中所有的工作表(包括图表),例如缺省情况下,Excel文件包括3个Sheet,在资源管理器窗口就包括3个 Sheet,名字分别是各Sheet的名字。

    ThisWorkbook 代表当前Excel文件。双击这些对象会打开代码窗口,在此窗口中可输入相关的代码,响应工作薄或者文件的一些事件,例如文件的打开、关闭,工作薄的激活、内容修改、选择等有关事件。

    窗体 窗体对象代表了自定义对话框或界面。

    模块 模块为自定义代码的载体。作用:1.保存过程和函数 2.定义模块内的私有变量或者整个工程的公有变量。

    类模块 类模块则是以类或对象的方式编写代码的载体。

    第一个代码

    插入一个模块,写上如下代码。

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

    Sub MyFirstVBAProgram()
        Dim strName As String
        Dim strHello As String
        strName = InputBox("请输入你的名字:")
        strHello = "你好," & strName & " !"
        MsgBox strHello
    End Sub
    ----------------
    解释:下面我们简单看一下这段代码的组成,代码第1行表示这是一个新的过程,名称为“MyFirstVBAProgram",第2、3行定义了2个变量,其类型为字符串类型,第4行调用InputBox这个内置函数,并将返回值赋给strName这个变量,第5行将几个字符串组合成一个新的字符串,第6行调用MsgBox这个函数,显示一个对话框,第7行表示过程结束。VBA程序由不同的模块组成,在模块内部,可以定义不同的变量、过程或函数,由此组成一个完整的程序。
    
    

    与其他程序设计语言不同,VBA程序是事件驱动的,没有Main函数之类的入口的概念。本质上,VBA代码应该只是一些完成具体工作的集合,而通过界面元素或者Excel的事件驱动执行,你可以通过自定义按钮、菜单,并指定一个宏(VBA过程,自定义界面也可以通过编程手段完成此类工作),通过单击此按钮即可调用相应的VBA代码。

    过程

    过程是最基本的运行单位,格式如下:

    Sub Test()
      ...
    End Sub	
    
    ------------
    [ Private | Public][Static ] Sub name [ (arglist) ]
    [ statements]
    [Exit sub]
    [ statements]
        
     End sub
    
    
    部分 描述
    Public 可选的。表示所有模块的所有其它过程都可访问这个Sub过程。如果在包含Option Private的模块中使用,则这个过程在该工程外是不可使用的。
    Private 可选的。表示只有在包含其声明的模块中的其它过程可以访问该Sub过程。
    Static 可选的。表示在调用之间保留Sub过程的局部变量的值。Static属性对在Sub 外声明的变量不会产生影响,即使过程中也使用了这些变量。
    name 必需的。Sub 的名称;遵循标准的变量命名约定。
    arglist 可选的。代表在调用时要传递给Sub 过程的参数的变量列表。多个变量则用逗号隔开。
    statements 可选的。Sub过程中所执行的任何语句组。

    函数

    从其它过程调用一个过程(Sub)时,必须键入过程名称以及任何需要的参数值。Call语句可有可无,如果使用它,则参数必须以括号括起来。

    [ Public | Private] [static] Function name [ (arglist) ] [As type]
        [ statements]
        [ name = expression]	
        [Exit Function]
        [ statements]
        [name = expression]
    End Function
    
    

    下面的示例展示了调用具有多个参数的Sub 过程的两种不同方法。当第二次调用HouseCalc 时,因为使用Call语句(第3行),所以需要利用括号将参数括起来。

    sub Main ()
    HouseCalc 99800,43100
    Call HouseCalc (380950,49500)
    End sub
    
    
    sub HouseCalc (price As single, wage As single)
        if 2.5 * wage <= 0.8 * price Then
    	MsgBox "You cannot afford this house. "
        Else
    	MsgBox "This house is affordable. "
        End If
    End Sub
    
    

    Answer3 = MsgBox ("Are you happy?",4, "Question 3")

    MsgBox "Task Completed! ", 0,"Task Box"

    如果不在意函数的返回值,可以用调用Sub 过程的方式来调用函数。如下面示例所示,可以省略括号,列出参数并且不要将函数指定给变量:

    基本语法

    变量

    定义变量可以使用Dim语句

    Dim 变量名 As 数据类型
    -----
    变量名命名一般可以这样
    change_name
    函数命名一般这样
    changeName()
    

    数据类型

    数据类型,指变量的特性,用来决定可保存何种数据。数据类型包括 Byte、Boolean、Integer、Long、Currency、Decimal、Single、Double、Date、String、Object、Variant(默认)和用户定义类型等。

    ​ VBA的数据类型、存储空间大小、数值范围

    数据类型 存储空间大小 范围
    Byte 1个字节 0到255
    Boolean 2个字节 True或False
    Integer 2个字节 -32,768到32,767
    Long(长整型) 4个字节 -2,147,483,648 到2,147,483,647
    Single(单精度浮点型) 4个字节 负数时从-3.402823E38到-1.401298E-45;正数时从1.401298E-45到3.402823E38
    Double(双精度浮点型) 8个字节 负数时从-1.79769313486231E308 到一4.94065645841247E-324;正数时从4.94065645841247E-324 到1.79769313486232E308
    Date 8个字节 100 年1月1日到9999年 12月31日
    object 4个字节 任何0bject引用
    String(变长) 10字节加字符串长度 到大约20 亿
    Variant(数字)(字符) 16 个字节 任何数字值,最大可达 Double 的范围
    用户自定义(利用Type) 所有元素所需数目 每个元素的范围与它本身的数据类型的范围相同。

    时间函数

    ​ VBA的日期和函数

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

    字符串

    字符串定义后为空字符串,即没有任何数据的字符串(“”),可以通过以下方式对字符串赋值。字符串在VBA中用双引号表示。

    Mystring = "Hello world."
    MyFixedstring = "This is a fixed string . 
    "MyEmptystring = ""
    

    定长字符串必须是其确定的长度,如果赋值时长度过长或过短,则自动以空格添满或截断。

    字符串的连接可以使用“&”或者“+”,不过不推荐使用后者,因为容易和数字运算混淆。例如可以使用以下语句连接字符串。

    Mystring ="test"
    Mystring = Mystring &" Test Added"
    Mystring = Mystring + " Added still"
    

    字符串处理的常用函数如表2-6所示,各函数的具体使用方法可参考VBA的帮助文档。

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

    Format格式字符串

    Dim MyTime,MyDate,Mystr
    MyTime = #17:04:23#
    MyDate = #January 27,1993#
    '以系统设置的长时间格式返回当前系统时间。
    Mystr =Format ( Time, "Long Time " )
    '以系统设置的长日期格式返回当前系统日期。
    MyStr = Format (Date, "Long Date")
    Mystr = Format (MyTime,"h :m : s")'返回 "17:4:23"。
    Mystr = Format (MyTime,"hh : mm : ss AMPM")'返回"05:04:23 PM"。
    '如果没有指定格式,则返回字符串。
    MyStr = Format (23)'返回 "23"。
    '用户自定义的格式。
    MyStr = Format (5459.4,"##,##0.00")  ’返回"5,459.40"。
    Mystr = Format (334.9,"###0.00") '返回 "334.90"。
    Mystr = Format (5,"0.00%")'返回"500.00%"。
    MyStr = Format ("HELLO","<")'返回"hello"。
    Mystr = Format ("This is it", ">")'返回"THIS IS IT"。
    
    

    常量

    要声明常量并设定常量的值,需要使用Const语句。常量声明后,不能对它赋一个新的数值。例如,假设需要声明一个常量来保存书本价格,可以使用如下语句:

    Const BOOKPRICE As Long = 23.50
    
    

    运算符

    VBA中的运算符有以下几类运算符:

    1. 算术运算符,用来进行数学计算的运算符;
    2. 比较运算符,用来进行比较的运算符;
    3. 连接运算符,用来合并字符串的运算符;
    4. 逻辑运算符,用来执行逻辑运算的运算符。

    算术运算符

    1. ^运算符:求一个数字的某次方,如A^B;
    2. *运算符:乘法运算;
    3. /运算符:除法运算;
    4. \运算符:对两个数作除法并返回一个整数;
    5. Mod运算符:求两数的余数;
    6. 运算符:加法运算;
    7. -运算符:减法运算;

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

    比较运算符

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

    逻辑运算符

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

    运算符比较

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

    数组

    数组是具有相同数据类型并且共享同一个名字的一组变量的集合。数组中的元素通过索引数字加以区分。定义数组的语法如下:

    Dim ArrayName (n) A.s Type
    Dim ArrayName (a to b) As Type
    
    

    其中n、a、b是数组中的元素的数目。n表示数组元素为0到n,共n+1个,a表示数组元素最小索引为a,最大为b,元素个数为(b-a+1)个。
    例如,如果要创建保存10个学生名字的数组,可以使用如下语句:

    Dim strstudents (9) As string
    注意,括号中的数字是9而不是10。这是因为在默认情况下,第一个索引数字是0。数组在处理相似信息时非常有用。

    输入和输出

    Sub MyFirstVBAProgram()
        Dim strName As String
        Dim strHello As String
        strName = InputBox("请输入你的名字:")
        strHello = "你好," & strName & " !"
        MsgBox strHello
    End Sub
    

    如果用户单击O或按下Enter键,则 InputBox函数返回文本框中的内容。如果用户单击Cancel,则此函数返回一个长度为零的字符串 ("")。

    控制程序流程

    • 顺序语句:从上到下,由程序的第一行执行到最后一行;
    • 判断分支语句:根据条件跳过部分语句,执行另一部分;
    • 循环语句:循环执行一段语句。

    顺序语句

    顺序语句是最基础的,按照语句一步一步的执行。

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

    判断语句

    If...Then..Else语句
    If表达式是根据表达式的值有条件地执行一组语句,如果条件为真,则执行其后的语句,否则到下一个判断条件。其语法为:

    If condition Then [statements][Else elsestatements]
    
    

    或者,可以使用块形式的语法:

    If condition Then
    	[ statements]
    [ElseIf condition-n Then
    [elseifstatements] ...
    [Else
    
    [ elsestatements ] ]
    End If
    
    

    判断条件

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

    在使用判断语句时,也会使用到以下逻辑运算符。

    1. And运算符:通过“result = expression1 And expression2”使用,如果两个表达式的值都是 True,则result是 True。如果其中一个表达式的值是False,则result是False。
    2. Not运算符:通过“result = Not expression”使用,如果 expression是 Tnue,则返回False,否则返回True。
    3. Or运算符:使用同And运算符,如果两个表达式的值有一个是 Tue,则result是True。如果两个表达式的值都是False,则result是False。

    例子

    Dim Number,Digits,Mystring
    Number = 53
    '设置变量初始值。
    If Number < 10 Then
    	Digits = l
    ElseIf Number < 100 Then
    '若判断结果为True,则完成下一行语句。
    	Digits = 2
    Else
    	Digits = 3
    End If
    
    
    Function Bonus (performance, salary)
        select Case performance
        case l
        Bonus = salary *0.l
        Case 2,3
        Bonus = salary *0.09
        Case 4 To 6
        Bonus = salary *0.07
        Case Is >8
        Bonus = 100
        Case Else
        Bonus = o
        End select
    End Function
    
    --------------
    Sub Discount3 ()
    Dim Quantity As variant
    Dim Discount As Double
    Quantity = InputBox("Enter Quantity: ")
        select Case Quantity
        Case ""
        Exit Sub
        Case 0 To 24
        	Discount = 0.1
        Case 25 To 49
        	Discount = 0.15
        Case 50 To 74
        	Discount = 0. 2
        Case Is >= 75
        	Discount = 0.25
        End select
        MsgBox "Discount: " & Discount
    End Sub
    
    

    循环语句

    For Next语句

    For I = l To 10
    	For J = l To 10
    		For K= l To 10
    			...
    		Next K
    	Next J
    Next I
    
    
    Dim Found,My0bject,MyCollection
    Found = False
    '设置变量初始值。
    For Each Myobject In MyCollection
    '对每个成员作一次迭代。
    	If Myobject.Text = "Hello" Then
    		Found = True
    		′将变量 Found的值设成True。
    		Exit For
    		’退出循环。
    	End If
    Next
    
    

    For Each-Next语句

    在前面的章节中讲过,“集合”是一组相关的对象。例如,Workbooks集合是所有打开的Workbook 对象的集合,还可以使用很多其他的集合。假设要在集合的所有对象上执行某个动作,或要对集合的所有对象求值并在特定条件下采取动作,这些都是使用For Each-Next结构的好机会,因为在使用For Each-Next结构时,不必知道集合中有多少元素。
    For Each-Next结构的语法如下所示:

    For Each element In collection
    [instructions]
    [Exit For]
    [instructions]
    Next [element]
    

    下面的过程在活动工作簿中的 Worksheets集合上使用For Each-Next结构。在执行这个过程的时候,MsgBox 函数显示出每个工作表的Name属性(如果活动工作簿中有5个工作表,就调用MsgBox函数5次)。

    Sub countsheets ()
    Dim Item as worksheet
    For Each Item In Activeworkbook.worksheets
    	MsgBox Item.Name
    Next Item
    End sub
    

    Exit语句

    Exit Do
    Exit For
    Exit Function
    Exit Property
    Exit sub
    
    

    循环中可以在任何位置放置任意个Exit For语句,随时退出循环。**Exit For经常在条件判断之后使用,例如 If…Then,并将控制权转移到紧接在 Next 之后的语句。可以将一个For…Next循环放置在另一个For…Next循环中,组成嵌套循环。不过在每个循环中的counter要使用不同的变量名。

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

    With语句

    With语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称。例如,要改变一个对象的多个属性,可以在With控制结构中加上属性的赋值语句,这时候只是引用对象一次而不是在每个属性赋值时都要引用它。下面的例子显示了如何使用With语句来给同一个对象的几个属性赋值。

    with MyLabel
        .Height = 2000
        .width = 2000
        .caption = "This is MyLabel"
    End with
    
    

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

    程序一旦进入With 块,object就不能改变。因此不能用一个With语句来设置多个不同的对象。可以将一个With块放在另一个之中,而产生嵌套的With语句。但是,由于外层With块成员会在内层的With 块中被屏蔽住,所以必须在内层的With块中,使用完整的对象引用来指出在外层的With块中的对象成员。

    With语句经常使用在对一个对象或用户自定义类型需要进行反复引用的情况下,特别是在循环中,如果要反复引用某个对象,那么最好通过With语句来引用该对象。

    调试程序

    Debug调试

    Debug对象可以在运行时将输出发送到立即(Immediate)窗口。Debug对象有2个方法: Assert和 Print方法,Assert 判断1条条件语句,如果为False,则挂起执行,暂停在Assert语句的地方,Print语句则向立即窗口输出一段文本,例如以下代码:

    Dim i As Long
        For i = l To 10 step 1
        Debug.Print i
        Debug.Assert i <8
    Next i
    
    

    当程序执行到3行Debug.Print时,程序向立即窗口输出i的值,而当i大于等于8时,Debug.Assert判断的表达式为False,程序挂起。

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

    IDE调试

    VBA提供了以下几种调试工具供使用。这些工具包括:

    • 立即窗口:可以交互式运行VBA代码;
    • 监视窗口:监视变量、对象的值或内容;
    • 断点:程序执行到此后会进入中断状态,可以单步执行,查看变量对象等;
    • 单步执行代码(F8)

    错误处理

    • On Error Resume如果有运行时刻的错误发生,那么程序将从导致错误发生的语句处重新开始执行;

    • On Error Resume Next如果有运行时刻的错误发生,那么程序就从导致错误发生的语句的下一句继续执行下去。

    Sub debugPrint()
        Dim i As Long
        For i = l To 10 Step 1
            Debug.Print i
    		On Error Resume Next  '暗示下面只要有错误的语句都可以跳过
            a = 8 / 0
            b = 8 / 0
            Debug.Assert i < 8
        Next i
    End Sub
    

    事件触发

    工作簿的事件

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

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

    窗体事件

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

    OnTime事件

    OnTime事件在一天中的某个特定时刻发生。下面的示例展示了如何进行Excel编程,使其在下午3点发出叫声并显示消息:

    Sub SetAlarm ()
    Application.onTime Timevalue("15:00:00"),"DisplayAlarm"
    End Sub
    Sub DisplayAlarm()
    Beep
    MsgBox "wake up. It's time for your afternoon break ! "
    End Sub
    

    该示例中,SetAlarm过程使用Application对象的OnTime方法来设置OnTime事件。该方法使用了两个参数:时间(在示例中为3 pm)和该时间到来时执行的过程(在示例中为DisplayAlarm过程)。执行SetAlarm过程后,DisplayAlarm过程将会在下午3点被调用,弹出如图19-10所示的对话框。

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

    如果想要通过相对于当前时间来确定事件的发生时间,例如,从现在开始的20分钟之后,那么可以这样来编写指令:

    Application.onTime Now + TimeValue ( "00:20:00"),"DisplayAlarm"
    

    也可以使用OnTime方法来确定某个特定日期过程发生的时间。下列语句在2010年4月1日上午 12:01运行DisplayAlarm过程。

    Application. OnTime DateSerial (2010, 4,1)+TimeValue ("00:00:01"), "DisplayAlarm"
    
       Dim NextTick As Date
    
    Sub UpdateClock()
    '   Updates cell A1 with the current time
        ThisWorkbook.Sheets(1).Range("A1") = Time
    '   Set up the next event five seconds from now
        NextTick = Now + TimeValue("00:00:05")
        Application.OnTime NextTick, "UpdateClock"
    End Sub
    
    Sub StopClock()
    '   Cancels the OnTime event (stops the clock)
        On Error Resume Next
        Application.OnTime NextTick, "UpdateClock", , False
    End Sub
    
    

    窗体

    窗体是事件驱动类型的。

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

    按钮控件

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

    文本框控件

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

    双击按钮控件,会生成单机代码,函数名称为cmdHello_Click()(即为按钮控件的名称+事件名称)

    Private Sub cmdHello_Click()  
        Me.txtMsg.Text = "Hello VB!"  'txtMsg即为文本框控件的名称  Me相当于This
    End Sub
    

    excel里面的窗体使用

    最关键的就是插入一个图片或者窗体控件,然后制定宏

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

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

    为其指定宏,就可以点击它控制后面的程序了。

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

    展开全文
  • CorelDRAW VBA编程教程

    热门讨论 2013-10-13 16:17:52
    文档介绍得比较详细,开发实例讲解很到位。有兴趣的值得深入
  • Visual Basic for Applications(VBA)是 VisualBasic 的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展 Windows 的应用程序功能,特别是Microsoft Office软件...

    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
    
    
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 277
精华内容 110
关键字:

vba编程教程