MstnVBA学习--Vol3.其他VBA的基础知识--20220623
> 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
@[TOC](MstnVBA学习--Vol3.其他VBA的基础知识--20220623)
---
# 前言
主要记录一下: `VBA变量`类型, 和 `Mstn变量`类型及其基本的操作方法
---
# 一、标准VBA变量类型
## 1. 值的类型
```basic
整形 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 函数告诉我们字符串中有多少个字符。 可以用来判断输入字符的长度。
```basic
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 函数用来取得不同顺序的字符内容
```basic
Left (String, Length As Long)
Right (String, Length As Long)
Mid (String, Length As Long)
```
Replace 要求提供一个字串、一个查找字符或字串、一个替换的字符或字串。
```basic
Replace (String, "AA", "BB") '把String字符串中的AA替换为BB
```
InStr 用来获取一个字符或一组字符在一个字符串中出现的位置, 在字符串“ABCD”中找串“C”,InStr 将返回数字 3,因为“C”是“ABCD”中的第三个字符。如果所找的字符或字串不存在,InStr 将返回零值(0)
Split / Join
Split 把一个字符串分割成一个文本数组。
Join 把一个文本数组联接成一个字符串。
这两个函数都需要制定一个分隔符才能正常工作
```basic
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, 下面代码例子就是求角度的一个方法
```basic
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个随机点组成的云图
```basic
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键