乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 95|回复: 6

[编程交流] Excel-E的后期绑定VBA

[复制链接]

4

主题

11

帖子

7

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 21:40:35 | 显示全部楼层 |阅读模式
您好,请您帮助我转换此代码(后期绑定),以便它可以在不引用特定acx的情况下适用于大多数版本的AutoCAD。tlb?
 
  1. Sub ExportLine()
  2.     Dim acadApp As Object
  3.     Dim acadDoc As Object
  4.     Dim currentSelectionSet As Object
  5.     Dim ent As Object
  6.     Dim oLine As Object
  7.     Dim n As Long
  8.     Dim intGroupCode(0) As Integer
  9.     Dim varDataCode(0) As Variant
  10.     Set acadApp = GetObject(, "AutoCAD.Application")
  11.     Set acadDoc = acadApp.ActiveDocument
  12. intGroupCode(0) = 0
  13. varDataCode(0) = "Line"
  14. acadDoc.SelectionSets.Item("Lne").Delete
  15. Set currentSelectionSet = acadDoc.SelectionSets.Add("Lne")
  16.      
  17.      n = 1
  18.     For Each ent In currentSelectionSet
  19.         
  20.         
  21.         If TypeOf ent Is AcadLine Then 'This line is a problem
  22.         
  23.             Set oLine = ent
  24.             Cells(n, 1) = oLine.StartPoint(0)
  25.             Cells(n, 2) = oLine.StartPoint(1)
  26.             Cells(n, 3) = oLine.StartPoint(2)
  27.             Cells(n, 4) = oLine.EndPoint(0)
  28.             Cells(n, 5) = oLine.EndPoint(1)
  29.             Cells(n, 6) = oLine.EndPoint(2)
  30.             
  31.         End If
  32.          
  33.     Next
  34.     Set acadApp = Nothing
  35.     Set acadDoc = Nothing
  36.       MsgBox "Done"
  37. Exit Sub
回复

使用道具 举报

18

主题

118

帖子

101

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
89
发表于 2022-7-6 21:54:05 | 显示全部楼层
你好
阅读您的帖子,您似乎是在Excel Vba模块内开发上述程序,对吗? 
您是否可以尝试执行相反的操作,在Autodesk VBA模块内开发过程,以便使用最新版本的autocad,选择需要将信息传递到excel的对象,等等。
这只是第一印象或建议。我会试着运行你的代码,看看会发生什么。
 
再见
回复

使用道具 举报

18

主题

118

帖子

101

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
89
发表于 2022-7-6 22:06:22 | 显示全部楼层
你好
我用Autocad Mechanical 2019和Excel 2016在Excel VBA开发区内试用了您的代码,还插入了一个带有optionbutton的用户表单,并对其进行了以下修改,看起来它正在运行。
我还试着改变线条颜色,在excel上处理精细的单元格颜色背景。
我对变量声明做了一些修改。
我第一次在检索行的起点和终点坐标时遇到一些问题,后来我做了一个修改变量声明,它运行得很好。
我建议检查“ent”变量中的对象是否真的是一条线(可能是一条多段线)。
  1. Sheets(1).Activate
  2. Dim acadApp As Object
  3.     Dim acadDoc As AcadDocument
  4.     Dim currentSelectionSet As Object
  5.     Dim ent As Object
  6.     Dim oLine As AcadLine
查看图片下方的信息,以及Execl项目中的参考库
224038oancbquiwnb0s1gx.png
 
最后,我不明白你想做什么:
再见
回复

使用道具 举报

4

主题

11

帖子

7

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 22:11:12 | 显示全部楼层
谢谢你的回复彼得·潘。
我想分发适用于所有版本的AutoCAD的电子表格,这就是为什么我避免引用特定的AutoCAD库。我不喜欢创建电子表格的多个副本,唯一的更改是来自不同AutoCAD版本的参考。顺便说一句,我正在锁定VBA项目,这就是用户无法更改引用的原因。
 
原始代码参考了AutoCAD 2018,运行良好。但是,当我尝试使用后期绑定(例如,将Dim acadDoc更改为AcadDocument to Object等)并删除AutoCAD 2018类型库时,它不起作用。
 
关于acSelectionSetPrevious,它来自非常旧的AutoCAD版本。我相信在获得主动选择时存在一个bug,这就是我为什么要做这项工作的原因。
回复

使用道具 举报

18

主题

118

帖子

101

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
89
发表于 2022-7-6 22:26:28 | 显示全部楼层
 
好的,我理解你的问题,但如果其他软件是可变的,我认为这应该是Autocad,那么至少应该解决一些问题。
作为替代方案,我正在搜索一个技巧,以避免与Autocad库版本绑定,但我不确定。我会及时通知你的。
回复

使用道具 举报

18

主题

118

帖子

101

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
89
发表于 2022-7-6 22:37:00 | 显示全部楼层
 
嗨@Bª™ªN1534592500,
这里是用于检索活动项目引用的代码,因此从活动引用库开始,您可以在启动代码的选择部分之前选择声明的类型
我希望这可能只能解决你的一些问题。
不过,我会调查更多。
回复

使用道具 举报

4

主题

11

帖子

7

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 22:41:56 | 显示全部楼层
非常感谢彼得·潘,我感谢你的努力。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 14:58 , Processed in 0.958585 second(s), 79 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表