74023


VBAでクラスを自作しました。  
`test Module`の`test`メソッド実行時に、`GetSheetObjs`メソッドの戻り値をセットする行`Set GetSheetObjs =
sheets`部分で、`sheets`が選択され色が反転した状態になりコンパイルエラーが発生します。

Class1

[code]

    Option Explicit
        
        Public Sub test()
            Dim sheetName_excluded As String
            
            Dim sheetObjs As Object
            Set sheetObjs = GetSheetObjs
        End Sub
        
        'ファイルからシートオブジェクトを読み込みます。
        Private Function GetSheetObjs() As Object
            '結果シートを格納する配列変数
            Dim sheets() As Object
            
            ' Worksheets を For Next でループする
            Dim i As Integer
            For i = 1 To Worksheets.Count
                Dim ws As Worksheet
                Set ws = Worksheets(i)
        
                ReDim sheets(i)
                Set sheets(i) = ws
            Next
            
            '戻り値をセット
            Set GetSheetObjs = sheets
        End Function
    
[/code]

test Module

[code]

    Option Explicit
    
    Sub test()
      Dim cls1 As Class1: Set cls1 = New Class1
      Call cls1.test
    End Sub
    
[/code]

試したこと  
・`Me.GetSheetObjs`としましたが別のエラーが出て、これではないなとおもいました。  
・`Dim sheetObjs As Object`の部分を`Dim sheetObjs() As
Object`としましたが、別のコンパイルエラー：配列には割り当てられません。と出ました。


CC BY-SA 4.0
2021-02-15T13:53:18.050
74020
2021-02-15T15:31:31.657
43941
question
vba
VBA: オブジェクト配列を変数に設定する際、「コンパイルエラー: オブジェクトが必要です。」となる。

[code]

    Public Sub test()
        Dim sheetName_excluded As String
        Dim sheetObjs() As Object
            
        sheetObjs = GetSheetObjs
        
    End Sub
    
[/code]

[code]

    'ファイルからシートオブジェクトを読み込みます。
    Private Function GetSheetObjs() As Object()
        '結果シートを格納する配列変数
        Dim sheets() As Object
        
        ' Worksheets を For Next でループする
        Dim i As Integer
        For i = 1 To Worksheets.Count
            Dim ws As Worksheet
            Set ws = Worksheets(i)
    
            ReDim sheets(i - 1)
            Set sheets(i - 1) = ws
        Next
        
        '戻り値をセット
        GetSheetObjs = sheets
        
    End Function
    
[/code]

参考：[VBAで配列を引数・戻り値にする方法](https://qiita.com/ryosuke0825/items/93eb8a284eb5dba59f29)


CC BY-SA 4.0
2021-02-15T14:46:06.470
74021
2021-02-15T14:46:06.470
39819
74020
answer


配列はオブジェクトではないです。  
オブジェクトの配列でも、やはり配列です。

[code]

    Public Sub test()
        Dim sheetName_excluded As String
        Dim sheetObjs() As Object
    
        sheetObjs = GetSheetObjs
    
        '配列の中身の確認
        Dim i As Long
        For i = 1 To UBound(sheetObjs)
            Debug.Print sheetObjs(i).Name
        Next
        
    End Sub
    
    'ファイルからシートオブジェクトを読み込みます。
    Private Function GetSheetObjs() As Object()
    '結果シートを格納する配列変数
        Dim sheets() As Object
    
        ' Worksheets を For Next でループする
        Dim i As Integer
        For i = 1 To Worksheets.Count
            Dim ws As Worksheet
            Set ws = Worksheets(i)
    
            ReDim Preserve sheets(i) 'Preserveがないと中身が破棄される。
            Set sheets(i) = ws
    
        Next
    
        '戻り値をセット
        GetSheetObjs = sheets
    End Function
    
[/code]


CC BY-SA 4.0
2021-02-15T15:31:31.657
74023
2021-02-15T15:31:31.657
42240
74020
answer