IF 函数取决于订单类型

IF function depending on Order Type

   Set SapGuiAuto = GetObject("SAPGUI")
   Set SapApp = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
   Set Connection = SapApp.Children(0)
End If
If Not IsObject(session) Then
   Set session = Connection.Children(0)
End If
If IsObject(WScript) Then
   WScript.ConnectObject session, "on"
   WScript.ConnectObject SapApp, "on"
End If

Dim SO_ref As String
Dim PO_order As String
Dim ship_cond As String
Dim antal As Integer
Dim i As Integer

antal = Range("F8").Value

Range("E11:E40").Clear

If OPT_Cust1.Value = True Then 
    SO_ref = Range("F2").Value
    PO_order = Range("G2").Value
    ship_cond = Range("H2").Value
    Else
End If

If OPT_Cust2.Value = True Then 
    SO_ref = Range("F3").Value
    PO_order = Range("G3").Value
    ship_cond = Range("H3").Value
End If

If Cust3.Value = True Then 
    SO_ref = Range("F4").Value
    PO_order = Range("G4").Value
    ship_cond = Range("H4").Value
End If

If Cust4.Value = True Then
    SO_ref = Range("F5").Value
    PO_order = Range("G5").Value
    ship_cond = Range("H5").Value
End If

i = 1

Do While i < antal + 1

session.findById("wnd[0]").resizeWorkingPane 160, 38, False
'session.createSession
session.findById("wnd[0]/tbar[0]/okcd").Text = "va01"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtVBAK-AUART").Text = "ABC1" ' Order Type
session.findById("wnd[0]/usr/ctxtVBAK-VKORG").Text = "xxxx"
session.findById("wnd[0]/usr/ctxtVBAK-VTWEG").Text = "xx"
session.findById("wnd[0]/usr/ctxtVBAK-SPART").Text = "xx"
session.findById("wnd[0]/usr/ctxtVBAK-VKBUR").Text = "xxxx"
session.findById("wnd[0]/usr/ctxtVBAK-VKGRP").Text = "xxx" 

我得到了用于创建 SO“headers”的脚本。目前它工作正常,但我需要再添加一位订单类型不同的客户。 如果选择了 Cust4,那么订单类型应该是 ABC2,否则它应该总是选择 ABC1。

如何将此功能添加到脚本中?

只需添加“订单类型”变量并将其设置为您的 SAP scipt 中的每个客户。

If Cust4.Value = True Then
    SO_ref = Range("F5").Value
    PO_order = Range("G5").Value
    ship_cond = Range("H5").Value
    Type = "ABCD2"
End If

session.findById("wnd[0]/usr/ctxtVBAK-AUART").Text = Type ' Order Type

希望对您有所帮助。 祝你有美好的一天:).

请尝试下一种方法:

Dim boolType2 as Boolean

'...your existing code
If Cust4.Value = True Then
    boolType2 = True
    SO_ref = Range("F5").Value
    PO_order = Range("G5").Value
    ship_cond = Range("H5").Value
End If
'...your existing code
session.findById("wnd[0]/usr/ctxtVBAK-AUART").Text = _
                    IIf(boolType2 = True, "ABC2", "ABC1")
'...your existing code

如有必要,您可以为许多其他类型创建此类布尔变量...IIf 支持叠层函数。

已编辑:

如果您上面使用的控件是复选框,则您的代码必须检查是否只选中其中一个。否则,代码将采用最后一个(打勾的)的值...

如果复选框是 ActiveX 类型,您可以使用它们中的每一个 Change 事件,以取消选中其他复选框。如果没有,请尝试以下一种方式调整您的代码,这将做同样的事情,但不太优雅(根据我的口味)...

If OPT_Cust1.Value = True Then
    If OPT_Cust2.Value = True Or _
           Cust3.Value = True Or _
           Cust4.Value = True Then _
        MsgBox "Another check box is also ticked!": Exit Sub
        
    SO_ref = Range("F2").Value
    PO_order = Range("G2").Value
    ship_cond = Range("H2").Value
ElseIf OPT_Cust2.Value = True Then
    If Cust3.Value = True Or Cust4.Value = True Then _
        MsgBox "Another check box is also ticked!": Exit Sub
        
    SO_ref = Range("F3").Value
    PO_order = Range("G3").Value
    ship_cond = Range("H3").Value
ElseIf Cust3.Value = True Then
    If Cust4.Value = True Then _
        MsgBox "Cust4 check box is also ticked!": Exit Sub
        
    SO_ref = Range("F4").Value
    PO_order = Range("G4").Value
    ship_cond = Range("H4").Value
ElseIf Cust4.Value = True Then
    boolType2 = True
    SO_ref = Range("F5").Value
    PO_order = Range("G5").Value
    ship_cond = Range("H5").Value
End If