2014-03-31 31 views
1

我想知道如何訪問由函數返回的數組值。 據我所知,返回的值應該有相同的函數名稱。訪問由VBA宏函數返回的數組

Function PathFinder(sheet1 As String, word1 As String) As Integer() 
Dim rng As Range 
Dim rngFound As Range 
Dim temp(1, 2) 

Set rng = Sheets(sheet1).Range("A:D") 
Set rngFound = rng.Find(word1, LookAt:=xlWhole) 

If rngFound Is Nothing Then 
    MsgBox "not found" 
Else: 
    temp(1, 1) = rngFound.Row 
    temp(1, 2) = rngFound.Column 

    PathFinder = temp 
End If 

End Function 

這已經完成,我沒有找到如何訪問到值「探路者(1,1)」和「探路者(1,2)」

預先感謝您爲您的幫助

回答

0

該函數返回數組,因此:

Dim arr() as Integer 
arr = PathFinder("sheet","word") 

Debug.Print arr(1,1) 
Debug.Print arr(1,2)  

我建議刪除2維數組(臨時):

Function PathFinder(sheet1 As String, word1 As String) As Integer() 
Dim rng As Range 
Dim rngFound As Range 
Dim temp(2) As Integer 

Set rng = Sheets(sheet1).Range("A:D") 
Set rngFound = rng.Find(word1, LookAt:=xlWhole) 

If rngFound Is Nothing Then 
    MsgBox "not found" 
Else: 
    temp(1) = rngFound.Row 
    temp(2) = rngFound.Column 
End If 

PathFinder = temp 

End Function 

Public Sub Test() 
    Dim arr() As Integer 
    arr = PathFinder("sheet1", "1word") 

    If arr(1) = 0 Then 
     Debug.Print "not found" 
    Else 
     Debug.Print arr(1) 
     Debug.Print arr(2) 
    End If 
End Sub 
+0

1)它不工作 - 它給你_compile error_ on line'PathFinder = temp',因爲'Dim temp(2)'是變體數組,'PathFinder'返回'Integer'數組2),如果沒有發現,'Debug.Print arr(1)'給你_runtime error_ –

+0

I已經改變了一些代碼。它現在有效 – Kozyr

0

我會做這一個:

Function PathFinder(sheet1 As String, word1 As String) As Long() 
    Dim rng As Range 
    Dim rngFound As Range 
    Dim temp(1, 2) As Long 

    Set rng = Sheets(sheet1).Range("A:D") 
    Set rngFound = rng.Find(word1, LookAt:=xlWhole) 

    If rngFound Is Nothing Then 
     MsgBox "not found" 
    Else 
     temp(1, 1) = rngFound.Row 
     temp(1, 2) = rngFound.Column 
    End If 
    PathFinder = temp 
End Function 

Sub test() 
    Dim res() As Long 

    res = PathFinder("Sheet1", "A") 
    MsgBox "Row:" & res(1, 1) & " Column: " & res(1, 2) 
End Sub 

另外請注意,我已經略有改變您的PathFinder功能。

  • 我已將PathFinder = temp移至末尾。原因很簡單:如果您的版本行MsgBox "Row:" & res(1, 1) & " Column: " & res(1, 2)中找不到任何內容會觸發錯誤,但在我的版本中,如果找不到任何內容,則會得到「幻數」,即對行和列返回0
  • 我已經改變了返回類型從Integer()Long()因爲Integer最大值僅爲32768,有時你可以得到溢出錯誤(因爲rngFound.Row可能比32768更大)。