乐筑天下

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

[编程交流] vba自动填充图形寄存器

[复制链接]

34

主题

105

帖子

91

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
224
发表于 2022-7-6 22:06:10 | 显示全部楼层 |阅读模式
你好
 
希望你能帮我提些建议。
我想创建一个vba工具,允许我从图形中获取一些值,并将这些值传输到excel工作表。
 
基本上我有一个图纸接收登记表,我必须填写。有时一份工作上没有多少图纸,大多数时候我有包层、建筑师、钢铁厂等,我被告知我必须跟踪我收到的图纸。
 
然而,我想说的是,我这样做是通过将它们保存在计算机上,并将它们归档以便快速方便地访问,并将所有被取代的图形转移到适当的文件夹中,只留下标记为当前的当前图形。
 
我觉得这很容易,但我们的负责人坚持我们这样做,我知道这是正确的做法,但我们根本没有时间记录我们在仍在执行时收到的图纸数量,而且这不仅仅是图纸,所有其他的东西,当你推动工作完成并达到目标,最重要的是把事情做好时,似乎并不重要。
 
正如我所说,我可以通过电脑完全控制绘图,但其他人没有,但在我在那里工作的两年里,我只有一次被管理层要求查看我无法制作的图纸接收登记簿。这确实让我看起来很糟糕,但似乎付出了很多努力却收效甚微?说了这么多,我想保留一张收到的图纸。
 
因此,如果有人能提出一个更简单的方法来做这件事,将非常感谢一些指导。
 
我对vba工具的看法如下。
 
1、允许用户选择四个acad实体。这将是项目名称、图纸编号、图纸标题,然后是版本。实体可以是多行文字、文字或属性。取决于其他人创建图形的方式。
2.然后保存四个实体的值并命名它们,例如txtstr1、txtstr2、txtstr3和txtstr4
3.然后打开我的dwg接收寄存器,选择一个特定单元格,基本上告诉excel范围(“a1”)是txtstr1,范围(“a2”)是txtstr2等,然后使活动单元格下一个单元格向下,然后转到下一个图形?
 
我对vba不太在行,但从我学到的东西来看,这似乎相当直接,我认为我可以从我创建的其他vba工具中提取一些代码。
 
那么,请问这是不是太复杂了?有没有更简单的方法。我一直想为我的图纸设置一些东西,因为目前我在填写我们的图纸注册表时手动键入它们。我们公司不使用床单套件。我可以看到它们的好处,但我们不会产生大量的图纸,所以如果我能为此创建一个vba工具,我会非常高兴,我总是正确地进行页面设置,并使用publish快速打印图纸。
 
干杯
Col公司
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 22:10:05 | 显示全部楼层
如果所有必需的元素都是标题栏中的属性,那么只需单击一个按钮即可实现-如果文件名包含任何必需的信息,也可以从文件名中提取信息。
 
我可以最容易导出到csv文件(只是excel文件的一种格式),因为这些文件最容易写入-如果您愿意,可以将其保存为xls。。。csv文件可以保存在某个位置,并在每次打开收到的图形时写入。。。。。然后,也许你可以将信息复制粘贴到你的主图纸登记册中,以供发布。
 
只是一些想法。。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 22:13:11 | 显示全部楼层
如果你真的想接受上面的建议,我非常乐意写一个LISP来适应这一点。
 
但我需要关于要写入的数据位置的某些信息。一、 e.Is存储在属性中,如果是,块名和属性名是什么。。等等(上传块的样本可能更容易)。
 
很乐意帮忙
 
回复

使用道具 举报

44

主题

542

帖子

502

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
220
发表于 2022-7-6 22:16:02 | 显示全部楼层
只需创建一个简单的excel模板,并将其复制到每个项目文件夹中。填写简单。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 22:19:04 | 显示全部楼层
 
是的,填写起来很简单,但也很耗时——这就是LISP、VBA和大多数其他编程语言的要点,以节省用户时间。
 
难道你不想打开一张图,点击一个按钮,因为所有需要的信息都写得很准确;与每次都必须打开excel表格并手动输入现在存在人为错误空间的数据不同?
 
只是一个想法,
 
回复

使用道具 举报

34

主题

105

帖子

91

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
224
发表于 2022-7-6 22:25:15 | 显示全部楼层
嗨,李,
 
谢谢你的提议,非常感谢。
 
我知道一点vba,所以我想坚持下去,再加上这是我练习的唯一机会。
 
你的建议的方法我喜欢,这将是伟大的,但问题的图纸来自不同的公司,所以图纸从来没有相同的。大多数情况下,标题栏不是块,而是线条、文字或多行文字。这就是为什么我在思考或使用一个选择集,然后存储值,然后在第二个屏幕上打开excel,只需将鼠标移到excel并点击excel中的按钮。
 
我甚至不确定它是否像那样复杂。我知道你可以在不同的程序之间工作,所以我实际上可以在acad中完成这一切。只需选择4个acad实体,将其保存为文本字符串,然后自动传输到excel中的活动单元格,然后使下一个单元格处于活动状态并粘贴值。为了加快这个过程,我可以让acad移动到下一个打开的图形,然后允许我进行新的选择。我在excel和word之间做了一些工作,传输了信息,所以用acad一定可以。从来没有遇到过更改图纸的代码tho?必须寻求帮助。
 
关于我自己的dwg reg,这是在一个带有属性的适当标题栏中。所以现在我正在输入绘图reg,但我希望创建一个vba程序,用于提取属性值并将其放入适当的excel单元格中。
 
谢谢你的建议,李。
 
干杯
 
Col公司
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 22:26:05 | 显示全部楼层
没问题,上校,我只是想谈谈我将如何继续下去。
 
如果你想继续学习VBA,这里有相当多的人能够胜任这门语言——然而,我对它几乎一无所知。
 
如果你还有什么问题我可以帮你,尽管问
 
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 22:29:35 | 显示全部楼层
下面是一个非常基本的代码段,用于将文本作为文本、多行文字或属性引用。仍需要传输到Excel的代码。
 
  1. Sub GetTextData()
  2. Dim varPckPt As Variant
  3. Dim obj As AcadObject
  4. Dim varMatrix As Variant
  5. Dim lngContext As Long
  6. Dim strObjName As String
  7. Dim strText As String
  8.   On Error GoTo MissedPick
  9.   ThisDrawing.Utility.GetSubEntity obj, varPckPt, varMatrix, lngContext, "Select some text: "
  10.   On Error GoTo 0
  11.   strObjName = obj.ObjectName
  12.   Select Case strObjName
  13.   Case "AcDbMText"
  14.      Dim entMText As AcadMText
  15.      Set entMText = obj
  16.      strText = entMText.TextString
  17.      
  18.   Case "AcDbText"
  19.      Dim entText As AcadText
  20.      Set entText = obj
  21.      strText = entText.TextString
  22.      
  23.   Case "AcDbAttribute"
  24.      Dim entAtt As AcadAttributeReference
  25.      Set entAtt = obj
  26.      strText = entAtt.TextString
  27.      
  28.      Case Else
  29.      strText = "No text selected!"
  30.      
  31.   End Select
  32.   MsgBox strText
  33.   Exit Sub
  34. MissedPick:
  35. MsgBox "Missed Pick!"
  36. End Sub
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 22:34:06 | 显示全部楼层
如果我理解正确,进来的图纸根本不符合相同的标准,那么,如何判断选择集中的哪些实体是图纸编号、项目编号、版本等。。。每次都要提示。。。这很可能会导致错误。
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 22:37:50 | 显示全部楼层
我无法想象自动逻辑如何处理来自多个来源的图形。我的示例所做的唯一一点是允许选择各种实体类型,这些实体类型可能包含与图形注册表相关的文本。
 
代码将受益于可预测的序列和描述性提示,以帮助传输工作,但我不确定这种类型的过程是否能够避免操作员错误。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 09:09 , Processed in 0.471547 second(s), 72 queries .

© 2020-2025 乐筑天下

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