VBA语法总结
Posted KL58
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA语法总结相关的知识,希望对你有一定的参考价值。
为了控制Excel,学了些VBA,总结下语法,下文分为五部分:
一、代码组织
二、常用数据类型
三、运算符
四、控制流
五、常用内置函数
一、代码组织
1.能写代码的地方有模块,类模块。
2.代码中可以写的成员有变量和常量,过程和函数。对成员的访问修饰符有public,private
3.写注释的方法有以单引号开头,以REM开头。
4.变量和常量声明的格式如下
变量 |
Dim <variable> As <type> |
可以不声明,直接赋值使用 |
常量 |
Const <cst> as <type> = <value> |
声明时需立即跟等号赋值 |
5.变量赋值的格式是
变量名=变量值 |
对普通类型 |
Set 变量名=变量值 |
对object 类型 |
6.过程和函数书写的格式是
过程 |
Sub 过程名() …… End Sub |
函数 |
Function 函数名(一堆变量) …… End Function |
7.VBA是大小写不敏感的,即大写小写都被认为是小写。
8.可以用Debug.Print在立即窗口,及时的打印输出。
9.上面没提到Excel事件,Excel对象模型。下文也没有面向对象的内容,全是基础语法的罗列。
二、常用数据类型
1 |
Integer |
整数 |
2 |
Double |
小数 |
3 |
String |
字符串 |
4 |
Array |
数组 |
5 |
Dictionary |
字典 |
6 |
Boolean |
布尔 |
7 |
Date |
日期 |
8 |
Object |
对象 |
VBA很直接的把Object当成一种类型,其中的Dictionary就属于Object。
三、运算符
1.算数运算符
+ |
加 |
- |
减 |
* |
乘 |
/ |
除 |
% |
模 |
^ |
幂 |
2.比较运算符
= |
等于 |
<> |
不等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
3.逻辑运算符
And |
且 |
Or |
或 |
Not |
非 |
Xnot |
或非 |
4.连接运算符
+ |
连接 |
& |
连接 |
四、控制流
If……elseif……else分支 |
Switch分支 |
For循环 |
For each循环 |
While……Wend循环 |
Do While循环 |
……………… |
五、常用内置函数
1.特殊类
1 |
InputBox |
输入框 |
2 |
MsgBox |
消息框 |
3 |
Rnd |
随机数 |
4 |
Timer |
计时器 |
5 |
RGB |
RGB取色 |
2.数组
1 |
Lbound,Ubound |
下限,上限 |
3.字符串
1 |
Len |
返回长度 |
2 |
Join,Split |
拼接和分割 |
3 |
Left,Right,Mid |
取子串 |
4 |
InStr,InStrRev |
找子串位置 |
5 |
Trim,LTrim,RTrim |
去空格 |
6 |
Format |
格式化 |
7 |
Asc,Chr |
ASC转换 |
8 |
LCase,UCase |
大小写转换 |
4.数字
1 |
IsNumeric |
类型确认 |
2 |
Round,Fix |
四舍五入 |
5.时间与日期
1 |
Date,Time,Now |
获取系统时间 |
2 |
DateAdd,DateDiff |
日期加减 |
3 |
DatePart,Month,Day,Hour |
时间归段 |
VBA-TRANSFORM 语句中的语法错误
【中文标题】VBA-TRANSFORM 语句中的语法错误【英文标题】:VBA- Syntax error in TRANSFORM statement 【发布时间】:2016-12-20 11:56:48 【问题描述】:我在 VBA 中有一个错误,此查询作为交叉表正常运行,但是当我尝试切换 VBA 时,在 TRANSFORM 语句中抛出一个语法错误有人可以帮助我吗?谢谢。
"TRANSFORM Str(Count([Prijava].[id]))AS O, Str(Count([Prijava].[datumSmrti])) AS U" & _
"SELECT MKB10.id, IIf([pol].[id]=1,'M','Ž') AS pol, MKB10.NazivLatinski" & _
"FROM Pol INNER JOIN ((Opstina INNER JOIN Pacijent ON Opstina.id = Pacijent.opstinaID) INNER JOIN (MKB10 INNER JOIN Prijava ON MKB10.id = Prijava.mkb10ID) ON Pacijent.id = Prijava.pacijentID) ON Pol.id = Pacijent.polID" & _
"GROUP BY MKB10.id, IIf([pol].[id]=1,'M','Ž'), MKB10.NazivLatinski" & _
"ORDER BY MKB10.id" & _
"PIVOT starosnoDoba2([starost]) In ('<1','1','2','3','4','5','6','7-9','10-14','15-19','20-29','30-39','40-49','50-59','60-69','70>')"
【问题讨论】:
【参考方案1】: "TRANSFORM Str(Count([Prijava].[id]))AS O, Str(Count([Prijava].[datumSmrti])) AS U " & _
"SELECT MKB10.id, IIf([pol].[id]=1,'M','Ž') AS pol, MKB10.NazivLatinski " & _
"FROM Pol INNER JOIN ((Opstina INNER JOIN Pacijent ON Opstina.id = Pacijent.opstinaID) INNER JOIN (MKB10 INNER JOIN Prijava ON MKB10.id = Prijava.mkb10ID) ON Pacijent.id = Prijava.pacijentID) ON Pol.id = Pacijent.polID " & _
"GROUP BY MKB10.id, IIf([pol].[id]=1,'M','Ž'), MKB10.NazivLatinski " & _
"ORDER BY MKB10.id " & _
"PIVOT starosnoDoba2([starost]) In ('<1','1','2','3','4','5','6','7-9','10-14','15-19','20-29','30-39','40-49','50-59','60-69','70>') "
连接字符串时需要空格,否则您的文本会一起运行...您正在阅读 "TRANSFORM..... AS USELECT..."
【讨论】:
【参考方案2】:我发现答案很愚蠢,一切都很好,当然它可以工作,但有一些事情需要纠正,逗号应该站在 & "" "" & 之后,因为它出现在一个字符串之后继续& _ 在此之前应该像 pollID 一样站立空间“ 所以,看起来像这样`
"TRANSFORM Str(Count([Prijava].[id]))&"" ""& Str(Count([Prijava].[datumSmrti])) " & _
"SELECT MKB10.id &"" ""& IIf([pol].[id]=1,'M','Ž') &"" ""& MKB10.NazivLatinski " & _
"FROM Pol INNER JOIN ((Opstina INNER JOIN Pacijent ON Opstina.id = Pacijent.opstinaID) INNER JOIN (MKB10 INNER JOIN Prijava ON MKB10.id = Prijava.mkb10ID) ON Pacijent.id = Prijava.pacijentID) ON Pol.id = Pacijent.polID " & _
"GROUP BY MKB10.id, IIf([pol].[id]=1,'M','Ž'), MKB10.NazivLatinski " & _
"ORDER BY MKB10.id " & _
"PIVOT starosnoDoba2([starost]) In ('<1','1','2','3','4','5','6','7-9','10-14','15-19','20-29','30-39','40-49','50-59','60-69','70>') "
【讨论】:
以上是关于VBA语法总结的主要内容,如果未能解决你的问题,请参考以下文章