学会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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容

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