vba 毕业设计所需素材.doc_第1页
vba 毕业设计所需素材.doc_第2页
vba 毕业设计所需素材.doc_第3页
vba 毕业设计所需素材.doc_第4页
vba 毕业设计所需素材.doc_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计所需素材ActiveX 是一个开放的集成平台,为开发人员、 用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内容的方法。 使用 ActiveX, 可轻松方便的在 Web页中插入 多媒体效果、 交互式对象、以及复杂程序,创建用户体验相当的高质量多媒体CD-ROM 。VB常数与函数(三)Miscellaneous 常数下列常数由 Visual Basic for Applications 中的类型库定义,可用来在代码中的任何地方代替实际值:常数 等于 描述 vbCrLf Chr(13) + Chr(10) 回车符与换行符结合 vbCr Chr(13) 回车符 vbLf Chr(10) 换行符 vbNewLine Chr(13) + Chr(10)平台指定的新行字符;适用于当前平台 vbNullChar Chr(0) 值为 0 的字符 vbNullString 值为 0 的字符串 用来调用外部过程;与长度为零的字符串 () 不同 vbObjectError -2147221504 用户定义的错误号应当大于该值,例如:Err.Raise Number = vbObjectError + 1000 vbTab Chr(9) Tab 字。 vbBack Chr(8) 退格字符 vbFormFeed Chr(12) 在 Microsoft Windows 中没有作用 vbVerticalTab Chr(11) 在 Microsoft Windows 中没有作用 -MsgBox 常数可在代码中的任何地方使用下列常数代替实际值:MsgBox 参数常数 值 描述 vbOKOnly 0 只有 OK 按钮(缺省值) vbOKCancel 1 OK 和 Cancel 按钮 vbAbortRetryIgnore 2 Abort、Retry,和 Ignore 按钮 vbYesNoCancel 3 Yes、No,和 Cancel 按钮 vbYesNo 4 Yes 和 No 按钮 vbRetryCancel 5 Retry 和 Cancel 按钮 vbCritical 16 关键消息 vbQuestion 32 警告询问 vbExclamation 48 警告消息 vbInformation 64 通知消息 vbDefaultButton1 0 第一个按钮是缺省的(缺省值) vbDefaultButton2 256 第二个按钮是缺省的 vbDefaultButton3 512 第三个按钮是缺省的 vbDefaultButton4 768 第四个按钮是缺省的 vbApplicationModal 0 应用程序形态的消息框(缺省值) vbSystemModal 4096 系统强制返回的消息框 vbMsgBoxHelpButton 16384 添加Help按钮到消息框 VbMsgBoxSetForeground 65536 指定消息框窗口作为前景窗口 vbMsgBoxRight 524288 文本是右对齐的 vbMsgBoxRtlReading 1048576 指定在希伯来语和阿拉伯语系统中,文本应当显示为从右到左读 MsgBox 返回值常数 值 描述 vbOK 1 按下 OK 按钮 vbCancel 2 按下 Cancel 按钮 vbAbort 3 按下 Abort 按钮 vbRetry 4 按下 Retry 按钮 vbIgnore 5 按下 Ignore 按钮 vbYes 6 按下 Yes 按钮 vbNo 7 按下 No 按钮 -QueryClose常数下列常数可以用于代码中的任何位置以代替实际值:常数 值 描述 vbFormControlMenu 0 用户从窗体上的Control 菜单选择Close 命令。 vbFormCode 1 Unload 语句被从代码中调用。 vbAppWindows 2 当前 Microsoft Windows 操作环境会话结束。 vbAppTaskManager 3 Windows Task Manager 正在关闭应用程序。 -Dir、GetAttr 和 SetAttr 常数?可在代码中的任何地方用下列常数代替实际值:常数 值 描述 vbNormal 0 正常的(Dir 和 SetAttr 的缺省值) vbReadOnly 1 只读的 vbHidden 2 隐藏的 vbSystem 4 系统文件 vbVolume 8 卷标 vbDirectory 16 目录或文件夹 vbArchive 32 文件自上一次备份后已经改变 -Shell 常数可在代码中的任何地方使用下列常数代替实际值:常数 值 描述 vbHide 0 窗口是隐藏的,并且焦点被传递给隐藏窗口。 vbNormalFocus 1 窗口拥有焦点,并且恢复到原来的大小与位置。 vbMinimizedFocus 2 窗口缩小为图符并拥有焦点。 vbMaximizedFocus 3 窗口最大化并拥有焦点。 vbNormalNoFocus 4 窗口被恢复到最近一次的大小与位置。当前活动窗口仍为活动窗口。 vbMinimizeNoFocus 6 窗口缩小为图符。当前活动窗口仍为活动窗口。 -特殊文件夹常数仅当您的工程对包含这些常数定义的相应类型库有一个显式引用时,才可以使用这些常数。常数 值 描述 WindowsFolder 0 Windows文件夹包含由Windows操作系统安装的文件。 SystemFolder 1 System(系统)文件夹包含库、字体和设备驱动程序。 TemporaryFolder 2 Temp(临时)文件夹用于存储临时文件。它的路径可在TMP环境变量中找到。 -StrConv 常数可在代码中的任何地方使用下列常数代替实际值:Constant 值 描述 vbUpperCase 1 将字符串转换成大写字符。 vbLowerCase 2 将字符串转换成小写字符。 vbProperCase 3 将字符串中每个词的第一个字母转换成大写。 vbWide 4 将字符串中的窄(单字节)字符转换成宽(双字节)字符。适用于远东地区。 vbNarrow 8 将字符串中的宽(双字节)字符转换成窄(单字节)字符。适用于远东地区。 vbKatakana 16 将字符串中的 Hiragana 字符转换成 Katakana 字符;只适用于日文地区。 vbHiragana 32 将字符串中的 Katakana 字符转换成 Hiragana 字符;只适用于日文地区。 vbUnicode 64 利用缺省的系统代码页将字符串转换成 Unicode。 vbFromUnicode 128 将字符串由 Unicode 转换成缺省的系统代码页。 -System Color 常数可在代码中的任何地方用下列常数代替实际值:常数 值 描述 vbScrollBars 0x80000000 滚动条颜色 vbDesktop 0x80000001 桌面颜色 vbActiveTitleBar 0x80000002 活动窗口的标题栏颜色 vbInactiveTitleBar 0x80000003 非活动窗口的标题栏颜色 vbMenuBar 0x80000004 菜单背景色 vbWindowBackground 0x80000005 窗口背景色 vbWindowFrame 0x80000006 窗口框架颜色 vbMenuText 0x80000007 菜单文本颜色 vbWindowText 0x80000008 窗口文本颜色 vbTitleBarText 0x80000009 标题、调整框和滚动箭头的文本颜色 vbActiveBorder 0x8000000A 活动窗口边框颜色 vbInactiveBorder 0x8000000B 非活动窗口边框颜色 vbApplicationWorkspace 0x8000000C 多文档界面 (MDI) 应用程序的背景色 vbHighlight 0x8000000D 控件中选中项目的背景色 vbHighlightText 0x8000000E 控件中选中项目的文本颜色 vbButtonFace 0x8000000F 命令按钮表面阴影颜色 vbButtonShadow 0x80000010 命令按钮边缘阴影颜色 vbGrayText 0x80000011 灰色(无效)文本 vbButtonText 0x80000012 下压按钮文本颜色 vbInactiveCaptionText 0x80000013 非活动标题文本颜色 vb3DHighlight 0x80000014 3-D 显示元素的突出显示颜色 vb3DDKShadow 0x80000015 3-D 显示元素的最深阴影颜色 vb3DLight 0x80000016 vb3Dhighlight 之外最亮的 3-D 颜色 vbInfoText 0x80000017 工具提示文本颜色 vbInfoBackground 0x80000018 工具提示背景色 -三态常数仅当您的工程对包含这些常数定义的相应类型库有一个显式引用时,才可以使用这些常数。常数 值 描述 TristateTrue 1 True TristateFalse 0 False TristateUseDefault 2 使用缺省设置值。 -VarType 常数可在代码中的任何地方用下列常数代替实际值:常数 值 描述 vbEmpty 0 未初始化(缺省值) vbNull 1 不含任何有效数据 vbInteger 2 Integer vbLong 3 长整数 vbSingle 4 单精度浮点数 vbDouble 5 双精度浮点数 vbCurrency 6 Currency vbDate 7 Date vbString 8 String vbObject 9 对象 vbError 10 错误 vbBoolean 11 布尔 vbVariant 12 Variant(只用于变体的数组类型) vbDataObject 13 数据访问对象 vbDecimal 14 Decimal vbByte 17 Byte vbUserDefinedType 36 包含用户定义类型的变量 vbArray 8192 数组 -Visual Basic 常数Visual Basic for Applications 定义了一些常数,使程序设计变得更为简单。下列常数可在程序代码中的任何地方代替实际值:Calendar 常数Color 常数Compiler 常数Date 常数Dir、GetAttr 和 SetAttr 常数IMEStatus 常数Instr、StrComp 常数Keycode 常数Miscellaneous 常数MsgBox 常数QueryClose 常数QueryClose 常数Shell 常数StrConv 常数System Color 常数VarType 常数 sendkeys 按键 代码 BACKSPACE BACKSPACE, BS, 或 BKSP BREAK BREAK CAPS LOCK CAPSLOCK DEL or DELETE DELETE 或 DEL DOWN ARROW DOWN END END ENTER ENTER或 ESC ESC HELP HELP HOME HOME INS or INSERT INSERT 或 INS LEFT ARROW LEFT NUM LOCK NUMLOCK PAGE DOWN PGDN PAGE UP PGUP PRINT SCREEN PRTSC RIGHT ARROW RIGHT SCROLL LOCK SCROLLLOCK TAB TAB UP ARROW UP F1 F1 F2 F2 F3 F3 F4 F4 F5 F5 F6 F6 F7 F7 F8 F8 F9 F9 F10 F10 F11 F11 F12 F12 F13 F13 F14 F14 F15 F15 F16 F16 为了指定那些与 SHIFT、CTRL 及 ALT 等按键结合的组合键,可在这些按键码的前面放置一个或多个代码,这些代码列举如下: 按键 代码 SHIFT + CTRL ALT % 为了说明在按下其它按键时应同时按下 SHIFT、CTRL、及 ALT 的任意组合键,请把那些按键的码放在括号当中。例如,为了说明按下 E 与 C 的时候同时按下 SHIFT 键,请使用 +(EC)。为了说明在按下 E 的时候同时按下 SHIFT 键,但接着按 C 而不按 SHIFT,则使用 +EC。 为了指定重复键,使用 key number 的形式。必须在 key 与 number 之间放置一个空格。例如,LEFT 42 意指 42 次按下 LEFT ARROW 键;h 10 则是指 10 次按下 H 键。 注意 不能用 SendKeys 将按键消息发送到这样一个应用程序,这个应用程序并没有被设计成在 Microsoft Windows 中运行。Sendkeys 也无法将 PRINT SCREEN 按键 PRTSC 发送到任何应用程序DateGrid 控件不可用 因为系统漏洞问题 需下载补丁VB60SP6-KB957924-v2-x86-ENU.mis进行补丁安装就可以了CAD中VBA的特点一、为什么选择 VBA? VBA 非Microsoft 搞的一个玩意,可降供类似 Visual Basic (VB) 开发功能,但非不能独立运行,只能集成在其它应用程序中,经过ActiveX接口对应用程序进行扩展、定制。VBA应用最多的程序大概数Excel了,看书店里一堆一堆的相关书籍就道明了。但对于autocad,VBA非个小字辈,运用VBA开发的比autolisp长多了,有人道VBA只非autodesk降供的一个玩具,autodesk官网论坛下VBA版块的人气与visual lisp根本没法比,新出的2010版干脆不包括VBA,需要另外下载安装,好像大家对VBA不怎么感冒。visual lisp可以直接操作图形数据库,几乎无所不能,而VBA只能经过ActiveXautocad的对象接口的属性和方法操作,接口不如visual lisp,特别非对于一些非图元对象比如标注样式的操作不方便。但对于基本的图元对象操作,基本差不多,而二次开发更多非对图元对象的操作。并且与visual lisp相比,VBA有以下优点: 1、VBA代码可读性好。程序往往需要执行大量的计算,比如坐标转换、找法向向量等,lisp的括号套括号的表达式很不人道。2、调试方便,赢入代码直接运行就行了,visual lisp需要加载一下,调试功能也不如VBA。3、VBA编写界面那个DCL方便。4、vba可以调用windows API!二、AUTOCAD VBA学习资源 关于这方面的书很长,并且都非很薄的从帮助里抄下来的那种。老外写的有不错的书,国内没有。我比较迷信软件本身带的帮助文档,个人认为最好的学习资料就非帮助里的“ActiveX 和 VBA 开发人员指南” 和 “ActiveX and VBA Reference” ,看到的书大多非从这两个里抄来的,大家不必取近求远。前者合适学习,后者非离不开的一个词典。另外在网下找到一个chm格式的“AUTO CAD VBA程序范例.”(附件 AUTO CAD VBA程序范例.rar chm格式的附件不能下传?P点大的东西也害我压伸), 基本非帮助文档里的例子,但集中在一起,比较方便参考学习。 autodesk官网的论坛里有好多高脚,就非访问太慢。AUTOCAD 机械制图辅助工具 下载地址:/read.php?tid=978381三、 从一个简单的例子开始: HELLO WORLDPublic Sub HelloWorld()Dim insPoint(0 To 2) As Double 声明插入点Dim textHeight As Double 声明文字高度Dim textStr As String 声明字符串Dim textObj As AcadText 声明文字对象insPoint(0) = 2 设置插入点的 x 坐标insPoint(1) = 4 设置插入点的 y 坐标insPoint(2) = 0 设置插入点的 z 坐标 textHeight = 1 强文字高度设置为 1.0textStr = Hello World! 设置字符串 创建 Text 对象 Set textObj = ThisDrawing.ModelSpace.AddText _ (textStr, insPoint, textHeight) 根据文字的边界框缩放视图Dim ptLeftBottom As VariantDim ptRightUp As VarianttextObj.GetBoundingBox ptLeftBottom, ptRightUp ZoomWindow ptLeftBottom, ptRightUpEnd Sub 这是帮助里的一个例子,我略作修改。这段代码在当前文件的模型空间创建文字,并按文字的边界框缩放视图。本例在模型空间创建文字对象,把ThisDrawing.ModelSpace.AddText 改为ThisDrawing.PaperSpace.AddText , 可以在激活的图纸空间中创建文字;而灵活的做法是改为:ThisDrawing.ActiveSpace.AddText,在当前激活的空间中创建文字,一般建议在当前激活空间中创建对象,把选择权给用户。Addxxx类的方法用于模型空间MSPACE、图纸空间paperspace、块block。VBA中的点用double型数组表示,需要点参数的方法传入数组名就可以了。从VBA返回的点是variant变量,可以直接当数组应用。用UTILITY对象的CreateTypedArray 方法可以用数值创建变量variant表示的数组。把代码粘贴到VBA工程的公共模块,就可以从工具-宏-选择运行它。 只有是公共模块中的无参数的公共过程sub才能从宏菜单运行,这个过程就是宏,用户界面。 工程开始前进行模块规划重要,下面是一些建议:1、每个功能比如自动中心线粗糙度等各设一个实现模块,模块设置为私有;设置一个公共模块作为界面,界面过程宏调用实现模块中的过程)通用的过程或函数放入私有模块。2、尽量少用全局变量,尽可能缩小变量的作用范围AutoCAD自动加载及运行VBA命令更新: 2011-08-04字体: 【大中小】点击:31关键词:AutoCAD VBA 自动加载1、将保存的dvb复制到CAD目录下的support文件夹2、用记事本(建议使用EditPlus)打开support下的acad200x.lsp或者acad200xdoc.lsp或者acad.lsp(总之是个lsp,而且是默认cad会运行的一个,我的是AutoCAD2004,修改的文件是acad2004.lsp)-4月26日修正-后来发现acaddoc.lsp的说明是:This file is loaded automatically byAutoCADevery time a drawing is opened,而acad.lsp的说明是This file is normally loaded only once per AutoCAD session.-同时,我还有个程序是使用activeX调用autocad,当vba加载放到doc.lsp中时,会出现加载过慢的情况,因此现在修改的文件为acad.lsp3、在最后添加下面的代码:;startup a vba project and its sub(defun S:STARTUP() (command _-vbarun Project_menu.dvb!AcadStartup)其中1);后面表示为注释,如同vb中的,Java中的/2)Project_menu.dvb改为你要运行的、刚刚复制到support目录的vba源码文件3)AcadStartup改为上述vba源码文件中的要默认运行的方法,比如菜单的修改,欢迎窗口等等,如果不需要有默认运行的方法,代码则修改如下:;startup a vba project and its sub(defun S:STARTUP() (command _-vbarun Project_menu.dvb!AcadStartup)4)如果要同时加载好多个的话,代码如下:(defun S:STARTUP() (command _-vbarun Project1.dvb!AcadStartup) (command _-vbarun Project2.dvb!AcadStartup) (command _-vbarun Project3.dvb!AcadStartup)利用VBA编程实现从EXCEL表到AUTOCAD表转换更新: 2011-08-15字体: 【大中小】点击:8Microsoft Excel 软件具有十分强大的制表、表格计算等功能,是普通人员常用的制表工具。可以通过其内嵌的VBA语言可以控制Microsoft Excel 的整个操作过程。- AutoCAD是由AutoDesk公司的工程绘图软件,是CAD市场的主流产品,功能十分强大,是工程制图人员常用的软件之一。AutoDesk公司从R14版以后,为其提供了VBA语言接口。- 在工程制图中,常常需要在图中插入绘制表格,一般有两种方法。其一,是利用剪贴板,将Microsoft Excel表格拷贝至剪贴板中,然后打开AutoCAD文件,再将剪贴板中的文件粘贴至所需位置。这种方法十分简单,但有其固有的缺点。在保存文件必须将.xls和.dwg文件保存在一起,一旦缺少excel环境,则再对表格继续修改。同时打开多个表格操作,需要占据较大的内存空间。文件体积变得很大,表格有时在.dwg文件中以图标形式显示,不便于观察。- 第二种方法,即利用Microsoft Excel、AutoCAD都提供的VBA功能,编制程序进行转换,将Microsoft Excel表格按原来样子转换,即把Microsoft Excel表格中的文字和线条信息全部读取出来,在AutoCAD文件里按照一一对应的方式写出来,确保转换后的表格与原表格一致。这样彻底避免了前种方法的缺点,便于表格内容编辑。本文着重介绍此方法。二、表格转换工作机理分析及具体实现方法- 1表格转换工作机理分析 - 在Microsoft Excel中,与表对应的对象是工作表(Sheet或Worksheet),与每一个表格方格相对应的对象是单元格区域(range),它可以仅包括一个单元格(cell),也可以由多个单元格合并而成。- 在AutoCAD中,没有与表对应的对象,但表可以理解由若干条线和文字对象组合而成。 - 读取Microsoft Excel文件中的最小对象-单元格区域(range)的主要信息-线条和文字,然后在AutoCAD文件里在指定图层、位置画线条,书写文字。通过循环,遍历所有单元格区域(range),边读边写,最终完成表格的转换。转换过程中,保持线条、文字及其相关属性不发生改变。 - 2、表格线条的转换- Microsoft Excel 中内嵌的VBA为我们获取Excel文件信息提供了极大便利。通常,通过访问range对象,可以获得许多信息。访问分析表格的属性应从分析range开始。每一个range包括许多对象和属性,例如,font对象可以返回range的字体信息。通过遍历,即可获得整个表格信息。获取表格信息的目的在于准确地按照位置画表格线,同时确定文字位置。 - 假设表格由a(a=1)行b(b=1)列组成,x,y为循环变量, 表格完全由单元格组成,由于在每个单元格都有4条边,让x从1开始循环到a, 再y从1开始循环到b,读取每个单元格的4条边,会读取a*b*4次,重复读取a*b*2次。当x=1时,读取上边;当y=1时读取,左边,其余情况读取右边,下边。共读取a+b+ a*b*2次。以3行4列为例,共读取3+4+3*4*2=31次,与实际表格的边数相同,没有重复读取。- 对合并单元格信息的读取是个难点。因为如果按照单元格的位置依次读取,那么由a行b列个单元格(cell)合并而成的单元格区域(range)仅有4条边,采用上述计算方法,需要读取a+b+ a*b*2次,重复读取a+b+ a*b*2 - 4次。以以3行4列为例,共读取3+4+3*4*2=31次,重复读取31 - 4=27次。算法有重复。如果按照行号,列号读取,合并单元格的行号、列号只有一个,其值为最*左、*上的那个单元格的行号、列号。例如,将A2:E5的单元格合并后,其行号为2,列号为A。这样由多个合并单元格组合后的表格行号、列号有间断,不连续,无法进行循环读取信息。笔者通过研究发现,函数address()和单元格的mergearea属性可以获得合并单元格的准确信息。具体方法为:读取cells(x,y)单元格时,用address()判断包含cells(x,y)单元格的合并单元格区域c.mergearea的绝对地址,如果前4个字符与cells(x,y) 单元格的地址相同,为cells(x,y)单元格为合并单元格区域最*上、*左的那个合并单元格,读取其4条边信息,否则不读取。这样,彻底避免了重复读取,同时提高了整个读取和画线速度。- 在AutoCAD中,线条有多种,考虑能够方便控制线条属性,选用了多义线。具体命令如下: RetVal = object.AddLightWeightPolyline(VerticesList) Sub hxw()Dim a as interger 表格的最大行数Dim b as interger 表格的最大列数Dim xinit as double 插入点x坐标Dim yinit as double 插入点y坐标Dim zinit as double 插入点z坐标Dim xinsert as double 当前单元格的左上角点的x左标Dim yinsert as double 当前单元格的左上角点的y左标Dim ptarray (0 to 2) as doubleDim x as integerDim y as integerFor x =1 to aFor y=1 to bSet c = xlsheet.Range(zh(y) + Trim(Str(x) Set ma = c.MergeArea求出单元格C的合并单元格地址If Left(Trim(ma.Address), 4) = Trim(c.Address) Then假如c.mergearea的绝对地址,如果前4个字符与c单元格的地址相同xl = A1: + ma.Addressxh = xlsheet.Range(ma.Address).Widthyh = xlsheet.Range(ma.Address).HeightSet xlrange = xlsheet.Range(xl)xinsert = xlrange.Width - xhyinsert = xlrange.Height - yhxpoint = xinit + xinsertypoint = yinit - yinsertIf x = 1 ThenIf ma.Borders(xlEdgeTop).LineStyle xlNone ThenptArray(0) = xpoint第一点坐标(数组下标 0 and 1)ptArray(1) = ypointptArray(2) = xpoint + xh第二点坐标(数组下标 2 and 3)ptArray(3) = ypointEnd IfLineweight lwployobj, ma.Borders(xlEdgeTop).WeightEnd IfIf ma.Borders(xlEdgeBottom).LineStyle xlNone ThenptArray(0) = xpoint + xh第三点坐标(数组下标 0 and 1)ptArray(1) = ypoint - yhptArray(2) = xpoint第四点坐标(数组下标 2 and 3)ptArray(3) = ypoint C yhLineweight lwployobj,ma.Borders(xlEdgeBottom).WeightEnd IfIf y = 1 ThenIf ma.Borders(xlEdgeLeft).LineStyle xlNone ThenptArray(0) = xpoint第四点坐标(数组下标 0 and 1)ptArray(1) = ypoint - yhptArray(2) = xpoint第一点坐标(数组下标 2 and 3)ptArray(3) = ypointEnd IfLineweight lwployobj, ma.Borders(xlEdgeLeft).WeightEnd IfIf ma.Borders(xlEdgeRight).LineStyle xlNone ThenptArray(0) = xpoint + xh第二点坐标(数组下标 0 and 1)ptArray(1) = ypointptArray(2) = xpoint + xh第三点坐标(数组下标 2 and 3)ptArray(3) = ypoint C yhLineweight lwployobj,ma.Borders(xlEdgeRight).WeightEnd IfSet lwployobj = moSpace.AddLightWeightPolyline(ptArray)在AutoCAD文件里画线With lwployobj.Layer = 指定lwployobj所在图层.Color = acBlue 指定lwployobj的颜色End WithLwployobj.UpdateNext yNext xEnd Sub Sub Lineweight(ByVal line As Object, u As Integer)Select Case uCase 1Call line.SetWidth(0, 0.1, 0.1)Case 2Call line.SetWidth(0, 0.3, 0.3)Case -4138Call line.SetWidth(0, 0.5, 0.5)Case 4Call line.SetWidth(0, 1, 1)Case ElseCall line.SetWidth(0, 0.1, 0.1)End SelectEnd Sub Function zh(pp As Integer) As StringIf pp 26 Thenzh = Chr(64 + pp)Elsezh = Chr(64 + Int(pp / 26) + Chr(64 + pp Mod 26)End IfEnd Function3、表格文字转换 - 在AutoCAD中,文字标注的形式有多种,与Microsoft Excel 单元格区域多行文本内容相对应的是多行文本命令。AutoCAD提供的VBA添加多行文本的命令语句是:RetVal = object.AddMText(InsertionPoint, Width, Text)- 通过修改RetVal的属性可以控制表格文字在表格中的位置。- (1)表格文字本身的转换- 分析AddMText命令可以得出:表格文字所在位置、文字内容宽度,文字内容,均可通过此命令来添加。然而表格文字字体,大小,下划线、上下脚标,倾斜,加粗等却不能。一般的方法是采用修改字体形文件的方法来实现,方法烦琐,不便于实现,而且仅对修改过形文件的字体有效。况且当同一文字块内的不同文字的字体,大小,下划线、上下脚标,倾斜,加粗不同时,使用修改字体形文件的方法也无法实现。本文介绍一种直接利用Mtext命令提供的方法进行转换。- 在AddMText命令中,影响文字内容和文字属性的参数Text。在具体文字前加上一定的控制符号可以控制文字的文字属性,具体控制符号可以参阅AutoCAD帮助文件。例如,F宋体;Q18;W1.2;ABCDEFG把“ABCDEFG”设置成宋体、向右倾斜18度,每个字的宽度是正常宽度1.2倍。- 本程序具体采用的方法是:读取Microsoft Excel文件某一单元格区域里的某第j个字符属性(字体,大小,下划线、上、下脚标,倾斜,加粗),读取Microsoft Excel文件某一单元格区域里的某第j+1个字符属性,如果与第j个字符相同,则二者采用同样的控制符号;若不同,则从第j+1个字符开始,重复前面的工作。AutoCAD利用VBA获取当前图内的块对象更新: 2011-09-27字体: 【大中小】点击:84关键词:autocad vba 获取 对象 块 属性先说废话,cad二次开发到底哪个网站的资料比较好呢,谁知道的告诉我一下,我只知道一个“明经通道”好了,开始正题:1、我这次要做的是获取图形中所有的块,并且取出其中自定义的那些属性值如果你也用到块,建议先看看“块对象”的介绍:/object/acad2004/idh_block_object.htm2、直接来代码了,简要说明:从modelsapce中获取所有的entity,如果是BlockReference的话读取其属性并输出获取所有entity的方法:Each ent In ThisDrawing.ModelSpace判断entity类型的方法:TypeOf ent Is AcadBlockReference判断blockRef是否有属性的方法:ent.HasAttributes()获取blockRef属性的方法:ent.GetAttributes获取属性名称及其值的方法:Attribuut.TagString & : & Attribuut.TextString Dim ent As AcadEntity For Each ent In ThisDrawing.ModelSpace If TypeOf ent Is AcadBlockReference And ent.HasAttributes() Then Debug.Print ent.Name Dim Attributen As Variant Dim Attribuut As AcadAttributeReference Attributen = ent.GetAttributes For i = LBound(Attributen) To UBound(Attributen) Set Attribuut = Attributen(i) Debug.Print Attribuut.TagString & : & Attribuut.TextString Next i Debug.Print End If Next ent注意,获取到的attribute是数组型明经CAD_VBA论坛整理(5)更新: 2010-11-08字体: 【大中小】点击:2181.怎么查找某一个group是否存在?-检查图形中是否含有指定名称的组合的函数Function GetGroup(GName As String) As BooleanDim objGroup As AcadGroupOn Error Resume NextSet objGroup = ThisDrawing.Groups(GName)If Err ThenGetGroup = FalseElseGetGroup = TrueEnd IfEnd FunctionGetGroup函数使用示例Sub GGroup()Dim GName As StringGName = liecDim GroupTip As StringIf GetGroup(GName) ThenGroupTip = 有ElseGroupTip = 无End IfMsgBox 图形中 & GroupTip & 名称为 & GName & 的组合存在, , 明经通道示例End Sub2.在AutoCAD中,如果你的模板没有经过修改的话,则写入中文时会显示“?”这样的文字,这时,你必须手动修改文字样式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论