Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class 访问VBA类数组_Class_Vba_Service_Web_Module - Fatal编程技术网

Class 访问VBA类数组

Class 访问VBA类数组,class,vba,service,web,module,Class,Vba,Service,Web,Module,我试图使用一些类,将持有发票数据,我似乎无法让它工作。我只希望它将发票的详细信息保存在数组中。这是密码,也许有人能猜出来。 另外,我想让LineItems随机选取一些产品项,但还不知道如何做到这一点。我这样做是为了最终从ms access通过web服务发送数据 下面是struct_XOrder的其他代码: Public OrderNumber As String Public ClientShortName As String '"LineItems" is an array with el

我试图使用一些类,将持有发票数据,我似乎无法让它工作。我只希望它将发票的详细信息保存在数组中。这是密码,也许有人能猜出来。 另外,我想让LineItems随机选取一些产品项,但还不知道如何做到这一点。我这样做是为了最终从ms access通过web服务发送数据

下面是struct_XOrder的其他代码:

Public OrderNumber As String 
Public ClientShortName As String 
'"LineItems" is an array with elements defined as struct_LineItem
'See Complex Types: Arrays in Microsoft Office 2003 Web Services Toolkit Help
'for details on implementing arrays.
Public LineItems As Variant 
Public OrderError As String 
这是struct_行项目:

Public ProductSKU As String 
Public Qty As Long 
Public UnitPrice As Variant 
Public ItemComment As String 
Public ItemError As String
这是我的主要代码

Sub webservicetest()

Dim NewOrder As struct_XOrder
Dim LineItems(1 To 2) As Variant
Dim Xline(1 To 2) As Variant

Set Xline() = struct_LineItem

Set NewOrder = New struct_XOrder

Set NewOrder.LineItems() = New struct_LineItem
Set NewOrder.LineItems() = New Xline
'Xline = New struct_LineItem


Xline(1).ItemComment = "items" 
Xline(1).Qty = 10
NewOrder.LineItems() = Xline()


NewOrder.ClientShortName = "DemoClient"
NewOrder.OrderNumber = "12345"

'Xline(1).ItemComment = "item1"
'Xline(1).Qty = 5

Debug.Print NewOrder.ClientShortName
Debug.Print NewOrder.OrderNumber

'For i = LBound(Xline) To UBound(Xline): Debug.Print Xline(i): Next

'Debug.Print Xline(1).ItemComment
'Debug.Print Xline(1).Qty

End Sub

有关解释,请参见注释

在VBA中使用
Type
来创建结构。此外,您不需要使用
设置

此外,使用Option Explicit可以在使用VBA时要求变量声明,除非您想要噩梦

这些都可以放在同一个模块中



有关解释,请参见注释

在VBA中使用
Type
来创建结构。此外,您不需要使用
设置

此外,使用Option Explicit可以在使用VBA时要求变量声明,除非您想要噩梦

这些都可以放在同一个模块中



非常感谢。这更有意义。我会摆弄它,让它做我想做的事情。struct_xorder类模块被修改了,有没有办法让它保持“lineitems as variant”?它会导致错误@enderlandBTY网络服务位于,如果这有助于任何人更好地理解。非常感谢。这更有意义。我会摆弄它,让它做我想做的事情。struct_xorder类模块被修改了,有没有办法让它保持“lineitems as variant”?它会导致错误@enderlandBTY网站服务位于,如果这有助于任何人更好地理解。
'use this
Option Explicit

'VBA structs are defined like the following
'and do not need "new" (similar to other languages)
'when creating them

Type struct_LineItem
    ProductSKU As String
    Qty As Long
    UnitPrice As Variant
    ItemComment As String
    ItemError As String

End Type

Type struct_XOrder
    OrderNumber As String
    ClientShortName As String

    'make this more clear
    LineItems() As struct_LineItem
    OrderError As String
End Type


Sub webservicetest()

    Dim NewOrder As struct_XOrder
    Dim LineItems(1 To 2) As Variant
    Dim Xline(1 To 2) As struct_LineItem

    'you can't do this, you need to specify which element
    'in XLine you want to set
    'Set Xline() = struct_LineItem

    Dim myStruct As struct_LineItem
    Xline(1) = myStruct

    'you don't need "set"
    NewOrder.LineItems = Xline()

    'this won't update as if it's a reference, btw
    Xline(1).ItemComment = "items"
    Xline(1).Qty = 10
    NewOrder.LineItems = Xline()


    NewOrder.ClientShortName = "DemoClient"
    NewOrder.OrderNumber = "12345"

    Debug.Print NewOrder.ClientShortName
    Debug.Print NewOrder.OrderNumber

    'don't do ":" as this makes code unbearably not readable...
    'For i = LBound(Xline) To UBound(Xline): Debug.Print Xline(i): Next

    Dim i As Integer
    For i = 1 To UBound(NewOrder.LineItems)
        Debug.Print NewOrder.LineItems(i).ItemComment
    Next i

End Sub