提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
MstnVBA学习--Vol3.其他VBA的基础知识--20220623
前言
主要记录一下: VBA变量
类型, 和 Mstn变量
类型及其基本的操作方法
一、标准VBA变量类型
1. 值的类型
整形 Integer
长整型 Long
双精度 Double
'双精度能保存非常精确的数字,但随着数值的增加其精度在降低,在开发应用时对这一点需要有印象
字符串 String
布尔型 Boolean
日期型 Data
对象型 Object
变体型 Variant
'被声明为 Variant 的变量能保存任何类型的值,能指向任何类型的对象,甚至能包含一个数组
2. 操作文本
(1)大小写转换
UCase: 转大写
LCase: 转小写
- StrConv: 字符串转换
vbUpperCase 1 将字符串文字转成大写。
vbLowerCase 2 将字符串文字转成小写。
vbProperCase 3 将字符串中每个字的开头字母转成大写。
vbWide* 4* 将字符串中单字节字符转成双字节字符。
vbNarrow* 8* 将字符串中双字节字符转成单字节字符。
vbKatakana** 16** 将字符串中平假名字符转成片假名字符。
vbHiragana** 32** 将字符串中片假名字符转成平假名字符。
vbUnicode 64 根据系统的缺省码页将字符串转成
Unicode (在Macintosh中不可用。) vbFromUnicode 128 将字符串由 Unicode 转成系统的缺省码页。 (在Macintosh中不可用。)
(2)截掉空格
LTrim(左截取)、RTrim(右截取)、Trim(两端截取)
Function LTrim(String)
Function RTrim(String)
Function Trim(String)
这三个 Trim 函数分别从字符串的开始、尾部和两端移去空格。
(3)字符串比较
StrComp(字符串比较)
比较两个文本片段的需求是普遍的。
Function StrComp(String1, String2, ???)
上面的???可以是两种情况: vbTextCompaare 和 vbBinaryCompare 和 vbDatabaseCompare
StrComp 返回 -1, 0, 1, Null
string1 小于 string2 则返回 -1
string1 等于 string2 则返回 0
string1 大于 string2 则返回 1
string1 或 string 2为 Null 则返回 Null
(4)取字符串
Len 函数告诉我们字符串中有多少个字符。 可以用来判断输入字符的长度。
Sub TextWork09()
Dim LevelName As String
LevelName = InputBox("Enter new level name: " & "(Must be 8 characters)")
If Len(LevelName) <> 8 Then
MsgBox "The level name must be 8 characters. Try again."
End If
End Sub
Left / Right / Mid 函数用来取得不同顺序的字符内容
Left (String, Length As Long)
Right (String, Length As Long)
Mid (String, Length As Long)
Replace 要求提供一个字串、一个查找字符或字串、一个替换的字符或字串。
Replace (String, "AA", "BB") '把String字符串中的AA替换为BB
InStr 用来获取一个字符或一组字符在一个字符串中出现的位置, 在字符串“ABCD”中找串“C”,InStr 将返回数字 3,因为“C”是“ABCD”中的第三个字符。如果所找的字符或字串不存在,InStr 将返回零值(0)
Split / Join
Split 把一个字符串分割成一个文本数组。
Join 把一个文本数组联接成一个字符串。
这两个函数都需要制定一个分隔符才能正常工作
Sub TextWork18()
Dim FilePath As String
Dim NewTextFilePath As String
Dim xSplit As Variant
FilePath = ActiveDesignFile.FullName
xSplit = Split(FilePath, "\")
xSplit(UBound(xSplit)) = xSplit(UBound(xSplit)) & ".extract"
NewTextFilePath = Join(xSplit, "\")
Open NewTextFilePath For Output As #1
Print #1, FilePath
Close #1
End Sub
'本例要建立一个与当前设计文件在同一文件夹下的扩展名为“.extract”的ASCII 文本文件。
'用 Split 函数把当前设计文件的路径分割成一个数组,分割时以反斜杠为分隔符。
'下一步,以反斜杠(\)为分隔符把数组联接成变量NewTextFilePath。
'最后,以 NewTextFilePath 变量为文件名建立一个 ASCII 文本文件。
'在这个新的文件中打印输出 FilePath 变量的内容。
3. 操作数字
VBA中一些常用的数字操作函数:
加减乘除不赘述
- 平方与指数用: ^
- 平方根: Sqr
- 三角函数: Sin / Cos / Tan 和 求角度的Atn, 下面代码例子就是求角度的一个方法
Sub TestATan()
Dim Pi As Double
Dim AngleDegrees As Double
Dim AngleRadians As Double
Pi = Atn(1) * 4
AngleRadians = Atn(3 / 4)
AngleDegrees = AngleRadians / Pi * 180
MsgBox AngleDegrees
End Sub
- 绝对值 Abs
- 转换为整数CInt, 转长整数CLng, 双精度Cdbl
- Val 函数能给出参数中的数字值。注意,当提供给 Val 函数的参数以数字值开头时,Val 返回所有的数字字符直到它遇到一个非数字字符为止。
- IsNumeric 返回一个布尔值(True 或False)。它考察其参数并确定参数是否是数字。
- Round函数能让我们指定小数点后保留的位数, 多的小数就四舍五入了。
- Mod 求两个数字相除后的余数, 比如 5 Mod 2 得到是 1
- Sgn 求数字的正负号, 返回 -1, 0, 1
- Rnd 和 Randomize 随机生成数字, 下面代码例子就是在(25, 25)到(50, 50)之间生成300个随机点组成的云图
Sub TestRnd()
Dim I As Long
Dim Lower As Long
Dim Higher As Long
Dim PointCen(0 To 1) As Point3d
Dim PointElem As PointStringElement
Lower = 25
Higher = 50
Randomize
For I = 1 To 300
PointCen(0).X = Round((Higher - Lower + 1) * Rnd(1), 2)
PointCen(0).Y = Round((Higher - Lower + 1) * Rnd(1), 2)
PointCen(1).X = PointCen(0).X
PointCen(1).Y = PointCen(0).Y
Set PointElem = Application.CreatePointStringElement1(Nothing, PointCen, True)
ActiveModelReference.AddElement PointElem
Next I
End Sub
二、Mstn特有的变量类型
1. Application(应用)
Application 变量类型指向 MicroStation 应用。它是操纵 MicroStation 时的
顶级对象。能从 Application 做如下事情:
- 取得 ActiveDesignFile(当前设计文件)属性
- 取得 ActiveModelReference(当前模型参考)属性
- 取得 ActiveSettings(当前设置)对象及其属性
- 取得正在执行的 VBProject对象及其属性
- 取得 UserName(用户名)属性
- 取得左、顶、宽和高属性
2. DesignFile(设计文件)
DesignFile 对象指向一个 MicroStation DGN 文件。
通过 DesignFile 对象能获得最顶层 DGN 的属性和集合。
- 取得和设置 Author(作者)、Client(客户)、Comments(注释)、Company(公司)、Keywords(关键字)、Manager(管理者)、Subject(主题)和 Title(标题)属性
- 取得 FormatMajorVersion(格式主版本)和 FormatMinorVersion(格式次版本)属性
- 取得 Levels(层)集合
- 取得 Models(模型)集合
- 取得 Name(名称)和 Path(路径)属性
3. ModelReference(模型参考)
ModelReference 对象是用的最多的对象。当在文件中绘图时要用ModelReference 对象,当在文件中查找时要用 ModelReference 对象。
4. Level(层)
层能把设计细分成多个对象组。我们通常按图形对象的几何或标注类型来分
组。道路中心线可能在一个层上,地块区号在另一个层上,图置标题框线也在其
独立的一个层上等等。下面是几个可取得和设置的层对象属性:
- Description(描述)
- ElementColor(元素颜色)
- ElementLineStyle(元素线型)
- ElementLineWeight(元素线宽)
- IsActive(是否激活)
- IsDisplayed(是否显示)
- IsFrozen(是否冻结)
- IsLocked(是否锁定)
- Name(名字)
- Number(层号)
- Plot(光栅绘图)
5. LineElement(线元素)
用一个起点和一个终点来创建线元素。线元素建立后就可以加入到模型中。
6. EllipseElement(椭圆元素)
线、圆和弧构成了 MicroStation 文件中大多数的几何形状。从 MicroStation的角度来看,圆实际上就是长轴半径和短轴半径相等的椭圆。
7. ARCElement(弧元素)
MicroStation 给出了多种建立新的线元素、椭圆元素和弧元素的方法。在本例中,通过提供一个中心点、长轴和短轴半径、一个起始角和一个扫描角来建立弧元素的。
8. TextElement(文本元素)
建立文本元素对象需要所显示的文本和一个起点。文本元素建立后还能设置它的其它属性,如颜色、层和字型(字型包括字体、大小等)。
三、其他
1. 大小写
VBA不区分大小写
2. 变量名
字母开头, 可以用字母,数字,下划线, 长度不大于255个字符
3. 强制声明变量
在文件的最开头添加 "Optional Explicit "
4. 回车符 / 连接符 / 制表符
& VBA中是支持用&直接把多个字符串组成一个的
VbCr 类似于在键盘上按下Enter键
CbTab 类似于在键盘上按下Tab键