乐筑天下

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

[编程交流] 打开组合框中的dwg文件

[复制链接]

3

主题

24

帖子

21

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 22:47:07 | 显示全部楼层 |阅读模式
嘿,伙计们!
 
我不熟悉AutoCAD和VBA。我的任务是开发一个autocad附加程序,允许用户插入自定义的项目绘图框架。我已经设置了userform,用户可以单击组合框并选择一个画框(在本例中为A4、A4纵向、A3和A1),然后单击插入按钮,该按钮将在图纸空间中显示该画框。
 
目前,我使用了一些代码,使我能够调出画框并在纸空间中显示它,但该代码只允许我调出其中一个框架。我不知道如何更改代码,以便用户可以选择他们想要的帧。以下是我目前掌握的代码:
 
私有子命令按钮2\u Click()
将myBlock设置为AcadBlockReference
Dim blockInsert(0到2)作为双精度
 
块插入(0)=-18
块插入(1)=-6
块插入(2)=0
 
设置myBlock=ThisDrawing。纸张空间。插入块(blockInsert,“C:\Drawing Frame\A1\U Frame.dwg”,1,1,1,0)
 
末端接头
 
从代码中可以看出,它只会显示A1帧。我如何编辑此代码,以便最终用户可以使用下拉菜单选择所需的帧。
 
我希望这是有意义的,希望你能帮助我。
 
干杯
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-6 22:52:49 | 显示全部楼层
我正在将您的线程移动到VBA部分。
回复

使用道具 举报

3

主题

24

帖子

21

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 22:57:27 | 显示全部楼层
哦,谢谢你!希望我能得到我需要的帮助
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 23:00:23 | 显示全部楼层
您可能希望使用以下内容:
 
假设您的组合中有以下项目:
A1
A3
A4
A4纵向

这是代码剪报
  1. Option Explicit
  2. '' your folder path here:
  3. Const frameFolder As String = "C:\Drawing Frame" '<--backslash at the end
  4. Private Sub CommandButton2_Click()
  5. Dim myBlock As AcadBlockReference
  6. Dim blockInsert(0 To 2) As Double
  7. Dim frameDwg As String
  8. frameDwg = ComboBox1.Text '<-- get selected item
  9. Dim dwgName As String
  10. dwgName = frameFolder & frameDwg & "_Frame.dwg"
  11. MsgBox dwgName
  12. blockInsert(0) = -18
  13. blockInsert(1) = -6
  14. blockInsert(2) = 0
  15. Set myBlock = ThisDrawing.PaperSpace.InsertBlock(blockInsert, dwgName, 1, 1, 1, 0)
  16. ComboBox1.ListIndex = -1 '<--refresh combo
  17. End Sub

  1. ''Go to Tools->References, add Reference to Microsoft Scripting Runtime
  2. ''Go to Tools->Options->General->Error Trapping frame check  "Break on Unhandled Errors" button
  3. Option Explicit
  4. '' your folder path here:
  5. Const frameFolder As String = "C:\Drawing Frame" '<--backslash at the end
  6. Function FileExist(dwgName As String) As Boolean
  7.    Dim txt As String
  8.    Dim fs As Object
  9.    Dim fl As Object
  10.    
  11.    Set fs = CreateObject("Scripting.FileSystemObject")
  12.     On Error GoTo Err_Control
  13.    Set fl = fs.Getfile(dwgName)
  14.    If Not fl Is Nothing Then
  15.    FileExist = True
  16.    Exit Function
  17.    End If
  18. Err_Control:
  19.    FileExist = False
  20. End Function
  21. Private Sub CommandButton1_Click()
  22. Dim frameDwg As String
  23. frameDwg = ComboBox1.Text
  24. Dim dwgName As String
  25. dwgName = frameFolder & frameDwg & ".dwg" '<--build a full path of drawing here
  26. MsgBox FileExist(dwgName)
  27. End Sub
  28. Private Sub CommandButton2_Click()
  29. Dim myBlock As AcadBlockReference
  30. Dim blockInsert(0 To 2) As Double
  31. Dim frameDwg As String
  32. frameDwg = ComboBox1.Text '<-- get selected item
  33. Dim dwgName As String
  34. dwgName = frameFolder & frameDwg & ".dwg" '<--build a full path of drawing here
  35. If Not FileExist(dwgName) Then
  36. MsgBox "File:" & vbCr & dwgName & " does not exists"
  37. Exit Sub
  38. End If
  39. MsgBox dwgName
  40. blockInsert(0) = -18
  41. blockInsert(1) = -6
  42. blockInsert(2) = 0
  43. Set myBlock = ThisDrawing.PaperSpace.InsertBlock(blockInsert, dwgName, 1, 1, 1, 0)
  44. ComboBox1.ListIndex = -1 '<--refresh combo
  45. End Sub

 
~'J'~
回复

使用道具 举报

3

主题

24

帖子

21

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 23:05:47 | 显示全部楼层
嘿我试过代码,它有点工作。现在我只需要点击任务栏上的autocad,它就会出现在layout1上。它不会自动打开autocad。
回复

使用道具 举报

3

主题

24

帖子

21

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 23:10:07 | 显示全部楼层
您必须阅读有关文档级事件处理的文档
在这种情况下,您需要拦截AcadDocument\u Activate事件
我知道对不起
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 23:11:20 | 显示全部楼层
嘿,我会搜索这个编码。
 
你知道更新图形的方法吗,所以如果我再次启动表单,它将插入新图形并删除前一帧。
回复

使用道具 举报

3

主题

24

帖子

21

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 23:15:24 | 显示全部楼层
在插入他的块后,您可以将其句柄存储在文本框字段中,这是最简单的
在当前程序中
  1. With ThisDrawing
  2. .ActiveLayout = .Layouts.Item("Layout1")
  3. End With

如果你需要插入一个新的
你可以在老街区用
HandleToObject方法(请参阅帮助)
 
不记得了也许是这样
  1. With ThisDrawing
  2. .ActiveLayout = .Layouts("Layout1")
  3. End With

 
~'J'~
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 23:21:05 | 显示全部楼层
我用这段代码自动显示布局1
 
使用此图纸
.ActiveLayout=。布局。项目(“布局1”)
.应用应用GetAcadState公司
以结束
 
然而,我正在努力更新代码。
回复

使用道具 举报

3

主题

24

帖子

21

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 23:24:31 | 显示全部楼层
我是新手,有完全相同的应用程序。你能在这里展示你的全部工作吗?从创建组合框开始,在绘图中插入选项。
 
 
谢谢
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 05:44 , Processed in 0.731594 second(s), 72 queries .

© 2020-2025 乐筑天下

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