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键



posted @ 2022-06-23 19:33  芋头y  阅读(229)  评论(0编辑  收藏  举报