【问题标题】:VBA: passing variables to sub() with custom typeVBA:使用自定义类型将变量传递给 sub()
【发布时间】:2017-01-25 15:49:26
【问题描述】:

我正在调用 sub() 但不断收到“未定义用户定义类型”错误。在尝试了将变量声明为数组的不同方法后无法弄清楚。希望有任何指导:

Public Type Whatever
    ppp As String
    qqq As Long
    rrr As Single
End Type




Sub isthisworking()
 Dim thisis() As Whatever
 Dim i As Long
 Dim athing As Long

 For i = 0 To 5
    With thisis(i)
        .ppp = i & "p"
        .qqq = i * 2
        .rrr = i ^ 3
    End With

 athing = 20

 beingcalled thisis(), athing

End Sub



Public Sub beingcalled(ByRef thisis() As Whatever, athing As Long)

 Dim cycles As Long

 cycles = UBound(thisis)

 For i = 0 To cycles - 1
    With thisis(i)
        Debug.Print i & ": " & .ppp & "," & .qqq & "," & .rrr
    End With
 Next


End Sub

【问题讨论】:

  • 一旦我正确标注了thisis,将Next添加到你的for循环中,并将调用beingcalled thisis(), athing更改为beingcalled thisis, athing,它就没有问题了。
  • 谢谢@Johncoleman。显然还没有在尺寸标注之上。或者剪切和粘贴技能!
  • 什么时候需要实际使用CALL语句?为什么调用函数需要使用 somefunction(var1, var2,....) 但对于 sub 括号被省略?是否需要它们?
  • @user110084 试试下面的代码

标签: arrays vba parameter-passing subroutine custom-data-type


【解决方案1】:

您的 For i = 0 To 5 缺少结束 Next i 语句。

你需要Redim你的thisis()数组的大小:

ReDim thisis(o To 5)

整个“isthisworking”子:

Sub isthisworking()

Dim thisis() As Whatever
Dim i As Long
Dim athing As Long

ReDim thisis(o To 5)

For i = 0 To 5
   With thisis(i)
       .ppp = i & "p"
       .qqq = i * 2
       .rrr = i ^ 3
   End With
Next i

athing = 20

beingcalled thisis(), athing    
' you can pass also thisis (without the brackets) gives the same result

End Sub

【讨论】:

  • 谢谢@ShaiRado。是的,我在复制和粘贴时不知何故跳过了 NEXT 行。在删除模块并插入新模块之前,我还遇到了无法识别自定义类型的问题。我不知道你可以在没有 () 的情况下调用 sub,比如被调用 (thesies(), athing)。我也总是在它之前加上 CALL。我可以用函数做同样的格式吗?
  • @ShaiRodo,Redim var(o 到 5),“o”是否使其保持不变?没有看到记录
  • 调用函数可以不同,特别是如果函数返回参数,Redim Preserve 是与 Redim 不同的方法
  • 抱歉对这些@ShaiRado一无所知。 Redim (o to 5) 和 Redim(5) 有什么区别?是否有理由实际使用 CALL 语句或使用没有 CALL 的子名称?
  • 您可以在此处了解RedimRedim Preserve 的区别:msdn.microsoft.com/en-us/library/w8k3cys2.aspx
猜你喜欢
  • 2013-05-14
  • 2019-09-04
  • 1970-01-01
  • 2019-11-07
  • 2018-02-22
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多