2017-04-03 52 views
1

我想在我的if語句中調用函數。該函數被稱爲classyear,並且緊跟在if後面。我試圖通過時間表來查看每年屬於哪些課程。所以如果它以1結尾,它將被計數。有誰知道我會怎樣去調用這個函數?任何幫助表示讚賞如何調用if語句中的函數(vba)

Public Sub time() 
Dim rgTimeTable As Range, rgClass As Range, counter As Integer 

Set rgTimeTable = Range("B3, N11") 

For Each rgClass In rgTimeTable 
If rgClass.Value = classyear Then counter = counter + 1  ' classyear is the function 

Next rgClass 
MsgBox test  ' also a function 

End Sub 

編輯 代碼的功能我試圖打電話

Public Function classyear(class As String) As Integer 

Dim yr As String 

yr = Right(class, 1) 
If IsNumeric(yr) Then classyear = yr Else classyear = 0 

End Function 
+0

我們需要看到'classyear'代碼了。如果它是一個子然後沒有返回,如果它是一個函數,不返回任何東西,那麼它會導致相同的問題 –

+0

@MacroMan我添加的功能,我只是得到一些錯誤,當試圖運行它 –

+1

你需要通過「Classyear」的字符串參數,您目前還沒有。 – Rory

回答

0

您可以調用Sub,如果裏面塊,如:

(使用功能,如果你想還有一些其他值使用子)

if (...) 

    classyear() '<--Calling the Sub defined below 

End if 



Private Sub classyear() 
    . 
    . 
End Sub 

希望這是你是什麼l爲...打氣。

+0

似乎並沒有爲我工作,也許我只是做錯了我不知道 –

1

您的classyear函數需要字符串輸入,所以您需要給它一個。喜歡的東西:

If CInt(rgClass.Value) = classyear("Year1") Then counter = counter + 1 

您也可以neaten你classyear功能:

Public Function classyear(class As String) As Integer 
    On Error Resume Next 'if error classyear will return 0 
    classyear = CInt(Right(class, 1)) 
End Function 
+1

你可以省略'On Error GoTo 0'語句,因爲錯誤處理自動重新設置給調用者在離開函數 – user3598756

+0

@ user3598756我不知道......謝謝! – CallumDA

+2

以及更多,如果你知道調用者sub中有一個錯誤處理可以正確處理任何函數錯誤,那麼你可以省略函數中的所有On Error ...語句,並讓調用Sub進入其標籤'Label ' – user3598756