分享

vba书籍心得

 数学与文字 2020-02-09
1、凡是重复的工作,都有优化之道
2、录制宏时,要定位到最小单位
3、Alt+F11 调出VBE
4、Alt+F8   调出“宏选项”按钮
5、同一模块中的过程,call能调动共有和私有的过程。跨模块,call只能调动共有工程。
6、Resume  返回错的地方继续执行。
7、需要记忆的对象
application       代表整个excel应用程序
workbook 代表excel工作簿对象
worksheet 代表工作表对象
window 代表窗口对象
range 代表单元格对象
shape 代表嵌入到工作表中的图形对象,包括自选图形、OLE对象、图片、图表、 艺术字、文本框、批注等。
name 代表对象的名称
chart 代表图表对象
worksheetfunction 代表工作表函数对象
comment  代表单元格中的批注对象
8、引用对象方式
1、使用序号
对象集合(序号)
worksheets(1)
2、使用名称
对象集合(“对象名称”)
worksheets("sheet1")
注意:cells()只能使用序号,不能使用对象名称,使用对象名称是range()的职责
9、application.range:只能引用activesheet 的range
application.activesheet: 只能引用活动工作簿的活动工作表,而workbook.activesheet活动工作簿和非活动工作簿的工作表都能引用
10、上下级对象访问。
访问子对象的语法:父对象.子对象
方位父对象的余额:子对象.parent
11、常用活动对象:
activecell:                 活动单元格
activechart:            活动图表
activesheet:            活动工作表
activeworkbook:    活动工作簿
activewindow:    活动窗口
12 、sheets 与 worksheets 的区别
Sheets包含所有表,Worksheets是工作表,如果没有其他类型的表——宏表、图表等,Sheets("Sheet1").Range("a1:c7")和 Worksheets("sheet1")是一样的
13、对象的方法和属性
自己想要的结果是用方法对对象的属性进行操作。
14、事件代码写在他对应的对象中,而非写在模块中。
15、定义变量使用dim,
为变量赋值分对象类和非对象类
对象类:set  a   =
非对象类 let(可以省略) a  = 
16、对象的等号和空格
等号的目的是将对象的的结果输出
空格的目的是改变对象的参数
17、变量的作用域:工程级、模块级、过程级
工程级:在模块顶部,使用public定义
模块级:在模块顶部,使用dim定义
工程级:在工程中定义。(同一模块中,在过程A中定义变量之后,可以直接从过程B中调用,不用再次声明)
18、变量分两种:数据变量和对象变量
数据变量:存储数据,包括以下类型
byte
Boolean,
integer
long
single
double
currency
date
string
variant(任意数据变量)
对象变量:拥有对象的一切属性,包括以下
application
workbook
worksheet
Window
range
shape
name
chart
worksheetfunction
comment
object(任意对象变量)
19、常量,多次且重复使用,可将其定义为常量
常量分为过程级、模块级和工程级
过程级,在过程中定义:const city as string = "石家庄" ;
模块级,在模块顶部定义:const city as string = "石家庄“;
工程级,在模块顶部定义:public const city as string = "石家庄“
20、对象变量可以通过.来调出对象的属性,但是有部分对象不能。
21、通过变量可以加快程序的运行速度。
22、自动调节列宽:
entirecolum.autofit
23、相对引用:formulaR1C1
range("b4").formulaR1C1 = "r[-3]c[-1]"   以B4为基准向上偏移3行,向右偏移1行。
24、Selection.FormulaR1C1 = "=COUNTA(R[-9]C:R[-1]C)"
其中的R代表行、C代表列,R和C后面的数字相代表行偏移量和列偏移量。当偏移量是0时可以忽略不写。
【管理员】VBA入门 17:02:18
R是行  C是列
R1就是第一行  C1就是第一列
【管理员】VBA入门 17:02:39
R[1]表示当前行
C[1]表示当前列
【管理员】VBA入门 17:03:10
R[2]表示下一行
也就是说,中括号关于活动单元格的相对引用,
R[1]C[1]:表示活动单元格所在位置在。
不加中括号,指的是具体的某一与活动单元格无关的坐标。R2C2为绝对引用,表示$B$2
RC,什么都不加,为相对引用
25、单元格对象
最基本的表示方式有三种:
range(“a1")
cells(1,1)
[a1]
此外,还有交集、合集、偏移量、已用区域、当前区域、end等单元格相关的概念。
可以分为:
引用单元格
引用单元格区域
引用多区域单元格
引用整行整列单元格
26、range的默认属性是value,该value是当前单元格的值,例range(“a1”)为a1单元格的值。
range区域的默认属性是value,该值为一数组,range("a1:b2").value是一个二维数组。
 

27、 range的引用方式。
 28、 
 29、引用整行和整列
 
 30、range嵌套使用
 
31、selection与activecell:当前选取与活动单元格
在选择了单元格和单元格区域的情况下,Selection代表当前选中的所有单元格,通常简称选区。而activecell则表示活动单元格。选区可以是一个单元格,也可以包含多个单元格甚至多个区域,但活动单元格永远只有一个,而且活动单元格一定包含于选区中。
如果选区仅有一个单元格,那么选区与活动单元格完全相同,他们代表相同相同的对象。
如果需要在选区不变的情况下改变活动单元格,可以用range.active 方法来实现,其语法如下
range.activate
其中range表示待激活的单元格,只能包含一个单元格,如果超过一个则会在运行时产生错误。如果让选区中第四个单元格成为活动单元格,使用以下语句即可
selection(4).activate 
若果想让选区中的第3行第2列成为活动单元格,使用以下语句即可:
selection.cells(3,2).activate 
activecell和selection都只能引用活动工作表的单元格,如果在前面加上其他工作表名称,引用必将在运行时产生错误。例如代码“worksheets(2).selection"并不能成功引用第二个工作表的选区。
32、已用选区和当前选区
已用选区usedrange,其父对象是工作表
如果单元格以前有数据,清除了该数据但是没有清除该单元格数据的格式,该单元格也属于已用选区的一部分。
当前选区currentregion,其父对象是单元格
33、利用cells引用单元格有三种方法
1)cells(行坐标,列坐标)
英文版:cells([rowindex],[columnindex])
2)cells(行号,列号)
3)  range.cells(横坐标,纵坐标)
34、 
  
 range.cells(横坐标,纵坐标)与worksheet.cells(横坐标,纵坐标)坐标计算方式相同,但是参照点不同,也仅是参照点不同,范围不受限制。
 
 range.cells改变了参照点,不受range区域的限制,range(索引),受range区域的限制。
35、cells(行坐标,列坐标)可以循环行,也可以循环列
range(“a"&i)只能循环列
[a]行列都不能循环
 
 
36、specialcells:按条件引用区域
range.specialcells(type,value)
 
  
  
  
35、resize
range.resize(rowsize,columnsize)
resize 是将原来的区域变成resize之后的区域。
 
with 语句可以在参数内调用 
37、offset(rowoffset,columnoffset)
不改变区域的大小,将区域进行偏移
 
  
38、range.copy(destination)
destination是粘贴的参考单元格,以该单元格为参照点,自动resize和range一样的大小
 
  
  
 
 向下偏移会多复制一个空行,但是无所谓,反正粘贴的时候不会统计该空行。
Rem 由于复制“A表”时“总表”是空表,因此直接复制到A1单元格可以,不用考虑覆盖数据问题
Rem 当复制“B表”时,由于“总表”已经有了数据,为了避免盖原有数据,使用Range.Offset属性相对于原有的已用区域向下偏移,偏移量等于已用区域的行数
Rem 偏移后得到的新区域在原来的已用区域下一行,但是Range.Copy方法的第二参数只需要单个单元格,因此再通过“.Cells(1)”引用Range.Offset属性产生的区域的第一个单元格
Rem 复制“C组”的数据和复制“B组”数据的思路一致
Sub 复制数据()
   Worksheets("总表").Cells.Clear '清除“总表”中的所有内容,包括格式信息
  '将“A组”工作表的已用区域复制到“总表”中,存放区域的左上角单元格为A1
  Worksheets("A组").UsedRange.Copy Worksheets("总表").Cells(1)
  '将“B组”工作表的已用区域复制到“总表”的已用区域下一行中
  Worksheets("B组").UsedRange.Copy Worksheets("总表").UsedRange.Cells(1).Offset(Worksheets("总表").UsedRange.Rows.Count).Cells(1)
  '将“C组”工作表的已用区域复制到“总表”的已用区域下一行中
  Worksheets("C组").UsedRange.Copy Worksheets("总表").UsedRange.Cells(1).Offset(Worksheets("总表").UsedRange.Rows.Count).Cells(1)
End Sub
Sub 复制数据2()
  Worksheets("总表").Cells.Clear '清除“总表”中的所有内容
  '将“A组”工作表的已用区域复制到“总表”中,存放区域的左上角单元格为A1
  Worksheets("A组").UsedRange.Copy Worksheets("总表").UsedRange.Cells(1)
  '将“B组”工作表的已用区域(排除前2行)复制到“总表”的已用区域下一行中
  Worksheets("B组").UsedRange.Offset(2).Copy Worksheets("总表").UsedRange.Cells(1).Offset(Worksheets("总表").UsedRange.Rows.Count).Cells(1)
  '将“C组”工作表的已用区域(排除前2行)复制到“总表”的已用区域下一行中
  Worksheets("C组").UsedRange.Offset(2).Copy Worksheets("总表").UsedRange.Cells(1).Offset(Worksheets("总表").UsedRange.Rows.Count).Cells(1)
End Sub

Rem Range.Copy 方法的语法如下:
Rem 表达式.Copy (Destination)
Rem 其中参数Destination是可选参数,代表目标区域,使用单个单元格即可
Rem Range.Copy 方法可将“表达式”所代表的区域复制到该区域
Rem 当指定了Range.Copy 方法的参数时,Range.Copy 方法会将数据与格式一并复制过去
Rem 只有使用“选粘性粘贴”才会忽略格式
Sub test()
Range("a1:c2").Copy Range("b5")
End Sub

39、union:多区域集合
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多