VBA的一些使用心得
VBA的知识比较零散,因此开一贴记录一下使用VBA时的一些方法和心得。主要针对Excel,参考在这里
1. Collection Class
大部分情况下,Collection Class是比数组(Array)更好的一个选择,使用也十分简单:
Sub test()
'Create
Dim names As New Collection
names.Add "Jack"
names.Add "Rose" 'Or
Dim phones As Collection
Set phones = New Collection phones.Add ""
phones.Add "" 'Access an Item
MsgBox names.Item()
MsgBox phones.Item() 'Count
MsgBox names.Count 'Remove
phones.Remove () 'Loop collection
For Each n In names
MsgBox n
Next
For Each n In phones
MsgBox n
Next End Sub
参考:http://msdn.microsoft.com/zh-cn/library/yb7y698k(v=vs.90).aspx
2. For Each 遍历数组时,For Each后跟的必须是Variant:
Sub test() Dim names() As String
Dim n As Variant 'This can't be String! Must be Vaiant names() = "Pre"
names() = "Jack"
names() = "Haha"
names() = "Rose" For Each n In names
MsgBox n
Next End Sub
参考:http://stackoverflow.com/questions/4228137/vba-for-each-on-an-array
3. Function与Sub的区别:
1) Sub 过程定义时无需定义返回值类型,而Function 过程一般需要用“As 数据类型” 定义函数返回值类型。
2) Sub 过程中没有对过程名赋值的语句,而Function 过程中一定有对函数名赋值的语句,一般在函数最后返回值,格式如下:
Set functionName = xxxxxx
3) 调用过程:调用 Sub 过程与 Function 过程不同。调用 Sub 过程的是一个独立的语句,而调用函数过程只是表达式的一部分。另外,自定义函数并不允许修改工作表和单元格格式 (A UDF will only return a value it won't allow you to change the properties of a cell/sheet/workbook. )。但是,与 Function过程一样,Sub 过程也可以修改传递给它们的任何变量的值。
4) 调用 Sub 过程有两种方法:
以下两个语句都调用了名为 MyProc 的 Sub 过程。
Call MyProc (FirstArgument, SecondArgument)
MyProc FirstArgument, SecondArgument
注意当使用 Call 语法时,参数必须在括号内。若省略 Call 关键字,则也必须省略参数两边的括号。
4. 遍历Dictionary
For Each strKey In oDic.Keys()
do_something
Next
5. Application.WorksheetFunction
调用Application.WorksheetFunction,可以在VBA中使用Excel已有的函数,例如Max,Min,Average等。常用的还有COUNTA这个函数:
Sub test()
MsgBox Range("A1:A10").Count 'Output 10
MsgBox Application.WorksheetFunction.CountA(Range("A1:A10")) 'Output 4 because 4 of 10 cells are not empty
End Sub
6.Standard Modules vs. Class Modules
面试曾被问到这题,之前的VBA全都是操作单元格为主,没想到还能面向对象。根据这里的定义,Standard Modules就像静态域,全局只有一个数据备份;而Class Modules就如普通的类,可以有多个对象,多个不同的数据备份。
7. Range.Offset和Range.Resize的返回值必须用set来引用。
如:
Set priceRange = priceRange.Resize(rowNum - , priceRange.Columns.Count) 'Set!!!
Set actRange = actRange.Offset(, -)
VBA的一些使用心得的更多相关文章
- Excel VBA业余爱好者心得及总结
我不是IT专业人士,而是一位医务工作者,当初学习Excel VBA时,是因为读研究生时的课题需要:实验仪器每天产生4个Word文件,每个文件有9个表格,总计近百个数据.为了对这些数据进行统计分析,则需 ...
- vba批量作图心得1
1.1:连续有几个图的时候,如果需要设置某一个图的横坐标标签隐藏,要注意将坐标轴标签属性和坐标轴曲线粗细的属性区分开来 1.2:PlotArea里面有left和insideLeft属性,结合两个可以控 ...
- VBA高效删除不连续多行
最近在搞VBA,在感叹Excel功能强大的同时,对于新接触的一门编程语言也很烦恼.很多基础的语法都要靠网上搜索.现总结一些学习到的心得. VBA高效删除不连续多行 在一个拥有几万条数据的Excel中, ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- NoSql数据库使用半年后在设计上面的一些心得
NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...
- 我的MYSQL学习心得(二) 数据类型宽度
我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(三) 查看字段长度
我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(四) 数据类型
我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(五) 运算符
我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
随机推荐
- iOS 学习 - 5.UILabel设置行距
NSMutableAttributedString *arrString =[[NSMutableAttributedString alloc]initWithString:@"asdass ...
- Cocos2d入门--3--小球运动
本章直接上源代码.内容不难,主要就是 HelloWorldScene.h文件: #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H_ ...
- 敏捷软件开发:原则、模式与实践——第10章 LSP:Liskov替换原则
第10章 LSP:Liskov替换原则 Liskov替换原则:子类型(subtype)必须能够替换掉它们的基类型(base type). 10.1 违反LSP的情形 10.1.1 简单例子 对L ...
- spring源码分析的书到了
现在写java后台可以说都能用上spring 在原有的spring基础上,加上自己定制的一些功能,能够使编程变得非常简化. 我也准备在我的毕业设计中写一些spring改造的东西.用来简化开发. 就拿连 ...
- Solr 参考资料
solr 的入门好资料 https://cwiki.apache.org/confluence/display/solr/Apache+Solr+Reference+Guide https://two ...
- 在jsp中默认写上的一段java代码表示basePath 的路径的具体的意思是什么?
<% String path = request.getContextPath(); String basePath = request.getScheme() + "://" ...
- 一. Linux 常用命令总结
1. linux 基础命令 who, which, basename, dirname, echo, type, hash, whatis, makewhatis, man, info, help, ...
- oracle 创建字段自增长——两种实现方式汇总
mysql等其他数据库中有随着记录的插入而表ID自动增长的功能,而oracle却没有这样的功能,我们有以下两种方式可以解决字段自增长的功能. 因为两种方式都需要通过创建序列来实现,这里先给出序列的创建 ...
- [转]Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作
本文转自:http://www.cnblogs.com/wuhuacong/archive/2012/03/09/2387680.html Oracle中对数据对象和数据的管理,无疑都是使用PL/SQ ...
- codeforces 709A A. Juicer(水题)
题目链接: A. Juicer 题意: 给出n个橘子,汁漫出来了就倒出来,反正就是要求要倒几次; 思路: AC代码: #include <iostream> #include <cs ...