用于更改Autocad块属性值的VBA
您好,;有人能帮我用这个宏启动一个细节模板吗
;对于这个宏,一切都很好,文本根据输入信息更新,比例也会改变,但我无法更改块名的字符串:“No No No modHFGen.dll;详图标签
;我还需要标签:“我需要一个标签。”;详细名称;值:“0”;详细名称“
;和标签:“;“完整”;和价值:;“完整”;也要更新
;见下文
&039;该程序旨在自动创建详细信息
&039;此程序调用了一个模板文件。它被称为
&039&引用;dwgName“;其价值为;C: \Users\holguinr\Documents\DG\u Office\CAD\DG/u CAD\Custom\Detail Library\DGFS\u DET\u TEMPLATE.dwg;。确保;此文件的路径是否正确
Dim StrScale As Variant
Dim intSDI As Integer
Dim entity As Object
Dim sset As AcadSelectionSet
Dim msSpace As ObjectDim acadDoc As Object
Dim acadApp As Object>Dim strFileName As String
Dim StrScale2 As variance
Set acadApp=GetObject(,";Autocad.Autocad.应用程序“
 
 ;如果出现错误,则 ;MsgBox错误。说明 ;退出Sub ;如果结束 
设置acadDoc=acadApp。ActiveDocument;打开详图温度图 ;Dim dwgName作为字符串 ;dwgName=";C: \Users\holguinr\Documents\DG\u Office\CAD\DG/u CAD\Custom\Detail Library\DGFS\u DET\u模板。图纸
 ;If Dir(dwgName)<&燃气轮机&引用&引用;然后   ;如果intSDI=0,则    ;本图纸.应用.文件。打开dwgName   ;其他    ;此图纸。打开dwgName   ;如果结束 ;其他   ;MsgBox“;“文件”&;dwgName&&引用;不存在&引用
   ;卸载Me ;如果结束 
将strPath设置为字符串
strPath=ThisDrawing.Application。路径 
调试。打印strPath;设置图形名称和路径;S: \ACA 2011 Support\Template\CA\u Detail\u Template.dwt“
本图纸。SendCommand(“Filedia 0”)
&039;如果希望能够保存详细信息,请取消注释这些行;检查文件是否已存在;Dim Fsys作为新的文件系统对象;Dim Msg、Style、Title、Help、Ctxt、Response、MyString;Msg=";文件Aready已存在,"&;Chr(13)&&引用;你想跳过吗&引用  ' 定义消息
&039;Style=vbYesNo+vbCritical+vbDefaultButton2';定义按钮
&039;Title=";文件区域“存在” ' 定义标题
&039;strFileName=";R: “ACAD\DETAIL\TEMP”&;txtName。价值(&A)"E;。图纸
&039;如果是Fsys。文件存在(strFileName),然后 ' 显示消息
 '响应=MsgBox(消息、样式、标题)   '如果响应=vbYes,则 ' 用户选择是
     ' 此图纸。SendCommand(&u saveas 2000&strFileName&Chr(13))     '此图纸。SendCommand(“y”)
     '此图纸。SendCommand(“Filedia 1”)
   '其他 ' 用户选择编号     '结束     '卸载Me   '如果结束 '其他 '此图纸。SendCommand(“saveas 2000”strFileName&Chr(13))
&039;结束If&039;设置图形的比例;这也可以通过控制阵列来实现,如果Opt1.value=True,则 ;StrScale=";Aec\u Full\u CA“
 ;StrSc=”;“完整”
 ;StrScale2=“”;1“
如果Opt2.value=True,则结束 ;StrScale=";Aec\u Half\u Full\u CA“
 ;StrSc=”;“一半”
如果Opt3.value=True,则结束 ;StrScale=";Aec_3_CA“
 ;StrSc=”;3“&;Chr(34)&&引用=1“&;Chr(39)&&引用-0“&;Chr(34) ;StrScale2=“”;4“
如果Opt4.value=True,则结束 ;StrScale=";Aec_1_1-2_CA“
 ;StrSc=”;1 1/2“&;Chr(34)&&引用=1“&;Chr(39)&&引用-0“&;Chr(34) ;StrScale2=“”;8“
如果Opt5.value=True,则结束 ;StrScale=";Aec_1_CA“
 ;StrSc=”;1“&;Chr(34)&&引用=1“&;Chr(39)&&引用-0“&;Chr(34) ;StrScale2=“”;12“
如果结束如果Opt6.value=True,则 ;StrScale=";Aec_3-4_CA“
 ;StrSc=”;3/4“&;Chr(34)&&引用=1“&;Chr(39)&&引用-0“&;Chr(34) ;StrScale2=“”;16“
如果Opt7.value=True,则结束 ;StrScale=";Aec_1-2_CA“
 ;StrSc=”;1/2“&;Chr(34)&&引用=1“&;Chr(39)&&引用-0“&;Chr(34) ;StrScale2=“”;24“
如果Opt8.value=True,则结束 ;StrScale=";Aec_3-8_CA“
 ;StrSc=”;3/8“&;Chr(34)&&引用=1“&;Chr(39)&&引用-0“&;Chr(34) ;StrScale2=“”;32“
如果Opt9.value=True,则结束 ;StrScale=";Aec_1-4_CA“
 ;StrSc=”;1/4“&;Chr(34)&&引用=1“&;Chr(39)&&引用-0“&;Chr(34) ;StrScale2=“”;48“
如果Opt10.value=True,则结束 ;StrScale=";Aec_1-8_CA“
 ;StrSc=”;1/8“&;Chr(34)&&引用=1“&;Chr(39)&&引用-0“&;Chr(34) ;StrScale2=“”;96“
如果调试,则结束。将StrScale Dim strCommand打印为String
Dim SC作为Variant
Dim strheight作为Double
Dim limy作为doubly
调试。打印strLimits;设置文本高度(strheight=CDbl(StrScale2)
height=0.09375*strheight &039;设置此图形的尺寸比例。SendCommand(“-dimstyle”R“Chr(13)”和;StrScale&;Chr(13)&&引用";)
&039;设置该图形的线型比例。SendCommand(“Ltscale”StrScale2)
&039;重新生成图形
此图形。SendCommand(“regen”)
&039;设置绘图限制。SendCommand(“限制”Chr(13)&;Chr(13)&;strLimits&;Chr(13))
&039;在此绘图中将filedia变量设置为1。SendCommand(“Filedia 1”)
&039;设置图形的文本样式。SendCommand(“TEXTSTYLE”Chr(13)和&引用;Notes_CA“&;Chr(13))
&039;设置图形的文字高度。SendCommand(“TEXTSIZE”(高度)和&引用";)
调试。打印StrSc;作为对象的Dim elem;Dim被发现为布尔值;Dim txtStr作为字符串;Dim txtTemp作为字符串
;txtStr=";“一半”
 
' 在模型空间中循环实体' 并更改文本 
 ;对于本图纸中的每个元素。模型空间   ;使用elem     ;如果(.EntityName=“AcDbText”)或(.EntityName=“AcDbMText”)然后       ' 更改文本实体的高度       '.TextString=";测试“
       '.更新       '发现=真     '如果结束       ;txtTemp=.TextString         ;如果txtTemp=";“完整”;然后         。TextString=StrSc         ;如果结束         ;如果txtTemp=";详细名称“;然后         。TextString=txtName         ;如果结束       。更新       ;发现=真     ;如果结束   ;以结尾   ;设置元素=无   
 ;下一个要素 ;Dim attributeObj作为AcadAttribute作为字符串Dim Tag1作为字符串;详细名称
value1=;详细名称“
作为字符串的Dim Tag2;“完整”
value2=;“完整”
 ;对于本图纸中的每个元素。模型空间 ;  ;使用elem     ;如果(.EntityName=AcadAttribute),则       ' 更改文本实体的高度       '.TextString=";测试“
       '.更新       '发现=真     '如果结束       ;txtTemp=.TextString         ;如果值2=“”;“完整”;然后         。TextString=StrSc         ;如果结束         ;如果值1=";详细名称“;然后         。TextString=txtName         ;如果结束       。更新       ;发现=真     ;如果结束   ;以结尾   ;设置元素=无   
 ;下一个元素是ThisDrawing.Application.ZoomeExtents。Regen acAllViewports卸载Me
End-Sub
Private-Sub Opt6\u Click()
endsub(ByVal键代码为MSForms.ReturnInteger,ByVal移位为Integer)  ;如果键代码=13,则CmdOk。SetFocus End Sub CMDNCANCEL\u Click()
卸载Me
**** Hidden Message ***** 你赢了';在模型空间中找不到许多attributereference,但您会找到拥有属性的块引用。抓取块,然后对集合中的每个属性施展魔法 VBA中的一个优点是,检索到的块属性可以通过其顺序att(1)等而不是标记名来引用
For Cntr = 0 To SS.Count - 1
If SS.Item(Cntr).Name = BLOCK_NAME Then
attribs = SS.Item(Cntr).GetAttributes
If attribs(0).TextString = pitname Then
pt1 = ThisDrawing.Utility.GetPoint(, " pick first point")
txtx1 = CStr(FormatNumber(pt1(0), 3))
TXTY1 = CStr(FormatNumber(pt1(1), 3))
attribs(1).TextString = txtx1
attribs(2).TextString = TXTY1
attribs(1).Update
attribs(2).Update
Cntr = SS.Count
Else: End If
Else: End If
Next Cntr
如果我怀疑(.EntityName=AcadAttribute)返回了您PM给我的错误,则需要首先获取块,然后才能获取属性。
页:
[1]