有没有办法使用python自动创建VBA宏文件?

2024-05-27 11:18:13 发布

您现在位置:Python中文网/ 问答频道 /正文

作为一些工作流优化的一部分,我想将大量Solidworks函数映射到热键。程序本身有能力将功能分配给热键,但它只是整个命令集的一小部分。其余部分可以通过一种变通方法分配给热键,该变通方法创建一个运行该函数的宏并将该宏分配给热键

在Solidworks中创建宏的方法有两种:

  1. 在Solidworks中,可以记录一系列命令,然后将它们保存为.swb文件。运行该宏会重复记录的命令。(这种方法有缺陷,真的命中或未命中)

  2. 可以使用Microsoft Visual Basic for Applications(Solidworks用作宏编辑器)直接创建宏。生成的文件也是一个.swb文件,运行它会执行它调用的Solidworks函数。这个方法是创建多个热键的最简单的方法,因为我只需要编辑一行代码,就可以执行我想要的任何函数

下面是它的样子:

Dim swApp As Object
Dim Part As Object

Sub main()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
swApp.RunCommand swCommands_Leader_Add_Bent, ""
End Sub

上面的示例宏(在VB中)向选定的引线添加折弯点。下一行是负责执行Solidworks功能的行

swApp.RunCommand swCommands_Leader_Add_Bent, ""

例如,将swCommands_Leader_Add_Bent更改为swCommands_Select_Midpoint现在使代码选择直线或边的中点

使用这种方法,我可以创建可以运行Solidworks三千个左右命令的宏。问题是,这个过程有点乏味,而对几十个或数百个命令执行这个过程将非常耗时。我有所有SolidWorks函数的列表,因此理想情况下,我希望将该列表提供给一些python代码,该代码使用列表中的函数编辑swApp.RunCommand行,以及该代码输出.swb文件,这些文件是准备分配给热键的宏

其他一些评论:

  • 我不确定.swb文件是什么类型的文件,所以如果我的术语不正确,请原谅。我知道它们不是文本文件,因为在文本编辑器中打开它会导致胡说八道。它们使用Microsoft Visual Basic for Applications 7.1进行编辑。Solidworks称之为SW VBA宏

  • 我不希望从python运行宏或VBA代码本身。我已经得到了工作,它太慢,我的需要。我想使用python生成VBA文件

  • 我四处搜索,没有找到一种方法可以让python编辑、写入或生成VBA文件

  • 解决方案不必使用python,但这是我最熟悉的语言。我对其他语言或方法持开放态度

总之,我希望自动创建大量SW VBA宏(*.swb),你们能提供任何指导或建议吗


Tags: 文件方法函数代码命令add编辑vba
1条回答
网友
1楼 · 发布于 2024-05-27 11:18:13

如果我正确理解了你的问题,下面的方法应该有效(未经测试!!)

您可以创建一个函数,将任何命令名替换为您提供的代码,如下所示

def macro_code_text(command_name):
    return f"""
Dim swApp As Object
Dim Part As Object

Sub main()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
swApp.RunCommand {command_name}, ""
End Sub
"""

..然后您可以创建一个包含所有命令名的列表

command_names = ['swCommands_Leader_Add_Bent', 'swCommands_Select_Midpoint']

..然后迭代列表,将生成的文本保存到扩展名为“.swb”的文件中

generic_file_name = 'my_solidworks_macro_'

for i, command_name in enumerate(command_names):
    with open(generic_file_name + str(i) + '.swb', 'w+') as file:
        file.write(macro_code_text(command_name))

…这将生成许多名为“my_solidworks\u macro\u 0”、“my_solidworks\u macro\u 1”等的文件。每个文件的命令名与您提供的列表不同

相关问题 更多 >

    热门问题