您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > solidworks模型自定义属性的批量处理的宏代码
AttributeVB_Name=利用子件处理属性1'利用子件进行自定义属性的批量处理的VBA代码'比较完善的第一版完成时间2012.11.05,作者:张中锋'适用于深圳东风有限公司solidworks老模型属性更改满足金蝶公司PLM系统要求实例'测试通过环境:2012.11.05windowsXPSP3;solidworks2010SP02(32bit)''''''''''''''''''''''''''''''''''''''''''''''''''版本更新日志'1.02012.10.29①对属性中,存在空白情况处理时数据异常进行修复;②对于已经存在的自定义属性值,保护其值不被处理'已知的bug记录PublicswModel2AsSldWorks.ModelDoc2PublicPARTNAME_Value_tempAsStringPublicMATERIAL_Value2_tempAsStringPublicswAppAsSldWorks.SldWorksSubmain()DimswModelAsSldWorks.ModelDoc2DimswModelDocExtAsSldWorks.ModelDocExtensionDimswSelMgrAsSldWorks.SelectionMgrDimswBOMAnnotationAsSldWorks.BomTableAnnotationDimswBOMFeatureAsSldWorks.BomFeatureDimswBomTableAsVariantDimboolstatusAsBooleanDimBomTypeAsLongDimConfigurationAsStringDimTemplateNameAsStringDimi,j,n,kAsIntegerDimswBOM_nameAsStringDimcomponentAsComponent2Dimvalue_tempAsIntegerDimtime_startAsStringDimtxt_pathAsStringSetswApp=Application.SldWorksSetswModel=swApp.ActiveDoctxt_path=swModel.GetPathName()&.csvOpentxt_pathForOutputSharedAs#400Print#400,图样代号;,;零件名称;,;零件材料;Chr(10);Configuration=swModel.GetActiveConfiguration().NameIfswModel.GetType=1ThenSetswModel2=swApp.ActiveDocCallCustominfo_change(Configuration)ElseIfswModel.GetType=2Thenvalue_temp=swModel.ResolveAllLightWeightComponents(False)'轻化取消到还原状态DimComponentsAsVariantDimSingleComponentAsVariantDimswComponentAsSldWorks.Component2Components=swModel.GetComponents(False)'获取整个装配体的组成部件(零件或者装配体)ForEachSingleComponentInComponents'遍历SetswComponent=SingleComponentIfNotswComponentIsNothingThenIfswComponent.GetModelDoc()IsNothingThen'判断子件对象模型是否存在;轻化状态下获取不到,为空Debug.Print没有通过ElseDimxAsIntegerDo'此循环实现处理当前模型和子件属性IfNotswComponentIsNothingAndx99Then'一个很原始的方法强制使用当前的模型SetswModel2=swModelx=100ElseSetswModel2=swComponent.GetModelDoc()'取得子件对象模型x=101EndIfCallCustominfo_change(swModel2.GetActiveConfiguration().Name)LoopUntilx=101EndIfElseDebug.Print不能获取到子件EndIfNextElseMsgBox不是零件或者装配体模型EndIfswModel.Save'保存文件Close#400MsgBox属性转换完毕EndSubPrivateFunctionCustominfo_change(ByValvConfigNameAsString)'处理模型的属性DimvConfigNameArrAsVariantDimvCustInfoNameArrAsVariantDimvCustInfoNameAsVariantDimvCustInfoName2AsVariantDimvCustInfoNameArr2AsVariantDimvCustInfoName2_tempAsStringDimvCustInfoName_tempAsStringDima()AsStringDimb()AsStringDimm,nAsIntegervCustInfoNameArr=swModel2.GetCustomInfoNames2(vConfigName)vCustInfoNameArr2=swModel2.GetCustomInfoNamesm=0IfNotIsEmpty(vCustInfoNameArr2)Then'取得自定义属性表的属性数据ForEachvCustInfoName2InvCustInfoNameArr2vCustInfoName2_temp=CStr(vCustInfoName2)IfvCustInfoName2_temp=Then'处理属性表中的空白数据行m=m-1ReDimPreservea(1,m)ExitForEndIfvCustInfoName_temp_value2=swModel2.CustomInfo(vCustInfoName2)ReDimPreservea(1,m)a(0,m)=Trim(vCustInfoName2_temp)a(1,m)=Trim(vCustInfoName_temp_value2)m=m+1ReDimPreservea(1,m)NextEndIfn=0IfNotIsEmpty(vCustInfoNameArr)Then'取得配置特定属性表的属性数据ForEachvCustInfoNameInvCustInfoNameArrvCustInfoName_temp=CStr(vCustInfoName)IfvCustInfoName_temp=Then'处理属性表中的空白数据行n=n-1ReDimPreserveb(1,n)ExitForEndIfvCustInfoName_temp_value=swModel2.CustomInfo2(vConfigName,vCustInfoName)ReDimPreserveb(1,n)b(0,n)=Trim(vCustInfoName_temp)b(1,n)=Trim(vCustInfoName_temp_value)n=n+1ReDimPreserveb(1,n)NextEndIfDims,tAsIntegerIfm0Then'当数组a中有数据时Fors=0ToUBound(a,2)'循环取出a中存储的每一条数据Ifa(0,s)Anda(1,s)Then'当数据有效时CallOldCustominfo_Value(a(0,s),a(1,s),PARTNAME)ElseIfa(0,s)=Then'当数据无效时(此情况只会是取得最后一条数据时)ExitForEndIfNextsIfPARTNAME_Value_temp=Then'在a中没有获取到合适的数据Ifn0ThenFort=0ToUBound(b,2)'循环取出b中存储的每一条数据Ifb(0,t)Andb(1,t)Then'当数据有效时CallOldCustominfo_Value(b(0,t),b(1,t),PARTNAME)ElseIfb(0,t)=Then'当数据无效时(此情况只会是取得最后一条数据时)ExitForEndIfNexttEndIfEndIfEndIfIfm0ThenFors=0ToUBound(a,2)Ifa(0,s)Anda(1,s)ThenCallOldCustominfo_Value(a(0,s),a(1,s),MATERIAL)ElseIfa(0,s)=ThenExitForEndIfNextsIfMATERIAL_Value2_temp=ThenIfn0ThenFort=0ToUBound(b,2)Ifb(0,t)Andb(1,t)ThenCallOldCustominfo_Value(b(0,t),b(1,t),MATERIAL)ElseIfb(0,t)=ThenExitForEndIfNexttEndIfEndIfEndIfDimDRAWNO_valueAsStringDimPARTNAME_valueAsStringDimMATERIAL_valueAsStringPARTNAME_value=Trim(PARTNAME_Value_temp)MATERIAL_value=Trim(MATERIAL_Value2_temp)'使用模型的绝对路径获取文件图号,比使用标题更安全DimDRAWNO_value1,DRAWNO_value2,DRAWNO_value13AsStringDimDRAWNO_value_NAsIntegerDRAWNO_value1=swModel2.GetPathNameDRAWNO_value2=StrReverse(DRAWNO_value1)DRAWNO_value_N=InStr(1,DRAWNO_value2,\)DRAWNO_value3=Mid(DRAWNO_value2,8,DRAWNO_value_N-8)DRAWNO_value=StrReverse(DRAWNO_value3)IfNotIsEmpty(vCustInfoNameArr2)ThenForEachvCustInfoName2InvCustInfoNameArr2'删除自定义属性bRet=swModel2.DeleteCustomInfo(vCustInfoName2)NextEndIfswModel2.AddCustomInfo3,DRAWNO,swCustomInfoText,DRAWNO_value'写入图样代号DRAWNOswModel2.AddCustomInfo3,PARTNAME,swCustomInfoText,PARTNAME_value'写入零件名称PARTNAMECallnew_unitIfTrim(Left(DRAWNO_value,1))QAndTrim(Left(DRAWNO_value,2))GBThen'检查标准件swModel2.AddCustomInfo3,MATERIAL,swCustomInfoText,MATERIAL_value'写入零件材料MATERIALCallnew_MaterialWeight_value=Show_mass(swModel2.GetPathName)'获取零件重量的数值swModel2.AddCustomInfo3,Weight,swCustomInfoText,Format(Weight_value,0.0)'写入零件重量Weight,使用1位小数swModel2.AddCustomInfo3,SPEC,swCustomInfoText,sw
本文标题:solidworks模型自定义属性的批量处理的宏代码
链接地址:https://www.777doc.com/doc-4608840 .html