You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过宏自动点击Catia消息框及用户窗体按钮以连续运行宏

在CATIA中自动处理宏弹窗实现连续运行

完全可行,以下是几种实用方案:

方案1:直接修改原有宏(优先推荐)

如果能修改宏的源代码,最直接的方式是移除或条件化弹窗逻辑:

  • 对于MsgBox弹窗:添加开关参数控制是否显示弹窗。例如:
    Sub YourMacro(Optional silentMode As Boolean = False)
        ' 原有宏执行逻辑...
        
        If Not silentMode Then
            MsgBox "宏执行完成"
        End If
    End Sub
    
    调用时传入silentMode=True即可跳过弹窗。
  • 对于用户窗体(UserForm):直接执行窗体逻辑而不显示界面,或自动关闭窗体:
    Sub RunUserFormMacro()
        Dim frm As New UserForm1
        ' 执行窗体核心逻辑,不显示界面
        frm.ProcessingSub
        Unload frm
    End Sub
    

方案2:用VBA+Windows API模拟点击弹窗

如果无法修改原有宏,可借助Windows API查找CATIA弹窗并模拟点击按钮:

' 64位CATIA需保留PtrSafe,32位可移除
Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr
Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Const BM_CLICK = &HF5

Sub RunCATIAMacrosInSequence()
    ' 运行第一个宏
    CATIA.SystemService.ExecuteScript "C:\YourPath\Macro1.catvbs", "Module1", "Macro1"
    ' 等待弹窗加载(根据宏执行速度调整延时)
    Sleep 1000
    ClickCATIAPopup "提示", "确定" ' 替换为你的弹窗标题和按钮文本
    
    ' 运行第二个宏
    CATIA.SystemService.ExecuteScript "C:\YourPath\Macro2.catvbs", "Module1", "Macro2"
    Sleep 1000
    ClickCATIAPopup "操作成功", "确定"
    
    ' 继续添加后续宏...
End Sub

Sub ClickCATIAPopup(popupTitle As String, buttonText As String)
    Dim hwndPopup As LongPtr
    Dim hwndButton As LongPtr
    
    ' 查找指定标题的弹窗窗口
    hwndPopup = FindWindow(vbNullString, popupTitle)
    
    If hwndPopup <> 0 Then
        ' 查找弹窗中的目标按钮
        hwndButton = FindWindowEx(hwndPopup, 0, "Button", buttonText)
        If hwndButton <> 0 Then
            ' 模拟按钮点击
            SendMessage hwndButton, BM_CLICK, 0, 0
        End If
    End If
End Sub

注意事项:

  • 弹窗标题和按钮文本需与实际完全匹配(区分中英文和大小写)
  • 延时时间需根据宏的执行速度调整,避免弹窗未加载完成就执行点击
  • 32位CATIA使用时,需移除API声明中的PtrSafe关键字

方案3:处理CATIA用户窗体弹窗

如果弹窗是自定义UserForm,可通过CATIA对象模型访问并关闭:

Sub CloseCATIAUserForm()
    Dim frm As Object
    ' 遍历CATIA中的用户窗体
    For Each frm In CATIA.UserForms
        If frm.Caption = "自定义窗体标题" Then
            frm.Hide
            Unload frm
            Exit For
        End If
    Next
End Sub

在每个宏运行后调用此子程序即可自动关闭目标窗体。

内容的提问来源于stack exchange,提问作者charan tej

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 19:42:49