2017-04-03 2 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 

편집 코드 감사합니다 다른 값을 반환하십시오 Sub)

if (...) 

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

End if 



Private Sub classyear() 
    . 
    . 
End Sub 

희망이 당신이 무엇입니까? 에 대한 ooking.

+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

에러 핸들링은 함수를 떠날 때 자동적으로 호출자 하위 하나에 재설정되기 때문에'On Error GoTo 0' 문을 생략 할 수있다. – user3598756

+0

@ user3598756 나는 그걸 모르고 ... 고마워! – CallumDA

+2

그리고 더 많은 경우, 함수 오류를 제대로 처리 할 오류 처리기가 호출자 하위에 있다는 것을 알고 있다면 함수 내에서 모든 On Error ... 문을 생략하고 호출 Sub를 대리인의'Label ' – user3598756