2017-04-03 15 views
1

if文の中で関数を呼び出そうとしています。この関数はclassyearと呼ばれ、ifの直後にあります。私はタイムテーブルを巡って、毎年どんな授業があるのか​​を見たいと思っています。だから1で終わると、それは数えられるでしょう。誰かが私がこの関数を呼び出す方法について知っていますか?あなたがしたい場合はif文(vba)内の関数を呼び出す方法

(使用機能:すべてのヘルプは、あなたがもしブロックのような内部のサブを呼び出すことができます私は

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

を呼び出すしようとしています関数の

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 

EDIT コードを高く評価しています他の値を返すSub)

if (...) 

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

End if 



Private Sub classyear() 
    . 
    . 
End Sub 

希望はあなたです〜のために吐き出す。

+0

それは私のために働いていないようですね、おそらく私は間違っていますか? –

1

あなたのclassyear関数は文字列入力を受け取りますので、それを与える必要があります。ような何か:

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

はまた、あなたはあなたのclassyear機能をneatenことができます。

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

エラー処理は、関数を終了するときに自動的に呼び出し側のサブ1にリセットされるので、 'On Error GoTo 0'文を省略することができます – user3598756

+0

@ user3598756私はそれを知らなかった...ありがとう! – CallumDA

+2

以上、関数のエラーを適切に処理するエラーハンドラが呼び出し元のサブ関数にあることが分かっていれば、関数内の 'On Error ...'ステートメントをすべて省略し、呼び出し元のSubをその代理の 'Label ' – user3598756

関連する問題