【问题标题】:How to return custom type from VBA function如何从 VBA 函数返回自定义类型
【发布时间】:2019-08-02 09:20:02
【问题描述】:

我想从 VBA 函数返回自定义类型。当我运行以下代码时,我收到错误“第 16 行错误 - 类型不匹配”。我真的不明白出了什么问题。

Type FullName
    FirstName As String
    LastName As String
End Type

Sub Main 
Dim fullName As FullName
fullName = GetName()

MsgBox fullName.FirstName &" "& fullName.LastName

End Sub

Function GetName() As FullName
    Dim temp As FullName
    temp.FirstName = "John"
    temp.LastName = "Doe"

    Set GetName = temp

End Function

【问题讨论】:

  • 你可以试试 [GetName = temp] 而不是 [Set GetName = temp]
  • 我试过了,结果一样
  • 我打开了一个新的 Excel,创建了一个新的模块,粘贴了您的代码,并检查了它是否失败。然后退出“设置”。它运行正常。
  • 好的,我在 Rumba 脚本引擎中运行它。所以也许这就是问题

标签: excel vba


【解决方案1】:

试试这个

Function GetName() As fullName
    Dim temp As fullName
    temp.FirstName = "John"
    temp.LastName = "Doe"

    With temp
        GetName.FirstName = .FirstName
        GetName.LastName = .LastName
    End With

End Function

但是GetName = temp 应该也可以工作

【讨论】:

  • 现在我得到“在线错误:20-GetName__.FirstName = .FirstName”。我在 Rumba 大型机模拟器的 Rumba 脚本引擎中运行此代码。但这只是使用 VBA 和一些额外的命令
  • 对不起,我没有 Rumba 脚本引擎,假设您在 excel 及其 vba 引擎中使用此代码,如标签所示。那就另当别论了。
【解决方案2】:

这就是我的工作方式,删除了函数中的Set()

Option Explicit

Type FullName

    FirstName As String
    LastName As String

End Type

Sub Main()

    Dim myFullName As FullName
    myFullName = GetName()
    Debug.Print myFullName.FirstName & " " & myFullName.LastName

End Sub

Function GetName() As FullName

    Dim temp As FullName
    temp.FirstName = "John"
    temp.LastName = "Doe"
    GetName = temp

End Function

引入myFullName,是为了区分FullName类型和同名变量。在 C# 中,我会使用 fullNameFullName,但在 VBA 中不支持这种“奢侈”。

【讨论】:

    【解决方案3】:

    请尝试一下

     Public Type FullName
    
       FirstName As String
       LastName As String
    
      End Type
    
    Function GetName() As FullName
    
       Dim temp As FullName
    
           temp.FirstName = "John"
           temp.LastName = "Doe"
    
           GetName = temp
    
     End Function
    

    【讨论】:

      猜你喜欢
      • 2011-01-03
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多