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

组合雕刻模式下P/N与S/N字段缺失问题求助

问题与代码排查

问题情况

设备支持单独雕刻和组合雕刻两种模式:

  • 单独雕刻时所有功能正常,P/N和S/N字段显示正常
  • 切换到组合雕刻模式时,P/N和S/N字段缺失,无法正常显示

我编写了以下代码尝试给字段添加前缀,但问题依旧:

'给物料号和序列号字段添加P/N和S/N前缀
Sub AddPrefixesToNumbers()
    '获取物料号对象
    Set moMatNumber = LaserMarker.Drawing.GetMOsByName("PDMATNR").Item(1)
    
    '获取序列号对象
    Set moSerialNumber = LaserMarker.Drawing.GetMOsByName("PDVAR9").Item(1)
    
    '检查物料号对象是否存在并添加前缀
    If Not moMatNumber Is Nothing Then
        Dim matText
        matText = moMatNumber.Text
        
        '仅当没有前缀时添加P/N
        If Not Left(matText, 4) = "P/N " Then
            moMatNumber.Text = "P/N " & matText
        End If
    End If
    
    '检查序列号对象是否存在并添加前缀
    If Not moSerialNumber Is Nothing Then
        Dim serText
        serText = moSerialNumber.Text
        
        '仅当没有前缀时添加S/N
        If Not Left(serText, 4) = "S/N " Then
            moSerialNumber.Text = "S/N " & serText
        End If
    End If
End Sub

可能原因与解决方向

  1. 对象名称不匹配:组合雕刻模式下,P/N、S/N字段的对象名称可能和单独模式不同,导致GetMOsByName找不到目标对象,需要确认组合模式下这两个字段的实际命名。
  2. 索引错误:硬写.Item(1)可能不对,组合模式下GetMOsByName可能返回多个对象,或者目标对象的索引不是1,建议遍历所有返回的对象进行处理。
  3. 执行时机问题:代码执行后,组合雕刻的后续逻辑可能覆盖了字段内容,需要调整代码执行时机,确保在参数加载完成后运行。
  4. 对象未正确获取:当前代码的Is Nothing判断可能失效,建议添加调试提示,确认是否真的获取到了目标对象。

调整后的代码示例

添加调试提示并遍历所有匹配对象,避免索引问题:

'给物料号和序列号字段添加P/N和S/N前缀
Sub AddPrefixesToNumbers()
    '获取所有物料号对象
    Dim matMOs As Object
    Set matMOs = LaserMarker.Drawing.GetMOsByName("PDMATNR")
    
    '检查是否存在物料号对象
    If matMOs.Count > 0 Then
        Dim moMatNumber As Object
        For Each moMatNumber In matMOs
            Dim matText As String
            matText = moMatNumber.Text
            
            '仅当没有前缀时添加P/N
            If Not Left(matText, 4) = "P/N " Then
                moMatNumber.Text = "P/N " & matText
            End If
        Next moMatNumber
    Else
        MsgBox "未找到PDMATNR对象" '调试用,确认对象是否存在
    End If
    
    '获取所有序列号对象
    Dim serMOs As Object
    Set serMOs = LaserMarker.Drawing.GetMOsByName("PDVAR9")
    
    '检查是否存在序列号对象
    If serMOs.Count > 0 Then
        Dim moSerialNumber As Object
        For Each moSerialNumber In serMOs
            Dim serText As String
            serText = moSerialNumber.Text
            
            '仅当没有前缀时添加S/N
            If Not Left(serText, 4) = "S/N " Then
                moSerialNumber.Text = "S/N " & serText
            End If
        Next moSerialNumber
    Else
        MsgBox "未找到PDVAR9对象" '调试用,确认对象是否存在
    End If
End Sub

内容的提问来源于stack exchange,提问作者Miloš Simonović

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:42:11