2017-11-05 1 views
0

VBA를 사용한 이후로 오랜 시간이 걸렸습니다. 또는 내 작업과 지루한 편집 작업과 관련하여, 자동으로 만들어서 jass up을 결정했습니다. 나는 종업원의 임금을 계산하는 테이블 스프레드 시트가 (검열 직원 이름과 분명한 이유 밖으로 편집 된 테이블의 가장) :Excel VBA 오류가 발생하지만 코드가 계속 작동합니까?

EDITED FOR PRIVACY REASOSN

표는 포인트 시스템, 미래 상사를 기반으로 직원이 그 날을 얼마나 잘했는지에 따라 각 열에 1에서 3까지의 점수를 매길 것입니다 (단락 열 제외). 그런 다음 스프레드 시트는 오른쪽의 '전체'열에있는 총점을 합산합니다. 그런 다음 직원은이 점수에 따라 A +에서 C로 채점됩니다. 그게 내 부분이야. 내가하기로 결정한 것은 자동으로 간단한 vba 코드를 작성하는 것입니다 (이 그림에 보이는 것보다 더 많은 직원이 있으므로 게으름이 많습니다!). 그래서 여기에 무엇 시작된다

Private Sub Worksheet_Change(ByVal Target As Range) 
    If ActiveSheet.Range("P7").Value >= 10 Then 'Total points value 
     ActiveSheet.Range("Q7").Value = "A+"  'change value of the grade 
    ElseIf ActiveSheet.Range("P7").Value >= 8 Then 
     ActiveSheet.Range("Q7").Value = "A" 
    ElseIf ActiveSheet.Range("P7").Value >= 6 Then 
     ActiveSheet.Range("Q7").Value = "B+" 
    ElseIf ActiveSheet.Range("P7").Value >= 4 Then 
     ActiveSheet.Range("Q7").Value = "B-" 
    Else 
     ActiveSheet.Range("Q7").Value = "C" 
    End If 
End Sub 

그것은 나에게 매우 간단한데,하지만 난 그것을 실행할 때마다 내가이 오류가 발생하는 문제가 있습니다

Method "Range' of object "_Worksheet" failed

을 그리고조차 아니다. 오류 메시지가 나타나면 "끝내기"를 클릭하면 작동합니다! 내가 원하는 방식으로 완벽하게 작동합니다!

누군가가이 오류를 도와 줄 수 있습니까? 내 코드에서 내게 잘못된 점을 알려주십시오. 더 많은 사람이 내게 설명해주십시오. 왜 코드가 실행될 때마다 오류가 발생하는지 알지만 코드가 여전히 작동합니다. 이것이 어떻게 가능한지??

+0

그래서 어떤 라인에 실패하면 하이라이트됩니까? 워크 시트 기반 이벤트를 사용하여 코드 (P7)의 한 셀만 참조하여 업데이트 (Q7)합니다. 직원 한 명당 한 장을 사용하고 있습니까? –

+1

수식을 사용하지 않는 이유는 무엇입니까? 이것은 매우 간단한 INDEX (MATCH())입니다. –

+0

코드에 대해서는'ActiveSheet'를'Me'로 변경하십시오. –

답변

1

코드를 주석에 게시 할 수 없지만 다음 코드는 오류없이 작동하고 수행하려는 작업을 수행합니다.

확인되는 셀 (대상)과 셀이 변경되는 문제 (Q7)는 동시에 발사되는 것과 관련하여 문제가되는 것으로 보입니다. 수동으로 열 P를 작성하는 경우

Private Sub Worksheet_Change(ByVal Target As Range) 
On Error GoTo eosub 
Application.EnableEvents = False 
    If ActiveSheet.Range("P7").Value >= 10 Then 'Total points value 
     ActiveSheet.Range("Q7").Value = "A+"  'change value of the grade 
    ElseIf ActiveSheet.Range("P7").Value >= 8 Then 
     ActiveSheet.Range("Q7").Value = "A" 
    ElseIf ActiveSheet.Range("P7").Value >= 6 Then 
     ActiveSheet.Range("Q7").Value = "B+" 
    ElseIf ActiveSheet.Range("P7").Value >= 4 Then 
     ActiveSheet.Range("Q7").Value = "B-" 
    Else 
     ActiveSheet.Range("Q7").Value = "C" 
    End If 
eosub: 
Application.EnableEvents = True 
End Sub 

그러나, 이것은 어떻게해야입니다 : 그러나

Private Sub Worksheet_Change(ByVal Target As Range) 
On Error GoTo eosub 
Application.EnableEvents = False 
If Target.Column = 16 Then 
    If Target.Value >= 10 Then 'Total points value 
     Target.Offset(0, 1).Value = "A+"  'change value of the grade 
    ElseIf Target.Value >= 8 Then 
     Target.Offset(0, 1).Value = "A" 
    ElseIf Target.Value >= 6 Then 
     Target.Offset(0, 1).Value = "B+" 
    ElseIf Target.Value >= 4 Then 
     Target.Offset(0, 1).Value = "B-" 
    Else 
     Target.Offset(0, 1).Value = "C" 
    End If 
End If 
eosub: 
Application.EnableEvents = True 
End Sub 

, 간단한 스콧 Craner에 의해 제안 공식 설정을 사용하는 것입니다.

+0

이것이 실제로 어떻게 작동하는지 이해하지 못합니다. 그러나 나는 실제로 내가 무엇을하고 있는지 모른 채 다른 사람들로부터 물건을 복사하는 것을 좋아하지 않습니다. 나는 지금 무엇이 잘못 되었는가를 인식합니다. 그렇게 그것에 대해 대단히 감사합니다. –

+0

아주 좋습니다. 여기서 당신이 이해하지 못하는 것은 무엇입니까? –

+0

오, 아뇨, VBA 코드를 작성한 이후로 꽤 오래되었습니다. 익숙해 지려면 약간의 시간이 필요합니다. 어쨌든 고마워. –

관련 문제