none
VBA function 如何回傳 collection RRS feed

  • 問題

  • 請問於 VBA 中,

    我要如何回傳一個collection

     

    function A() as collection
      .....
      .....
    end function

    --------------------------
    function mainX()
        dim p as collection
        p=   A()
       
    'do something  P
       
    end function

     

     

    2010年7月6日 上午 01:51

解答

  • 簡要範例:

    Function ReturnCollection() As Collection
      Dim rtnCol As New Collection
      rtnCol.Add "A"
      rtnCol.Add "B"
      Set ReturnCollection = rtnCol
    End Function
    
    Sub TestCollection()
      Dim testCol As Collection
      Set testCol = ReturnCollection
      For i = 1 To testCol.Count
        Debug.Print testCol.Item(i)
      Next
    End Sub
    
    

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 Lolota Lee 2010年7月12日 上午 01:52
    2010年7月9日 下午 02:32

所有回覆

  • 1) 請問您有參考VBA.Collection嗎?

    2) 將

    function A() as collection
      .....
      .....
    end function

    改成:

    function A() as VBA.CollectionClass
      .....
      .....
    end function

    看看

    2010年7月6日 上午 02:33
  • VBA <> VBNET ,SET 不能省略。

    物件請用 SET xxx = xxx


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年7月6日 下午 02:15
  • 您好:

    我於EXCEL 中建一個 CEmployee  CLASS

    Private pName As String
    Private pAddress As String
    Private pSalary As Double

    Public Property Get Name() As String
        Name = pName
    End Property

    Public Property Let Name(value As String)
        pName = value
    End Property

    '---------------------------

    Public Property Get Address() As String
        Addrss = pAddrss
    End Property
    Public Property Let Address(value As String)
        pAddrss = value
    End Property

    '-------------------------------------
    Public Property Get Salary() As Double
        Salary = pSalary
    End Property
    Public Property Let Salary(value As Double)
        If value > 0 Then
              pSalary = value
        Else
            ' appropriate error code here
        End If
    End Property

    =================================

    Function collection_mail() As VBA.Collection
       
        Dim Emps As Collection
        Dim Emp As CEmployee

        Set Emps = New Collection

        With ThisWorkbook.Sheets(sh_TB_mail)

             For r = 2 To .UsedRange.Rows.Count
                Set Emp = New CEmployee

                    Emp.Name = .Cells(r, 1)
                    Emp.Address = .Cells(r, 2)

                Emps.Add Emp

             Next '---

         End With

         collection_mail = Emps
        
       
    End Function

    ==========================

    Function Ds()

        Dim EmpX As Object

        Call collection_mail(EmpX)

    End Function

    結果 卻出現 引數不為選擇性(optional)

    2010年7月7日 上午 12:51
  • Function Ds()
    
        Dim EmpX As VBA.Collection
    
        Set EmpX = collection_mail
    
    End Function

    2010年7月7日 上午 01:20
  • 您好:

    ㄧ樣是 引數不為選擇性(optional)  錯誤

    2010年7月7日 上午 05:20
  • 出現錯誤訊息後,被黃色標記的是哪行?那才是重點。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年7月7日 下午 12:53
  • 您好:

    是這一行

    Function collection_mail() As VBA.Collection

    2010年7月8日 上午 12:24
  • 因為您的函數宣告成沒有參數:

    Function collection_mail() As VBA.Collection

    End Function

    所呼叫時不能傳入參數, 這一行:

    Call collection_mail(EmpX)

    必須改成:

    Call collection_mail()

    2010年7月8日 上午 04:05
  • 您好:

    不好意思m那是之前的CODE

    現在已經改為

    Function Ds()


        Dim EmpX As VBA.Collection

        Set EmpX = collection_mail()

     或 call collection_mail()

    End Function

     

    仍舊不行?

     

    2010年7月8日 上午 04:27
  • 請解釋「仍舊不行」。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年7月8日 下午 02:09
  • 您好:

    仍舊卡在

    Function collection_mail() As VBA.Collection

    引數不為選擇性(optional)  錯誤

    2010年7月9日 上午 12:23
  • 把 VBA. 拿掉。

    Collection 是內建類別。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年7月9日 下午 02:29
  • 簡要範例:

    Function ReturnCollection() As Collection
      Dim rtnCol As New Collection
      rtnCol.Add "A"
      rtnCol.Add "B"
      Set ReturnCollection = rtnCol
    End Function
    
    Sub TestCollection()
      Dim testCol As Collection
      Set testCol = ReturnCollection
      For i = 1 To testCol.Count
        Debug.Print testCol.Item(i)
      Next
    End Sub
    
    

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 Lolota Lee 2010年7月12日 上午 01:52
    2010年7月9日 下午 02:32