2013-07-03 4 views
0

사람들이 내 첫 번째 문제를 해결하는 방법을 찾은 후에 새로운 질문을 열었습니다. 이제 새로운 문제가 생깁니다. 아래의 "장치 초기화"페이지에서 코딩을 찾을 수 있습니다. 코드의 마지막 부분에 대한 아이디어는 B7 : b 및 E7 : E에서 열 (텍스트 값)을 추가하고 J7 : J 열에 표시하는 것입니다. 따라서 Photo가 B에 입력되고 Pass가 Column E에 입력되면 결과는 Column J의 Photopass가됩니다. 매크로 명령을 통해 실행하면 원본 코드가 제대로 작동합니다. 문제는 기존의 코드 중 일부에 추가하려고 시도했는데 이제는 정보가 모든 셀에 입력 될 때 전체 프로그램이 중단됩니다. 프로그램이 응답하지 않게되면 시스템이 종료되고 다시 시작됩니다. 나는 코드 나 디버그 메시지를 얻지 못한다. 다음은 페이지의 전체 코드입니다. 당신은 내가 검사 파일을 전송하고 필요한 경우도 자세한 정보를 제공 할 수 있습니다 더 이상 정보가 필요하면 워크 시트 이벤트 VBA 코드를 변경하면 Excel 2013이 충돌 함

Private Sub Worksheet_Change(ByVal Target As Range) 

If Target.Column = 7 And UCase(Target.Value) = "YES" Then 
    Sheets("MESSAGE CHANGES").Cells(Rows.Count, 1).End(xlUp)(2).Resize(, 3) = Sheets("INITIATING DEVICES").Cells(Target.Row, 1).Resize(, 3).Value 
    Application.Goto Sheets("MESSAGE CHANGES").Cells(Rows.Count, 1).End(xlUp).Offset(, 3) 

End If 


If Target.Column = 6 And UCase(Target.Value) = "YES" Then 
    Sheets("DEVICE NOTES").Cells(Rows.Count, 1).End(xlUp)(2).Resize(, 3) = Sheets("INITIATING DEVICES").Cells(Target.Row, 1).Resize(, 3).Value 
    Application.Goto Sheets("DEVICE NOTES").Cells(Rows.Count, 1).End(xlUp).Offset(, 3) 

End If 


'(replace if new code fails)If Target.Column = 5 And UCase(Target.Value) = "FAIL" Or Target.Column = 5 And UCase(Target.Value) = "DAMAGED" Then 
    '(replace if new codes fails)Sheets("FAILED DEVICES").Cells(Rows.Count, 1).End(xlUp)(2).Resize(, 3) = Sheets("INITIATING DEVICES").Cells(Target.Row, 1).Resize(, 3).Value 
If Target.Column = 5 And UCase(Target.Value) = "FAIL" Or UCase(Target.Value) = "DAMAGED" Then 
    Application.EnableEvents = False 
    Sheets("FAILED DEVICES").Cells(Rows.Count, 1).End(xlUp)(2).Resize(, 5) = Sheets("INITIATING DEVICES").Cells(Target.Row, 1).Resize(, 5).Value 
    Sheets("FAILED DEVICES").Cells(Rows.Count, 1).End(xlUp).Offset(, 5) = Sheets("INITIATING DEVICES").Cells(Target.Row, 11).Value 
    Application.EnableEvents = True 


End If 
'code that will place date/time when value is selcted in E 
If Not Intersect(Target, Range("E:E")) Is Nothing Then 
    Range("I" & Target.Row).Value = Now 

End If 

Dim wb As Workbook 
Dim ws As Worksheet 
Dim lastRow As Long 

Set wb = ThisWorkbook 
Set ws = wb.Sheets("INITIATING DEVICES") 

lastRow = ws.Range("B" & ws.Rows.Count).End(xlUp).Row 
ws.Range("J7:J" & lastRow).Value = Evaluate("=B7:B" & lastRow & "&E7:E" & lastRow) 


End Sub 


Private Sub Workbook_BeforePrint(Cancel As Boolean) 
With Sheets("INITIATING DEVICES") 
    .PageSetup.PrintArea = .Range("A1:H" & .Cells(Rows.Count, 1).End(xlUp).Row).Address 
End With 

End Sub 

, 당신은 내게 줄 수있는 모든 도움을 주셔서 감사합니다. 나는 무언가를 엉망으로 만들 것이라고 확신하기 때문에 충돌이 계속 발생합니다. 아직도 여기에서 배우기.

답변

0

충돌하는 경우 Change 이벤트가 반복적으로 호출되고 있습니다. 워크 시트에 (코드 포함)을 변경으로 당신은 변경 이벤트가 다시 트리거되는 것을 방지하기 위해 적절한 시점에서

Application.EnableEvents = False 

를 사용해야합니다.

+1

또는 코드를 실행하기 위해 워크 시트의 단추를 사용하여 변경 이벤트를 사용해야하는지 여부를 고려하십시오. –

+0

좀 더 설명해 주시겠습니까? 원본 코드는 단순히 매크로를 실행하는 버튼으로 사용하는 것이 었습니다. 그것은 잘 작동하지만 매크로를 실행하는 사용자/관리자를 얻는 것은 고통이었고 그래서 나는 페이지에서 다른 많은 것들과 같이 스스로 실행하려고했습니다. 한 번 "E"열에 "b"와 "e"의 결과가 "J"에 표시 될 것이라는 아이디어가 있습니다. 답변은 "요약"페이지에서 실시간으로 계산됩니다. 텍스트 값 단어의 합계를 세어 해당 페이지에 표시합니다. 결과가 제거되면 코드가 누락 될 것입니다. 코드는 어디에 있습니까? – Bill