簡體   English   中英

有沒有辦法使用 python 自動創建 VBA 宏文件?

[英]Is there a way to use python to automate the creation of VBA macro files?

作為一些工作流程優化的一部分,我想將 map 的大量Solidworks功能添加到熱鍵中。 該程序本身具有為熱鍵分配功能的能力,但它只是整個命令集的一小部分。 rest 可以通過一種解決方法分配給熱鍵,其中創建一個運行 function 的宏並將該宏分配給熱鍵。

在 Solidworks 中創建宏的方法有兩種:

  1. 在 Solidworks 中可以記錄一系列命令,然后將它們保存為 .swb 文件。 運行該宏會重復記錄的命令。 (這種方法有問題,真的是命中注定)

  2. 可以使用 Microsoft Visual Basic for Applications 直接創建宏,Solidworks 將其用作宏編輯器。 生成的文件又是一個 .swb 文件,運行它會執行它調用的 Solidworks 函數。 這種方法是創建多個熱鍵的最簡單方法,因為我需要做的就是編輯一行代碼,我可以執行任何我想要的 function。

看起來是這樣的:

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 function 的行。

swApp.RunCommand swCommands_Leader_Add_Bent, ""

例如,將swCommands_Leader_Add_Bent更改為swCommands_Select_Midpoint現在會使代碼 select 成為直線或邊的中點。

使用該方法,我可以創建可以運行 Solidworks 的三千左右命令中的任何一個的宏。 問題是,這個過程有點乏味,為幾十或幾百個命令做這件事會很耗時。 我擁有所有 SolidWorks 功能的列表,非常理想,我想將該列表提供給一些 python 代碼,代碼使用列表中的 function 編輯swApp.RunCommand行,代碼 Z78E6221F6393D135668.准備好分配給熱鍵。

其他一些評論:

  • 如果我的術語不正確,我不確定 a.swb 文件是什么類型的文件,請原諒我。 我知道它們不是文本文件,因為在文本編輯器中打開它會導致胡說八道。 它們使用 Microsoft Visual Basic for Applications 7.1 進行編輯。 Solidworks 將它們稱為 SW VBA 宏。

  • 我不想從 python 運行宏或 VBA 代碼本身。 我已經完成了這項工作,但它對我的需求來說太慢了。 我想使用 python 來生成 VBA 文件。

  • 我四處搜索,但未能找到讓 python 編輯、寫入或生成 VBA 文件的方法。

  • 解決方案不必在 python 中,但這是我最熟悉的語言。 我對其他語言或方法持開放態度。

總之,我希望自動創建大量的 SW VBA 宏 (*.swb),你們可以提供任何指導或建議嗎?

如果我正確理解了您的問題,則以下內容應該有效(未經測試;!);

您可以創建一個 function 以將任何命令名稱替換為您提供的代碼,如下所示;

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_macro_0”、“my_solidworks_macro_1”等的文件,每個文件的命令名稱與您提供的列表不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM