APP下载

如何在Excel中使用VBA编程

2014-01-13苏子伟

软件工程 2014年1期
关键词:运算符赋值语句

苏子伟

利用Excel软件处理大量数据的过程中,分离有些需要的数据是比较困难的,并且Excel中的宏函数并不能很容易、很纯粹地解决这些问题。这时使用VBA进行数据处理就是最佳的选择。VBA本身与Excel的结合是无缝的,且提供了大量丰富的函数。用VBA操纵表格的过程简单,并且效率极高。

一、下面从六个方面说明VBA编程语言的结构

1.运算符

(1)赋值运算符: =

(2)数学运算符:&(字符连接符)、+(加)、-(减)、*(乘)、

/(除)、Mod(取余)、\(整除)、-(负号)、^(指数)

(3)逻辑运算符:Not(非)、And(与)、Or(或)、Xor(异或)、Eqv(相等)、Imp(隐含)

(4)关系运算符:= (相等)、<>(不等)、>(大于)、<(小于)、>=(不小于)、<=(不大于)、Like、Is

(5)位运算符:Not(逻辑非)、And(逻辑与)、Or(逻辑或)、Xor(逻辑异或)、Eqv(逻辑等)、Imp(隐含)

2.数据类型

下面列举了一些常用类型及其所占的字节空间。

3.VBA的变量

4.VBA中的流程控制

(1)判断结构

(2)循环结构

5.函数和过程的声明与使用

函数和过程都是为了实现一个特定的机能而写的独立的模块代码。函数的声明采用Function、End Function,而过程使用Sub和End Sub来表示。二者形式上很相像,但是函数与过程也有一些区别。

首先,Sub过程定义时无需定义返回值类型,而Function声明一般需要用“As 数据类型”定义函数返回值类型。

其次,Sub过程中没有对过程名赋值的语句,而Function实现中一定有对函数名赋值的语句。

再次,Sub与Function的调用方式不同。调用Sub过程是一个独立的语句,而调用Function函数只是表达式的一部分。Sub过程不会用名字返回一个值,而Function函数一般会有一个返回值。

例子:

6.VBA中的注释

注释语句是用来说明程序中某些语句或函数实现了什么样的功能,提供了什么样的接口,使用者应该怎么使用的一种辅助性文字。VBA中注释语句有两种标识方法。

(1)单引号 例如:this is compare function.

(2)Rem 例如:Rem this is compare function.

这样注释语句就会变成绿色,区别于代码字体的颜色。

二、一些经常使用的VBA操作

三、一个根据表格数据自动生成代码的例子

下面表格中的Message列是代码中用到的整形变量,ID(Hex)列列出了该整形变量的值。String列是通过整形变量能索引到的字符串。这样程序中只要使用Message列的变量就能找出相应的字符串信息。如果有新的变量要追加,只需要在No.6的后面添加一行,重新运行生成代码的宏(CreateMessagefile),代码就会自动生成,维护起来非常的方便。

下面是例子的代码实现。

Sub writeheader(obj As Variant, str As String)

obj.WriteLine ("/********************************")

obj.WriteLine (" file name : " & str)

obj.WriteLine (" author : zzzz")

obj.WriteLine (" Create date :" & Date)

obj.WriteLine ("********************************/")

End Sub

Sub CreateMessagefile()

Dim fso_h As Object

Dim fname_h As String

Dim col_message As Long

Dim col_ID_hex As Long

Dim col_string As Long

col_message = 3

col_ID_hex = 4

col_string = 5

'file name

fname_h = "MessageInfo.h"

fname_h = ThisWorkbook.Path & "\" & fname_h

'open header file

Set fso_h = CreateObject("Scripting.File

SystemObject")

Set obj_h = fso_h.CreateTextFile(fname_h, True, False)

'to write comment header of the function

writeheader obj_h, "MessageInfo.h"

'to guard multi-include header file

Dim multi_str As String

multi_str = "__LOG_INFORMATION_H__"

obj_h.WriteLine ("#ifndef " & multi_str)

obj_h.WriteLine ("#define " & multi_str)

obj_h.WriteLine ("")

Cells(65536, 2).Select

Selection.End(xlUp).Select

Row_num = ActiveCell.Row

For i = 3 To Row_num

obj_h.WriteLine ("#define " & Cells(i, col_message).Value & " " & "0x" & Cells(i, col_ID_hex).Value)

Next i

obj_h.WriteLine ("")

obj_h.WriteLine ("typedef struct msg_info")

obj_h.WriteLine ("{")

obj_h.WriteLine (Chr$(9) & "unsigned int msg_val;")

obj_h.WriteLine (Chr$(9) & "char * pMsg;")

obj_h.WriteLine ("}msg_info;")

obj_h.WriteLine ("")

obj_h.WriteLine ("msg_info MsgInfoTotal[] = {")

For i = 3 To Row_num

obj_h.WriteLine (Chr$(9) & "{" & Cells(i, col_message).Value & ", " & """" & Cells(i, col_string).Value & """" & "},")

Next i

obj_h.WriteLine ("};")

obj_h.WriteLine ("")

obj_h.WriteLine ("#endif")

obj_h.Close

MsgBox ("It is over to make Message information!")

End Sub

以上代码运行后,会在和excel相同的目录下生成文件MessageInfo.h,即我们需要自动生成的文件。

自动生成的MessageInfo.h代码如下所示:

/*************************************************

file name : MessageInfo.h

author : zzzz

Create date :2013/12/20

**************************************************/

#ifndef __LOG_INFORMATION_H__

#define __LOG_INFORMATION_H__

#define msg_inf_1 0xC01A0001

#define msg_inf_2 0xC01B0002

#define msg_inf_3 0xD0120005

#define msg_inf_4 0xD0130006

#define msg_inf_5 0xD0140007

#define msg_inf_6 0xD0150008

typedef struct msg_info

{

unsigned int msg_val;

char * pMsg;

}msg_info;

msg_info MsgInfoTotal[] = {

{msg_inf_1, "file param error!"},

{msg_inf_2, "file logic error!"},

{msg_inf_3, "disk error!"},

{msg_inf_4, "no memory error!"},

{msg_inf_5, "function call failure!"},

{msg_inf_6, "array overflow!"},

};

#endif

本文通过VBA编程中的一个例子,使VBA的初学者对VBA的应用能有一个初步的认识,进而在工作学习中处理表格数据时能多一种解决思路。当然,想要精通VBA还需要读者去深入地学习其相关的知识点,多学,多练,多总结,从而利用VBA工具更高效地处理数据。

猜你喜欢

运算符赋值语句
L-代数上的赋值
老祖传授基本运算符
重点:语句衔接
用手机插头的思路学习布尔运算符
强赋值幺半群上的加权Mealy机与加权Moore机的关系*
利用赋值法解决抽象函数相关问题オ
如何搞定语句衔接题
P2×Cn的友好标号集
表达式求值及符号推导
C++中运算符的重载应用