2013-07-02 63 views
1

我在VBA中編寫了一個方法,並收到了一個ByRef參數類型不匹配。在做了一些研究之後,我發現了一個快速修復 - 將我的值存儲在另一個變量中,然後將該新變量傳遞給我的方法。任何人都可以向我解釋瘋狂背後的方法嗎?在VBA中引發了什麼?爲什麼它不接受我的原始變量?ByRef arugement type mismatch VBA討論

上下文:

For Each excl In excelFiles 
    Dim temp As String 
    temp = excl 
    Call uploadExcelFile(temp, schema) 
Next excl 

方法中使用:

Private Sub uploadExcelFile(excelWb As String, schema As Worksheet) 

excelFiles是一個字符串數組。請讓我知道,如果你們想了解更多信息。興奮地瞭解這裏發生了什麼。

回答

3

即使您正在循環一個字符串數組,VBA for-each循環也需要一個變量作爲循環「counter」(在您的案例中爲excl)。

您可以使用

Call uploadExcelFile(Cstr(excl), schema)

,以避免中間temp變量。

+0

謝謝Tim!所以這意味着excl不再是一個String,而是每個循環所使用的一些奇怪的中間類型? –

+0

你是怎麼聲明不包括的?它應該被聲明爲Variant類型... –

+2

您不能在For Each循環中使用字符串,它必須是變體或對象。由於excl不能被聲明爲字符串,因此需要在字符串中明確地轉換該變體,以便您的方法可以理解並將其作爲字符串接受。 – Vikas