VBA AutoCAD命令行变量
嗨,我目前正在使用VBA编写一个小程序。我正在处理的程序部分是修改图形边框。我在网上找到了一个Lisp文件,它通过查找和替换变量发挥了神奇的作用,但我似乎无法使用Send命令使其发挥作用
lisp要求键入要替换的内容,然后键入要替换的内容。
我似乎找不到将变量传递到命令行的方法,以便它将替换输入的内容
这是我的示例代码:
---------------------------------------------------
Sub RENAME_BORDER()
[左对齐][颜色=#666666][大小=14px]错误下一步继续
Dim acadCmd作为字符串
将客户端设置为字符串
将位置变暗为字符串
[左对齐][颜色=#666666][大小=14px]客户端=纸张(1)。范围(“N”和20)。价值
位置=板材(1)。范围(“N”和22)。值
[左对齐][颜色=#666666][大小=14px]设置ACAD=GetObject(,“AutoCAD.Application”)
ACAD。可见=真
[左对齐][颜色=#666666][大小=14px]
acadCmd=“coa&############和客户端”
[左对齐][颜色=#666666][大小=14px]ACAD。ActiveDocument。SendCommand acadCmd和vbCr
[左对齐][颜色=#666666][大小=14px]
结束子
--------------------------
当您尝试该代码时,它运行命令,告诉lisp程序搜索#########,但然后我需要使用一个变量,例如N20或N22中的单元格值来替换所有这些#。
有人有什么建议吗? 您好
我不太明白你的意思,但如果你试图修改一种“公司模板”,你可以轻松地创建一个带有属性(客户、工作编号发布等)的块,并使用VBA进行修改。请参阅附加的Jpg图像
看起来您正在从excel运行此操作。所以读取单元格范围。我同意可以通过属性顺序或att标记名更容易地编辑块属性。还可以控制要更新的布局选项卡等。 很抱歉不清楚。
我附上了我们的边框和我正在使用的lisp程序的屏幕截图
在lisp程序中,我指定了要查看的块,即我们的边界。
所以要运行命令,您需要键入“coa”
然后它会请求您要替换的文本
它会要求您输入所需的新文本。
这是我无法完成的最后一部分。VBA将发送命令#'s,但我无法将e单元格值放入命令行以更改#'s
我将替换的所有文本中都会有不同数量的#'s,并且它们在多达60个图形中是相同的。
您好,谢谢您的解释,我想用一个包含所有信息的块作为属性,您可以很好地解决您的问题。
您可以创建VBA表单,其中需要更改文本,在此步骤后,程序将在图形内搜索图形信息标题栏,搜索要更改的属性(文本),然后解决您的问题。
块属性也可以通过直接双击图形内的块手动更改,您可以更改包含要更改的文本的属性。
给我寄一张空画,我会尽力更好地解释我的意思,而不是你能决定的。
当做 感谢您的回复
这只是我和另一个人正在开发的一个稍大的程序的一小部分。
很难尝试解释所有内容,但基本上工程师希望从列表中选择一些图纸,单击按钮,它会将文件复制到相关作业文件夹(已完成),整理图纸(已完成),并使用相关客户、位置、作业编号和日期更新所有边框(wip)
负责这个小项目的工程师坚持认为,尽管使用AutoCAD的内置查找和替换功能只需要一分钟,但他希望边界能够完成,。但是无法通过VBA使用该函数,这就是为什么我尝试使用lisp。
如果你能想出另一种方法,那我洗耳恭听
我附上了带边框的文件 您好,barakar42
看起来你们已经有了标题栏,所以一半的工作已经完成了。
还有几个问题:
1) “从列表中选择多个图形”列表可以是包含图形列表的文本文件吗?列表当前在excel文件中?我这样问是因为在程序内部,您可以显示一个“组合框”,其中包含要应用的文件列表图形,因此可以轻松管理源代码,此外,您可以避免将相同的“图形编号”双重分配给不同的图形。
2) 我在您的图形中看到几个“布局”或“图纸空间”,是否要为内部图形指定相同的布局名称?。
我将准备一个简单的VBA代码,向您展示如何快速解决问题。
再见 关于第1点。每个可能的图纸都有一个列表,每个图纸都有自己独特的图纸标题和编号,工程师只需在每个图纸编号旁边打勾即可选择。不可能复制图纸
2.我们只有一个dwg文件,其中有多个布局选项卡,所有内容都在模型空间中绘制。边框位于图纸空间上,带有显示正确图形的视口。
只有哈希标记需要替换为excel工作表上的某些值,它们在每个布局选项卡上都是相同的。 您好,barakar42,
下面是一些解决问题的部分代码
下面的代码是在Excel开发区内编写的。
作为第二个问题,我看到您有一些重复的“标题栏”属性,如左上角内的图纸编号。这不是一个好主意,您可以将左上角的图形编号指示作为一个新属性轻松管理,即与放置在右下图形部分的图形编号相同。
问题属性相同
如何管理图形:
例如:
您有一个图纸列表,使用excel,您可以在布局之前设置您想在哪里应用有关客户的excel信息等等。
您可以在Excel命令栏中添加一个按钮,调用下面的宏,该宏将传输cad图形上的信息。
变量Attributelist它是一个包含所有属性标记、提示和实际值的数组。
每个标签都位于具有属性的阵列内,请参见下图:
属性数组0
因此,您将有一个TAGSTRING,它是属性标记,TEXTSTRING是值。
通过这种方式,您可以使用AttributeList(0)修改值。TextString=“EXCEL行或单元格值”。其他属性(客户端或DWG编号)相同
上述句子可以添加到显示为“”的地方
嗨,希望这能给你更多帮助。
如果你需要更多的澄清,请告诉我
Sub RENAME_BORDER()
Dim client As String
Dim location As String
Dim acadApp As Object
Dim acadDoc As Object
Dim MyMag As Double
client = Sheets(1).Range("N" & 20).Value
location = Sheets(1).Range("N" & 22).Value
Bname = "TITLE BLOCK"
On Error Resume Next
'Check if AutoCAD application is open. If is not opened create a new instance and make it visible.
Set acadApp = GetObject(, "AutoCAD.Application")
Set acadDoc = acadApp.ActiveDocument
If acadApp Is Nothing Then
Set acadApp = CreateObject("AutoCAD.Application")
acadApp.Visible = True
End If
acadApp.Visible = True
Set NewoBlock = acadDoc.ActiveLayout.Block
For iCount = 0 To NewoBlock.Count - 1
Set oEnt = NewoBlock.Item(iCount)
If TypeOf oEnt Is AcadBlockReference Then
Set NewoblkRef = oEnt
If UCase(NewoblkRef.Name) = UCase(Bname) Then
If NewoblkRef.HasAttributes = True Then
AttributeList = NewoblkRef.GetAttributes
''' <do something with this block here >
Exit For
Else
bCount = bCount + 1
End If
End If
End If
Next iCount
End Sub 嗨,彼得
谢谢你的代码。不过,我有几个问题需要解决
它是否需要首先为所有可能的块设置所有可能的属性,然后检查并更改值?
页:
[1]
2