barakar42 发表于 2022-7-6 21:41:42

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中的单元格值来替换所有这些#。

有人有什么建议吗?

PeterPan9720 发表于 2022-7-6 21:46:57

您好
我不太明白你的意思,但如果你试图修改一种“公司模板”,你可以轻松地创建一个带有属性(客户、工作编号发布等)的块,并使用VBA进行修改。请参阅附加的Jpg图像

BIGAL 发表于 2022-7-6 21:51:06

看起来您正在从excel运行此操作。所以读取单元格范围。我同意可以通过属性顺序或att标记名更容易地编辑块属性。还可以控制要更新的布局选项卡等。

barakar42 发表于 2022-7-6 21:51:34

很抱歉不清楚。

我附上了我们的边框和我正在使用的lisp程序的屏幕截图

在lisp程序中,我指定了要查看的块,即我们的边界。

所以要运行命令,您需要键入“coa”
然后它会请求您要替换的文本
它会要求您输入所需的新文本。

这是我无法完成的最后一部分。VBA将发送命令#'s,但我无法将e单元格值放入命令行以更改#'s

我将替换的所有文本中都会有不同数量的#'s,并且它们在多达60个图形中是相同的。

PeterPan9720 发表于 2022-7-6 21:56:51

您好,谢谢您的解释,我想用一个包含所有信息的块作为属性,您可以很好地解决您的问题。
您可以创建VBA表单,其中需要更改文本,在此步骤后,程序将在图形内搜索图形信息标题栏,搜索要更改的属性(文本),然后解决您的问题。
块属性也可以通过直接双击图形内的块手动更改,您可以更改包含要更改的文本的属性。
给我寄一张空画,我会尽力更好地解释我的意思,而不是你能决定的。
 
当做

barakar42 发表于 2022-7-6 21:57:55

感谢您的回复
 
这只是我和另一个人正在开发的一个稍大的程序的一小部分。
 
很难尝试解释所有内容,但基本上工程师希望从列表中选择一些图纸,单击按钮,它会将文件复制到相关作业文件夹(已完成),整理图纸(已完成),并使用相关客户、位置、作业编号和日期更新所有边框(wip)
 
负责这个小项目的工程师坚持认为,尽管使用AutoCAD的内置查找和替换功能只需要一分钟,但他希望边界能够完成,。但是无法通过VBA使用该函数,这就是为什么我尝试使用lisp。 
 
如果你能想出另一种方法,那我洗耳恭听
 
我附上了带边框的文件

PeterPan9720 发表于 2022-7-6 22:02:06

您好,barakar42
看起来你们已经有了标题栏,所以一半的工作已经完成了。
还有几个问题:
1) “从列表中选择多个图形”列表可以是包含图形列表的文本文件吗?列表当前在excel文件中?我这样问是因为在程序内部,您可以显示一个“组合框”,其中包含要应用的文件列表图形,因此可以轻松管理源代码,此外,您可以避免将相同的“图形编号”双重分配给不同的图形。
 
2) 我在您的图形中看到几个“布局”或“图纸空间”,是否要为内部图形指定相同的布局名称?。
 
我将准备一个简单的VBA代码,向您展示如何快速解决问题。
 
再见

barakar42 发表于 2022-7-6 22:05:40

关于第1点。每个可能的图纸都有一个列表,每个图纸都有自己独特的图纸标题和编号,工程师只需在每个图纸编号旁边打勾即可选择。不可能复制图纸
 
2.我们只有一个dwg文件,其中有多个布局选项卡,所有内容都在模型空间中绘制。边框位于图纸空间上,带有显示正确图形的视口。
 
只有哈希标记需要替换为excel工作表上的某些值,它们在每个布局选项卡上都是相同的。

PeterPan9720 发表于 2022-7-6 22:07:52

您好,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

barakar42 发表于 2022-7-6 22:12:34

嗨,彼得
 
谢谢你的代码。不过,我有几个问题需要解决
 
它是否需要首先为所有可能的块设置所有可能的属性,然后检查并更改值? 
页: [1] 2
查看完整版本: VBA AutoCAD命令行变量