明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: pyqzww

efan版主!

  [复制链接]
发表于 2003-5-14 21:19:00 | 显示全部楼层

看看帮助文件吧。

Sub 语句

声明子过程的名称,参数,以及构成其主体的代码。

语法

[Private | Public | Friend] [Static] Sub name [(arglist)]
[statements]
[Exit Sub]
[statements]

End Sub

Sub 语句的语法包含下面部分:

部分 描述
Public 可选的。表示所有模块的所有其它过程都可访问这个 Sub 过程。 如果在包含 Option Private 的模块中使用,则这个过程在该工程外是不可使用的。
Private 可选的。表示只有在包含其声明的模块中的其它过程可以访问该 Sub 过程。
Friend 可选的。只能在类模块中使用。表示该 Sub 过程在整个工程中都是可见的,但对对象实例的控制者是不可见的。
Static 可选的。表示在调用之间保留 Sub 过程的局部变量的值。Static 属性对在 Sub 外声明的变量不会产生影响,即使过程中也使用了这些变量。
name 必需的。Sub 的名称;遵循标准的变量命名约定。  
arglist 可选的。代表在调用时要传递给 Sub 过程的参数的变量列表。多个变量则用逗号隔开。
statements 可选的。Sub 过程中所执行的任何语句组。



其中的 arglist 参数的语法以及语法各个部分如下:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

部分 描述
Optional 可选的。表示参数不是必需的关键字。如果使用了该选项,则 arglist 中的后续参数都必须是可选的,而且必须都使用 Optional 关键字声明。如果使用了 ParamArray,则任何参数都不能使用 Optional。
ByVal 可选的。表示该参数按值传递。
ByRef 可选的。表示该参数按地址传递。ByRef 是 Visual Basic 的缺省选项。
ParamArray 可选的。只用于 arglist 的最后一个参数,指明最后这个参数是一个 Variant 元素的 Optional 数组。使用 ParamArray 关键字可以提供任意数目的参数。ParamArray 关键字不能与 ByVal,ByRef,或 Optional 一起使用。
varname 必需的。代表参数的变量的名称;遵循标准的变量命名约定。
type 可选的。传递给该过程的参数的数据类型,可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)、Object 或 Variant。如果没有选择参数 Optional,则可以指定用户定义类型,或对象类型。
defaultvalue 可选的。任何常数或常数表达式。只对 Optional 参数合法。如果类型为 Object,则显式的缺省值只能是 Nothing。



说明

如果没有使用 Public、Private 或 Friend 显式指定,Sub 过程按缺省情况就是公用的。如果没有使用 Static,则在调用之后不会保留局部变量的值。Friend 关键字只能在类模块中使用。不过 Friend 过程可以被工程的任何模块中的过程访问。Friend 过程不会在其父类的类型库中出现,且 Friend 过程不能被后期绑定。

小心 Sub 过程可以是递归的;也就是说,该过程可以调用自己来完成某个特定的任务。不过,递归可能会导致堆栈上溢。通常 Static 关键字和递归的 Sub 过程不在一起使用。

所有的可执行代码都必须属于某个过程。不能在别的 Sub、Function 或 Property 过程中定义 Sub 过程。

Exit Sub 语句使执行立即从一个 Sub 过程中退出。程序接着从调用该 Sub 过程的语句下一条语句执行。在 Sub 过程的任何位置都可以有 Exit Sub 语句。

Sub 过程与 Function 过程的相似之处是:它们都一个可以获取参数,执行一系列语句,以及改变其参数的值的独立过程。而与 Function 过程不同的是:带返回值的 Sub 过程不能用于表达式。

可以使用过程名并后跟相应的参数列表来调用一个 Sub 过程。请参阅 Call 语句关于如何调用 Sub 过程的详细的说明信息。

在 Sub 过程中使用的变量分为两类:一类是在过程内显式定义的,另一类则不是。在过程内显式定义的变量(使用 Dim 或等效方法)都是局部变量。对于使用了但又没有在过程中显式定义的变量,除非其在该过程外更高级别的位置有显示地定义,否则也是局部的。

小心 过程可以使用没有在过程内显式定义的变量,但只要有任何在模块级别定义的名称与之同名,就会产生名称冲突。如果过程中使用的未定义的变量与别的过程,常数,或变量的名称相同,则认为过程使用的是模块级的名称。显式定义变量就可以避免这类冲突。可以使用 Option Explicit 语句来强制显式定义变量。

注意 不能使用 GoSub、GoTo 或 Return 来进入或退出 Sub 过程。


写 Sub 过程
   

Sub 过程是一系列由 Sub 和 End Sub 语句所包含起来的 Visual Basic 语句,它们会执行动作却不能返回一个值。Sub 过程可有参数,例如常数、变量、或是表达式等来调用它。如果一个 Sub 过程没有参数,则它的 Sub 语句必须包含一个空的圆括号。

下面 Sub 过程中,每一行都有注释来解释它的作用:

'声明过程命名为 GetInfo
'该 Sub 过程没有参数
Sub GetInfo()
'声明字符串变量命名为 answer
Dim answer As String
'指定 InputBox 函数的返回值给 answer
answer = InputBox(Prompt:="What is your name?")
    '条件 If...Then...Else 语句
    If answer = Empty Then
        '调用 MsgBox 函数
        MsgBox Prompt:="You did not enter a name."
    Else
        'MsgBox 函数与 answer 变量连接。
        MsgBox Prompt:="Your name is " & answer
    '结束 If...Then...Else 语句
    End If
'结束 Sub 过程
End Sub
 楼主| 发表于 2003-5-17 12:43:00 | 显示全部楼层

efan版主,哪出毛病了呢?

efan版主,我把代码写上去,但在运行的时候提示信息说没有定义子程序后函数,这是怎么回事?还有,下面这段代码是让用户选择直线(或其他的图形对象_,
再将所选的直线颜色改变为绿色.代码如下:
Sub GetUsersSelection()
    Dim UsersSelection As AcadSelectionSet
    Dim DrawingSelected As AcadEntity
    'delete the selection set if it already exists
    With Thisdrawing
        On Error Resume Next
        .SelectionSets("CurrentSelection").Delete
        'get selection from user
        MsgBox "Select objects! Hit Enter to finish!"
        Set UsersSelection = thisdrawing
            .Selectionsets.Add("CurrentSelection")
        UsersSelection.SelectOnScreen
        For Each DrawingSelected In UsersSelection
            DrawingSelected.Color = acGreen
        Next
    End With
End Sub
题目上说"输入该宏代码至Line Input的Module1中"是什么意思?
另外!这个代码的图还是上次给您的图!
发表于 2003-5-17 15:52:00 | 显示全部楼层

程序没有错误。

Line Input应该是DVB文件名称,也就是AutoCAD VBA的工程文件。而Module1可能是它的一个模块名称。建议你先去下载R2004中文版的帮助文件,那里面有一个开发人员指南,可以先了解一下VBA的编程环境和基础。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-28 16:38 , Processed in 0.169894 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表