学会VBA,菜鸟也高飞 读书笔记

第一章 VBA是什么

Visual Basic Application

一个Excel文件就是一个工作簿(Workbook),一个Excel应用程序可以打开多个Excel文件,这些工作簿文件统称为工作簿集合(Workbooks),可以用Workbooks("xxx.xlsx")来表示某个工作簿。一个工作簿文件可以有多个工作表(Worksheet),同一个工作簿的所有工作表统称为工作表集合(Worksheets),可以用Workbooks("xxx.xlsx").Worksheets("Sheet1")来表示工作簿(xxx.xlsx)中的名称为Sheet1的工作表。ThisWorkbook表示当前工作簿。

类似的,某个工作表中的所有单元格集合用Cells来表示。Workbooks("xxx.xlsx").Worksheets("Sheet1").Cells(1,1)表示(A1)单元格。

某个单元格区域用Range来表示。Workbooks("xxx.xlsx").Worksheets("Sheet1").range("A1")或Workbooks("xxx.xlsx").Worksheets("Sheet1").range("A1:D100")表示相应的单元格区域。

第二章 第一个VBA程序

调出“开发工具”选项卡: Alt+T、O =>“自定义功能区”的“主选项卡”下方勾选“开发工具”选项=>“确定”

打开VB编辑器(Visual Basic 编辑器):在“开发工具”选项卡中或Alt+F11

代码可以写在多个地方(可以用相对路径来简化对象指代),一般是写在模块中。

运行代码:将光标置于所要执行的过程中,点击运行按钮或F5

含有VBA代码的文件要以.xlsm为后缀名来保存。

在未设置的Excel中打开.xlsm中会有警告信息弹出,可以在Excel选项中添加“受信任位置”(某个文件夹路径)来设置以后打开该类文件不再提示警告信息。

第三章 VBA中的等号

这一章就4页。。。太汗了吧

就说了VBA中等号“=”就两层含义:1、赋值;2、比较。

文中还说了VBA复制的let可省略,  Let a=1 可以写作 a=1,还有,每行代码前加一个以英文冒号结束的标签,该标签并不影响代码的运行。如,L01: Let a = 1

第四章 VBA编程再探索

这一章也很短,还把一段代码重复多次,并用单元格名称的方式把变量有啰嗦了一遍,唉,这样太温柔了吧,拜托,咱能简单粗暴点不。。。

第五章 正式开始VBA编程之旅

就是讲到一个循环语句: For ... to ... Next

For r = 1 to 50000 Step 1 ‘Step省略时,步长为1

    ...

Next

这里在讲解循环时用到了单步执行(F8),这是调试的一种方法。

讲到一点是新建的工作簿文件未保存前是没有后缀名的,可是保存后有后缀名的,要注意代码中相应的调整,避免出现指代错误。

讲到了“录制宏”功能,可以通过录制宏来看看相应操作对应的VBA代码,从而减轻我们记忆负担。罗刚君也强调,我们录制宏并不是为了得到宏,而是为了得到相应的VBA对象和属性。

讲到一个结构: With ... End With

With Selection.Interior

    .Color = 255

End With

下面三段代码做的事情一样,只是形式上越来越简化

Range("A1:A10").Select

With Selection.Interior

    .Color = 255

End With

With ... End With的作用是省去每次写对象名

Range("A1:A10").Select

Selection.Interior.Color = 255

Select返回一个Selection对象

Range("A1:A10").Interior.Color = 255

Cells(3, 4) 和 Range("D3")效果是一样的,但是有各有特长。

Range("A1:D10")  Range("A1", "D10")  Range(Cells(1,1), Cells(10,4)) Range("A1").Resize(10, 4)

CurrentRegion指的是当前区域由周围空行或空列围成的最小区域。

第六章 VBA是一种语言

条件结构

If  条件 Then

条件为真时执行的语句

End If  条件为假时则什么都不执行

稍微复杂一点的条件结构

If  条件 Then

    条件为真时执行的语句

Else

    条件为假时执行的语句

End If

Cells.Clear 可以清除单元格的内容及格式

更复杂一些的条件结构

If  条件1 Then

    条件1为真时执行的语句

ElseIf 条件2

    条件2为假时执行的语句

...

Else

    以上条件都为假时执行的语句

End If

分支语句,从上面的多条件结构已经可以延伸出分支语句了。

Select Case 表达式或变量

    Case 值1

        为值1时执行的语句

    Case 值2

        为值2时执行的语句

    ...

    Case Else

        不为以上所有值时执行的语句

End Select

循环结构,之前已经有了For ... to ... Next,下面还有For Each

For Each mysht In ThisWorkbook.Worksheets

    mysht.Cells(1, 1).Value = "a111bc"  'Value可以省略

Next

此外,还有Do Until循环

Do Until 退出循环条件

    循环语句

Loop

UsedRange对象(数据占用区域),.Rows.Count  .Columns.Count有其独特的用法。

Exit For    Exit Loop 可以用在跳出相应的循环体(这显然不是一个好主意,最好还是别用)。

第七章 Excel就是小怪兽

这一章又是重复,并且通过“小怪兽”的例子来把抽象的计算机概念具体化、形象化。怎么说呢,面向初学者吧,减缓学习曲线的陡峭程度,重复呢,是加深印象,便于记忆吧。

第八章 对象! 对象!!

其实对象在计算机语言中,就是一个实体,它有着自己的属性、方法,并且能够响应特定的事件。

介绍了Worksheet、Workbook的内置的事件。

有个小技巧,按住Shift键打开文件可以忽略自动执行的宏。

这一章内容不少,尤其是8.7小节的案例,我觉得可以独立开一章了,值得细细体会。

第九章 VBA变量类型

Sub myVar141()

Dim dMyNum As Long

Dim sMyString As String

sMyString = "1112"

MsgBox sMyString

dMyNum = sMyString

MsgBox dMyNum

End Sub

Sub Example_08_146()

Dim mySheet As Worksheet

Set mySheet = ThisWorkbook.Worksheets("Sheet1")

For r = 1 To 10

mySheet.Cells(r, 1).Value = r

mySheet.Cells(r, 1).Interior.Color = vbRed

mySheet.Cells(r, 1).Font.Color = vbWhite

Next

End Sub

Sub my100num148()

Dim myNum(99)

For i = 1 To 100

myNum(i - 1) = i

ThisWorkbook.Worksheets(1).Cells(i, 1).Value = myNum(i - 1)

Next

End Sub

Sub arrayDemo151()

Dim a(2) As String

a(0) = "one"

a(1) = "two"

a(2) = "three"

ThisWorkbook.Worksheets("Sheet1").Range("A1:E5") = a()

MsgBox UBound(a(), 1)

End Sub

Sub array2DDemo152()

Dim b(2, 3)  '3行4列的数组 数组从0开始计数,UBound返回最大序数,个数=最大序数+1

For i = 1 To 3

For j = 1 To 4

b(i - 1, j - 1) = 10 * i + j

Next

Next

ThisWorkbook.Worksheets("Sheet1").Range("A1:E5") = b()

MsgBox b(1, 1)  ' 22

MsgBox UBound(b(), 1)  '  2

MsgBox UBound(b(), 2)  '  3

End Sub

Sub arrayUBoundDemo153()

Dim b(2, 3)

MsgBox UBound(b(), 1)

MsgBox UBound(b(), 2)

End Sub

Sub arrayDemo155()

Dim a()

Dim mySheet As Worksheet

Set mySheet = ThisWorkbook.Worksheets("Sheet1")

a() = mySheet.Range("A1:D3")  '.value可以省略    '3行4列的数组,这种从表格中转换过来的数组从1开始计数,UBound返回最大序数,个数=最大序数

MsgBox a(1, 1)              ' 11

MsgBox UBound(a(), 1)      ' 3

MsgBox UBound(a(), 2)      ' 4

mySheet.Range("H8").Resize(UBound(a(), 1), UBound(a(), 2)) = a()

End Sub

Sub cellsClear()

Cells.Clear

End Sub

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本例为设置密码窗口 (1) If Application.InputBox(“请输入密码:”) = 1234 Th...
    浮浮尘尘阅读 13,753评论 1 20
  • 1.1 VBA是什么 直到90年代早期,使应用程序自动化还是充满挑战性的领域.对每个需要自动化的应用程序,人们不得...
    浮浮尘尘阅读 21,831评论 6 49
  • 可以通过在属性窗口设置名称来给对象重新命名,名字可以由字母、汉字(2字符)、数字以及下划线组成,但必须以字母或汉字...
    重头再来0706阅读 2,199评论 0 1
  • 昨天的一件事,让我突然意识到:我们中国人似乎向来就没有认错的习惯。 小时候有父母护体,无论做错什么都有他们庇护,所...
    左知阅读 1,545评论 7 13
  • CSS的全称是什么? CSS,Cascading Style Sheets,层叠样式表。 CSS有几种引入方式?l...
    虚玩玩TT阅读 218评论 0 1