标题:如何用用VB编写程序批量修改CAD中的文字
只看楼主
xingming022
Rank: 1
等 级:新手上路
帖 子:103
专家分:9
注 册:2015-1-26
结帖率:50%
已结贴  问题点数:20 回复次数:4 
如何用用VB编写程序批量修改CAD中的文字
下面是我自己查的一段代码,但总是运行出错。  
  Do While fileName <> ""
        ' 打开CAD文件
        Dim acadDoc As AcadDocument
        Set acadDoc = Application.Documents.Open(folderPath & fileName) 'ThisDrawing.Application.Documents.Open(folderPath & fileName)
        
        ' 选择所有文字对象
        Dim selSet As AcadSelectionSet
        Set selSet = acadDoc.SelectionSets.Add("MySelectionSet")
        selSet.Select acSelectionSetAll, , , Array("", "", "", "*Text")''''运行到这里总是出错。运行到这里总是出错。运行到这里总是出错。
        
        ' 遍历选中的文字对象
        Dim objText As AcadText
        For Each objText In selSet
            ' 如果找到指定的文字
            If InStr(1, objText.TextString, oldText, vbTextCompare) > 0 Then
                ' 替换文字
                objText.TextString = Replace(objText.TextString, oldText, newText, , , vbTextCompare)
               
                ' 增加计数器
                counter = counter + 1
            End If
        Next
        
        ' 清除选择集
        selSet.Delete
        
        ' 保存并关闭CAD文件
        acadDoc.Save
        acadDoc.Close
        
        ' 进入下一个DWG文件
        fileName = Dir()
    Loop
搜索更多相关主题的帖子: 出错 文件 文字 CAD 运行 
2023-04-02 11:32
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:10 
这段代码中的错误可能是由于以下原因导致的:

缺少对AutoCAD的引用:在VB中使用AutoCAD对象需要先添加对AutoCAD的引用。可以在VB的“工具”菜单中选择“引用”,然后勾选AutoCAD的相关选项。

选择集中没有文字对象:如果CAD文件中没有文字对象,那么选择集中就不会有任何对象。在这种情况下,遍历选择集时会出现错误。

选择集中包含非文字对象:如果选择集中包含非文字对象,那么遍历选择集时会出现错误。可以在选择对象时指定对象类型,例如:selSet.Select acSelectionSetAll, , , Array("", "", "", "AcDbText")。

oldText或newText为空:如果oldText或newText为空,那么在替换文字时会出现错误。可以在替换文字之前先检查oldText和newText是否为空。


下面是一份修改后的代码,可以尝试运行一下:
Sub ReplaceTextInCAD()
    Dim folderPath As String
    folderPath = "C:\CAD Files\" 'CAD文件所在的文件夹路径
   
    Dim oldText As String
    oldText = "Old Text" '需要替换的文字
   
    Dim newText As String
    newText = "New Text" '替换后的文字
   
    Dim counter As Integer
    counter = 0 '计数器,记录替换的文字数量
   
    Dim fileName As String
    fileName = Dir(folderPath & "*.dwg") '获取文件夹中的DWG文件
   
    Do While fileName <> ""
        ' 打开CAD文件
        Dim acadDoc As AcadDocument
        Set acadDoc = ThisDrawing.Application.Documents.Open(folderPath & fileName)
        
        ' 选择所有文字对象
        Dim selSet As AcadSelectionSet
        Set selSet = acadDoc.SelectionSets.Add("MySelectionSet")
        selSet.Select acSelectionSetAll, , , Array("", "", "", "AcDbText")
        
        ' 遍历选中的文字对象
        Dim objText As AcadText
        For Each objText In selSet
            ' 如果找到指定的文字
            If InStr(1, objText.TextString, oldText, vbTextCompare) > 0 Then
                ' 替换文字
                objText.TextString = Replace(objText.TextString, oldText, newText, , , vbTextCompare)
               
                ' 增加计数器
                counter = counter + 1
            End If
        Next
        
        ' 清除选择集
        selSet.Delete
        
        ' 保存并关闭CAD文件
        acadDoc.Save
        acadDoc.Close
        
        ' 进入下一个DWG文件
        fileName = Dir()
    Loop
   
    ' 显示替换的文字数量
    MsgBox "共替换了 " & counter & " 个文字。"
End Sub

注意,这段代码仅能替换DWG文件中的文字,不能替换DWT、DWS等文件中的文字。如果需要替换其他类型的CAD文件中的文字,还需要进行相应的修改。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2023-04-03 19:06
xingming022
Rank: 1
等 级:新手上路
帖 子:103
专家分:9
注 册:2015-1-26
得分:0 
回复 2楼 yuma
也还是在我原来的位置那里出错,显示
参数Filter type   or   FilterData无效。
2023-04-06 09:30
东海ECS
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:Python
等 级:版主
威 望:19
帖 子:376
专家分:1454
注 册:2023-1-24
得分:10 
这段代码可能是在AutoCAD VBA中编写的,需要先引入AutoCAD的COM组件才能使用。如果你是在VB环境中运行这段代码,可能会因为无法识别AcadDocument、AcadSelectionSet等类型而报错。
如果你想在VB环境中操作AutoCAD文件,可以使用AutoCAD ActiveX控件。下面是一个简单的例子:


在VB项目中选择“项目”菜单,然后选择“引用”。

在弹出的“引用”对话框中,找到“AutoCAD [version] Type Library”(其中[version]表示你安装的AutoCAD版本号),选中它并点击“确定”按钮。

在VB代码中,使用CreateObject函数创建AutoCAD应用程序对象,并打开指定的DWG文件,如下所示:

程序代码:
Dim acadApp As Object
Set acadApp = CreateObject("AutoCAD.Application")
Dim acadDoc As Object
Set acadDoc = acadApp.Documents.Open("D:\test.dwg")

这样就可以打开指定的DWG文件,并获取到AutoCAD应用程序对象和文档对象,以便进行后续的操作。
注意:如果你没有安装AutoCAD,也无法在VB环境中使用AutoCAD的COM组件或ActiveX控件。

会当凌绝顶,一览众山小.
2023-04-07 20:56
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
以下是引用东海ECS在2023-4-7 20:56:23的发言:

这段代码可能是在AutoCAD VBA中编写的,需要先引入AutoCAD的COM组件才能使用。如果你是在VB环境中运行这段代码,可能会因为无法识别AcadDocument、AcadSelectionSet等类型而报错。
如果你想在VB环境中操作AutoCAD文件,可以使用AutoCAD ActiveX控件。下面是一个简单的例子:


在VB项目中选择“项目”菜单,然后选择“引用”。

在弹出的“引用”对话框中,找到“AutoCAD [version] Type Library”(其中[version]表示你安装的AutoCAD版本号),选中它并点击“确定”按钮。

在VB代码中,使用CreateObject函数创建AutoCAD应用程序对象,并打开指定的DWG文件,如下所示:


Dim acadApp As Object
Set acadApp = CreateObject("AutoCAD.Application")
Dim acadDoc As Object
Set acadDoc = acadApp.Documents.Open("D:\test.dwg")

这样就可以打开指定的DWG文件,并获取到AutoCAD应用程序对象和文档对象,以便进行后续的操作。
注意:如果你没有安装AutoCAD,也无法在VB环境中使用AutoCAD的COM组件或ActiveX控件。



如果只是打开文件,可以用这条命令

autocad.exe d:\test.dwg

注意写完整autocad.exe的路径,即可。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2023-04-09 19:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511769-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.054922 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved