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的一些使用心得的更多相关文章

  1. Excel VBA业余爱好者心得及总结

    我不是IT专业人士,而是一位医务工作者,当初学习Excel VBA时,是因为读研究生时的课题需要:实验仪器每天产生4个Word文件,每个文件有9个表格,总计近百个数据.为了对这些数据进行统计分析,则需 ...

  2. vba批量作图心得1

    1.1:连续有几个图的时候,如果需要设置某一个图的横坐标标签隐藏,要注意将坐标轴标签属性和坐标轴曲线粗细的属性区分开来 1.2:PlotArea里面有left和insideLeft属性,结合两个可以控 ...

  3. VBA高效删除不连续多行

    最近在搞VBA,在感叹Excel功能强大的同时,对于新接触的一门编程语言也很烦恼.很多基础的语法都要靠网上搜索.现总结一些学习到的心得. VBA高效删除不连续多行 在一个拥有几万条数据的Excel中, ...

  4. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  5. NoSql数据库使用半年后在设计上面的一些心得

    NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...

  6. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  7. 我的MYSQL学习心得(三) 查看字段长度

    我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  8. 我的MYSQL学习心得(四) 数据类型

    我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...

  9. 我的MYSQL学习心得(五) 运算符

    我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

随机推荐

  1. github与eclipse创建仓库及克隆仓库

    1.前往github官网注册账号,并下载客户端: 2.为eclipse工程创建本地仓库: 1,目前大多eclipse都预装了egit插件,如果没有请自行安装 2,在eclipse内创建工程->右 ...

  2. js事件执行顺序

    http://ejohn.org/blog/how-javascript-timers-work/

  3. celery 快速入门教程 celery 定时器

    当然首先得安装celery和rabbitmq-server,如果有redis需要安装redis 安装Redis $ yum install redis 启动 Redis $redis-server 检 ...

  4. 【转】PaxosLease算法--2PC看Paxos选主

    原文请参考[[置顶] Paxos master选举--PaxosLease算法] 众所周知,为了避免Paxos算法的活锁问题,必须选举唯一的proposor.偏偏在Paxos原论文中,作者L. Lam ...

  5. C# 日志框架的添加

    .NET中 记录日志的比较好的主要是Log4Net和Enterprise Library的Logging 复杂一点的还可以实现自动化Log日志 教程 首先是第二种方式 1.需要添加以下几个DLL  下 ...

  6. apache CXF wsdl2java工具的使用

    cxf的wsdl2java命令和JDK的wsimport命令的区别和使用 JDK提供了一个wsimport.exe的命令,主要是用于将WebService生成客户端代码,然后好调用WebService ...

  7. Memcache入门

    说来惭愧,第一次听说Memcache是在大约在6个月前.作为一个搞J2EE开发的,工作一年多了,都没听说过Memcache实在是惭愧. 当时是换了新工作,第一个任务是开发一个报表系统供公司内部使用.为 ...

  8. Android反编译

    反编译(未混淆情况) 1.获取资源文件: 命令行界面apktool.bat d -f  test.apk  fileName  (然而修改后缀名为.zip即可获得): apktool2.0以上版本:a ...

  9. Vertica 项目常用代码

    1.查看目录下面有多少文件数 ls -l |grep "^-"|wc -l 思路很明显了,ls后通过grep进行过滤判断是文件还是文件夹, 如果是判断文件夹,可以使用ls -l | ...

  10. 动手学习TCP:4种定时器

    上一篇中介绍了TCP数据传输中涉及的一些基本知识点.本文让我们看看TCP中的4种定时器. TCP定时器 对于每个TCP连接,TCP管理4个不同的定时器,下面看看对4种定时器的简单介绍. 重传定时器使用 ...