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. FQ技术

    什么是技术,就是翻_墙技术啦~ 关于GoogleFQ的网页,点击图片就能进入该网页浏览相关的FQ的设置 hosts所在文件夹: Windows 系统hosts位于 C:\Windows\System3 ...

  2. 多线程技术 NSThread & NSOperation & GCD

    多线程:在iOS开发中,用到多线程的处理问题的时候有很多,比如异步下载数据时刷新界面等等. 引入多线程来处理问题的关键就是,基于多线程可以使界面更加流畅,防止界面假死. 界面假死:比如你单击一个按钮来 ...

  3. 怎样查看linux版本

    玩一台新的linux服务器,首先要做的,就是先看下是什么版本的系统: 命令如下: 登录到linux执行cat /etc/redhat-release ,例如如下: [root@3.5.5Biz-46 ...

  4. TOMCAT报错:HTTP Status 404 -

    构建struts2工程师,tomcat报错: HTTP Status 404 - type Status report message description The requested resour ...

  5. Linux objcopy命令

    一.简介 [功能] 将目标文件的一部分或者全部内容拷贝到另外一个目标文件中,或者实现目标文件的格式转换. [描述] objcopy工具使用BFD库读写目标文件,它可以将一个目标文件的内容拷贝到另外一个 ...

  6. php session文件修改路径

    默认状态下php的 sess_文件会生成到/tmp目录下,1天的时间就会生成很多,由于/tmp目录下还有别的重要文件,所以看起来不爽.具体更改做法是,找到 php.ini文件里面的session.sa ...

  7. 免费微信公众号专用h5在线电影票API

    免费h5在线电影票API,通过嵌套返回的h5页面url,实现电影票购买. 接口文档:https://www.juhe.cn/docs/api/id/252,通过此申请APPKEY 接口备注:通过请求返 ...

  8. [转]Try Cloud Messaging for Android

    本文转自:https://developers.google.com/cloud-messaging/android/start

  9. ZooKeeper系列1:ZooKeeper的配置

    问题导读:1.zookeeper有哪些配置文件?2.zookeeper最低配置需要哪些配置项?3.zookeeper高级配置需要配置哪些项? ZooKeeper 的功能特性通过 ZooKeeper 配 ...

  10. Selenium2怎么调用selenium1中方法

    虽然selenium1.0已经成为过去时,现在都用selenium2.0,但是如果想要在代码中调用selenium1.0的api怎么办,看下面 WebDriver driver = new Chrom ...