vba实现CAD块属性导出到excel中

vba实现CAD与excel交互功能可提高工作效率,此例可供参考。

如果无法加载工程文件,需:开始-运行---输入regsvr32.exe FM20.dll,点确定即可。

引用库文件路径如下图(不是必须):

上图是未引用状态,引用后如下:

(版本1:针对图中只有一种类型的块)代码如下:

Sub 导出块属性到excel()
    Dim Excel As Object
    Dim elem As Object
    Dim excelSheet As Object
    Dim Array1 As Variant
    Dim Count, RowNum As Integer
    Dim NumberOfAttributes As Integer
    
    ' Start Excel
    On Error Resume Next
    
    Set Excel = GetObject(, "Excel.Application")
    
    If Err <> 0 Then
        Err.Clear
        Set Excel = CreateObject("Excel.Application")
            
        If Err <> 0 Then
            MsgBox "Could not load Excel.", vbExclamation
            End
        End If
    End If
    
    On Error GoTo 0
    
    Excel.Visible = True
    Excel.Workbooks.Add
    Excel.Sheets("Sheet1").Select
    Set excelSheet = Excel.ActiveWorkbook.Sheets("Sheet1")
    
    RowNum = 1
    Dim Header As Boolean
    For Each elem In ThisDrawing.ModelSpace
        If StrComp(elem.EntityName, "AcDbBlockReference", 1) = 0 Then
            If elem.HasAttributes Then
                Array1 = elem.GetAttributes
                For Count = LBound(Array1) To UBound(Array1)
                    If Header = False Then
                        If StrComp(Array1(Count).EntityName, "AcDbAttribute", 1) = 0 Then
                            excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TagString
                        End If
                    End If
                Next Count
                RowNum = RowNum + 1
                For Count = LBound(Array1) To UBound(Array1)
                    excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TextString
                Next Count
                Header = True
            End If
        End If
    Next elem
    
    NumberOfAttributes = RowNum - 1
    
    If NumberOfAttributes > 0 Then
        excelSheet.UsedRange.Font.Bold = True
        
        'For a specific set of attribute information this could
        'be set to fit the exact number of columns.
        excelSheet.Columns("A:G").AutoFit

    Else
        MsgBox "未发现有属性的块" & Space(50) & vbCr & _
 "写代码qq:443440204", vbInformation, "版权所有qq:443440204"
        ''Excel.Quit
    End If
MsgBox "OK" & Space(50) & vbCr & _
 "vba代码二次开发qq:443440204", vbInformation, "版权所有qq:443440204"
End Sub

 

(版本2:针对图中只多种类型的块)代码如下: 


Sub 导出块属性到excel()
    Dim Excel As Object
    Dim elem As Object
    Dim excelSheet As Object
    Dim Array1 As Variant
    Dim Count, RowNum As Integer
    Dim NumberOfAttributes As Integer
    
    ' Start Excel
    On Error Resume Next
    
    Set Excel = GetObject(, "Excel.Application")
    
    If Err <> 0 Then
        Err.Clear
        Set Excel = CreateObject("Excel.Application")
            
        If Err <> 0 Then
            MsgBox "Could not load Excel.", vbExclamation
            End
        End If
    End If
    
    On Error GoTo 0
    
    Excel.Visible = True
    Excel.Workbooks.Add
    Excel.Sheets("Sheet1").Select
    Set excelSheet = Excel.ActiveWorkbook.Sheets("Sheet1")
    
    RowNum = 1
   
    For Each elem In ThisDrawing.ModelSpace
        If StrComp(elem.EntityName, "AcDbBlockReference", 1) = 0 Then
            If elem.HasAttributes Then
            Stop
 ''通过getattributes函数我们把块的属性放入数组中,下图可见数组有3个项目
 ''每个项目都有tagstring和textstring,然后把数组中值输出到excel,至此
 ''我们提取出了块中的全部属性
                Array1 = elem.GetAttributes
                
                For Count = LBound(Array1) To UBound(Array1)
                   
                        If StrComp(Array1(Count).EntityName, "AcDbAttribute", 1) = 0 Then
                        
                            excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TagString
                      
                        End If
                  
                Next Count
                RowNum = RowNum + 1
                For Count = LBound(Array1) To UBound(Array1)
                    excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TextString
                Next Count
              
            End If
             RowNum = RowNum + 1
        End If
       
    Next elem
    
    NumberOfAttributes = RowNum - 1
    
    If NumberOfAttributes > 0 Then
        excelSheet.UsedRange.Font.Bold = True
        
        'For a specific set of attribute information this could
        'be set to fit the exact number of columns.
        excelSheet.Columns("A:G").AutoFit

    Else
        MsgBox "未发现有属性的块" & Space(50) & vbCr & _
 "写代码qq:443440204", vbInformation, "版权所有qq:443440204"
        ''Excel.Quit
    End If
MsgBox "OK" & Space(50) & vbCr & _
 "vba代码二次开发qq:443440204", vbInformation, "版权所有qq:443440204"
End Sub

  • 33
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 第一章 VBA入门 了解嵌入和全局VBA工程 用VBA管理器组织工程 处理宏 用VBA IDE编辑工程 更多的信息 回顾AutoCAD VBA 工程术语 回顾AutoCAD VBA 命令 第二章 理解ActiveX自动操作基础.. 理解AutoCAD对象模型 访问对象层次 通过集合对象操作 理解属性和方法 理解父对象 定位类型库 在数据库返回第一个图元 在方法和属性使用变体 使用其它程序语言 第三章 控制AutoCAD环境 打开、保存和关闭图形 设定AutoCAD参数 控制应用程序窗口 控制图形窗口 重置活动对象 设定和返回系统变量 精确制图 提示用户输入 访问AutoCAD命令行 工作于无打开文档状态 输入其它文件格式 输出到其它文件格式 第四章 创建和编辑AutoCAD图元 创建对象 确定容器对象 创建直线 创建曲线对象 创建点对象 创建实体填充区域 创建面域 创建阴影 创建实体填充区域 创建面域 创建阴影 编辑对象 工作于命名的对象 选择对象 复制对象 移动对象 删除对象 比例缩放对象 转换对象 延伸和修剪对象 分解对象 编辑多段线 编辑样条曲线 编辑阴影 使用图层、颜色和线型 使用图层 使用颜色 使用线型 分配图层、颜色和线型给对象 添加文本到图形 处理文字样式 使用单行文字 使用多行文字 使用Unicode字符、控制代码和特殊字符 替换字体 拼写检查 第五章 标注与公差 标注的概念 创建标注 编辑标注 利用标注样式 在模型空间和图纸空间标注 创建引线及注解 创建形位公差 第六章 定义菜单和工具栏 理解MenuBar和MenuGroups集合 加载菜单组 改变菜单条 创建和编辑下拉菜单和快捷菜单 建立并编辑工具栏 建立宏 对菜单项和工具栏项增加状态栏帮... 在右键菜单增加条目 第七章 使用事件 了解AutoCAD的事件 编写事件处理器的方法 处理应用程序级事件 处理文档级事件 处理对象级事件 第八章 在三维空间下工作 指定三维坐标 定义用户坐标系统 坐标转换 建立三维对象 在三维编辑 编辑三维实体 第九章 定义布局及打印 了解模型空间和图纸空间 了解布局 了解布局与的关系 了解打印配置 决定布局设置 了解视口 切换至图纸空间布局 切换至模型空间布局 建立图纸空间视口 改变视口视图及内容 在图纸空间缩放线型样式 在被打印视口的消隐线 打印图纸 执行基本打印 在模型空间打印 从图纸空间打印 第十章-高级绘图与组织技术 使用光栅图像 附着和缩放光栅图像 管理光栅图像 修改图像和图像边界 剪裁图像 使用属性 使用 使用属性
一本非常好的CAD VBA学习教材 第 1 章、VBA入门 1 、了解嵌入和全局VBA工程 2、用VBA管理器组织工程 3、处理宏 4、用VBA IDE编辑工程 5、更多的信息 6、回顾AutoCAD VBA 工程术语 7、回顾AutoCAD VBA 命令 第2 章、理解ActiveX自动操作基础 1、理解AutoCAD对象模型 2、访问对象层次 3、通过集合对象操作 4、理解属性和方法 5、理解父对象 6、定位类型库 7、在数据库返回第一个图元 8、在方法和属性使用变体 9、使用其它程序语言 第三章 控制AutoCAD环境 1、打开、保存和关闭图形 2、设定AutoCAD参数 5、重置活动对象 6、设定和返回系统变量 7、精确制图 8、提示用户输入 9、访问AutoCAD命令行 第四章 创建和编辑AutoCAD图元 1、创建对象 2、编辑对象 3、使用图层、颜色和线型 4、添加文本到图形 第五章 标注与公差 1、标注的概念 2、创建标注 3、编辑标注 4、利用标注样式 5、在模型空间和图纸空间标注 6、创建引线及注解 7、创建形位公差 第六章 定义菜单和工具栏 1、理解MenuBar和MenuGroups集合 2、加载菜单组 3、改变菜单条 4、创建和编辑下拉菜单和快捷菜单 5、建立并编辑工具栏 7、对菜单项和工具栏项增加状态栏帮助 8、在右键菜单增加条目 第七章 使用事件 1、了解AutoCAD的事件 2、编写事件处理器的方法 3、处理应用程序级事件 4、处理文档级事件 5、处理对象级事件 第八章 在三维空间下工作 1、指定三维坐标 2、定义用户坐标系统 3、坐标转换 4、建立三维对象 5、在三维编辑 6、编辑三维实体 第九章 定义布局及打印 1、了解模型空间和图纸空间 2、了解视口 3、打印图纸 第十章-高级绘图与组织技术 1、使用光栅图像 2、使用属性
要通过VBA实现CAD线段属性提取,可以按照以下步骤进行操作: 1. 打开VBA编辑器:在CAD界面,按下ALT+ F11键或从“工具”菜单选择“宏”→“Visual Basic Editor”。 2. 创建新的模:在VBA编辑器,选择“插入”→“模”,创建一个新的模。 3. 编写VBA代码:在新的模,编写VBA代码实现CAD线段属性提取。例如,可以使用以下代码: ``` Sub ExtractLineProperties() Dim ent As AcadEntity Dim line As AcadLine Dim length As Double ' 循环遍历选择的实体 For Each ent In ThisDrawing.SelectionSets("选择集1") ' 检查实体类型是否为线段 If TypeOf ent Is AcadLine Then Set line = ent '获取线段的长度 length = line.Length ' 将线段长度输出到命令行窗口 ThisDrawing.SendCommand "._line " & line.StartPoint(0) & "," & line.StartPoint(1) & "," & line.StartPoint(2) & " " & line.EndPoint(0) & "," & line.EndPoint(1) & "," & line.EndPoint(2) & " " ThisDrawing.SendCommand Chr(13) ThisDrawing.SendCommand "._text " & line.Length & ",,1 " ThisDrawing.SendCommand Chr(13) End If Next End Sub ``` 上述代码,使用了CAD的对象模型操作实体,首先通过循环遍历选择集的实体,然后判断实体类型是否为线段,如果是线段,则获取线段的属性。在上述代码,获取了线段的长度,然后通过命令行窗口将长度输出。 4. 运行VBA代码:关闭VBA编辑器后,在CAD界面,选择要提取线段属性的线段,然后通过“提取线段属性”命令执行VBA代码。 通过以上步骤,就可以实现通过VBA提取CAD线段的属性了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值