将函数的参数作为数组插入

时间:2017-06-08 14:53:22

标签: vba

我有以下两个数组:

Sub ArrayLoop(array1, array2)

 Dim Students() As Variant
 Set myDocument = ActivePresentation.Slides(1)

 ENG1 = Array(423.5482, 425.6641, 425.6641)
 ENG2 = Array(224.0202, 222.5737, 222.5737)

 GER1 = Array(454.692, 454.0753, 454.0753)  
 GER2 = Array(220.8373, 222.2446, 224.3517)

 For i = 0 To 40

   x1 = parameter1(i)
   x2 = parameter2(i)

   y1 = parameter1(i + 1)
   y2 = parameter2(i + 1)

   With myDocument.Shapes.AddLine(BeginX:=x1, BeginY:=x2, EndX:=y1, EndY:=y2).Line
    .DashStyle = msoLineDashDotDot
    .ForeColor.RGB = RGB(50, 0, 128)
   End With

  Next i
End Sub

我现在基本上想要做的就是触发宏" ArrayLoop"使用两个参数然后应该使用该数组。 S0

ArrayLoop(ENG1, ENG2)

应该使用数组的ENG1和ENG2

但是当我这样做时

Call ArrayLoop(ENG1, ENG2)

我收到的错误13表示,这些项目无法比较。关于我应该如何运作的任何想法?

1 个答案:

答案 0 :(得分:1)

ENG1ENG2需要作为参数传递给sub。在您的代码中,它们被定义为局部变量。在使用参数调用例程时,需要将这些参数定义为其他并将传递到例程。

Sub ArrayLoop(array1, array2)
  Dim i As Long
  For i = LBound(array1) To UBound(array1) - 1
    With ActivePresentation.Slides(1).Shapes.AddLine(BeginX:=array1(i), BeginY:=array2(i), EndX:=array1(i + 1), EndY:=array2(i + 1)).Line
      .DashStyle = msoLineDashDotDot
      .ForeColor.RGB = RGB(50, 0, 128)
    End With
  Next
End Sub

现在,您可以在此处定义参数并调用例程:

Sub TestArrayLoop()
  Dim ENG1, ENG2, GER1, GER2
  ENG1 = Array(423.5482, 425.6641, 425.6641)
  ENG2 = Array(224.0202, 222.5737, 222.5737)

  GER1 = Array(454.692, 454.0753, 454.0753)
  GER2 = Array(220.8373, 222.2446, 224.3517)

  ArrayLoop ENG1, ENG2  ' <----- invoke the routine and pass it the parameters
End Sub