2017-08-01 91 views
0

我想寫一個宏,但它目前返回「不匹配錯誤」。不匹配錯誤哪裏不應該

當我拿出「ListSheets = SheetName」部分時,它工作正常,但當然不會輸出我在找的東西。

我不明白這個錯誤,因爲代碼行的兩邊都應該是字符串。

Function ListSheets() As String 

Dim i As Integer 
Dim k As Integer 
Dim sRow As Integer 
Dim mNum As Integer 
Dim sName() As String 
Dim SheetName() As String 
Dim Width As Integer 
Width = 8 


'initialize sheet name list 
sRow = LastRow("Category List", 1) 
mNum = Cells(sRow, 1) 

ReDim sName(1, sRow) 
ReDim SheetName(mNum) 

'copy sheet list 
For i = 2 To sRow 
    sName(0, i) = Cells(i, 1) 
    sName(1, i) = Cells(i, 1) & " - " & Cells(i, 2) 
Next i 

'transform list to good list 
k = 2 
For i = 1 To mNum 
    If IsNumeric(sName(0, k)) Then 
     If i = sName(0, k) Then 
      SheetName(i) = sName(1, k) 
      k = k + 1 
     End If 
    End If 

    If i = 100 Then 
     k = k + 2 
    ElseIf i = 200 Then 
     k = k + 2 
    ElseIf i = 500 Then 
     k = k + 2 
    End If 

Next i 

ListSheets = SheetName 

End Function 
+2

'SheetName'是一個'String()'(一個數組)。 'ListSheets'是一個'String'。 – YowE3K

回答

2

將您的返回類型更改爲String()而不是String。

+0

不會工作(AFAIK)。對不起,是的,它會工作。但是你必須小心地將它返回的字符串數組標記爲'Dim x()As String:x = ListSheets()' – YowE3K

+0

解釋你爲什麼這麼想。它似乎是爲了返回一個數組。 –

+0

我的工作是,如果你試圖將它返回給一個顯式維數組,它不會工作,你必須將它返回到一個無維數組。即如果你知道它要返回一個包含5個元素的數組,你不能'Dim x(1 to 5)As String:x = ListSheets()',你必須將它返回爲一個聲明爲Dim的數組x()As String'。 (或者我想你可以訪問特定的元素,例如'MsgBox ListSheets()(4)'。) – YowE3K