2013-12-13 8 views
0

아래 코드를 참조하십시오. 통합 문서 모듈에 'beforesave'코드가 있는데 활성 시트에있을 때 제대로 작동합니다. 그러나 I는 시트 (2)에 사용하는 테이블 I는 I가 활성화에서 (이 모듈 부에) 부착 매크로Beforesave 이벤트에서 셀 선택

Sub Refresh_Pivot() 
' 
' Refresh_Pivot Macro 

    ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh 
    ActiveWorkbook.Save 

End Sub 

를 삽입 버튼을 사용하여 내 피벗을 새로 시트 (1)에 피봇 테이블을 갖는다. 통합 문서 모듈에있는 다른 코드에서 작동하기 시작한 Workbook.Save는 누락 된 데이터가있는 피벗 테이블이 좋은 도구가 아니기를 바랍니다. 그러나 이것을 사용하면 기본적으로 오류가 발생하고 cell.Offset (0, 1)을 강조 표시합니다. 선택 - 어떻게 이것을 방지 할 수 있습니까?

msgbox에서 OK를 선택하면 화면 페이지가 시트 2로 변경되고 문제가되는 셀이 강조 표시됩니다.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 

Dim esave As Range 
Dim psave As Range 
Dim jsave As Range 
Dim RAll As Range 
Dim cell As Range 
Set esave = Sheet2.Range("Table1[Estimated Claim (USD)]") 
Set psave = Sheet2.Range("Table1[Provisional Claim (USD)]") 
Set jsave = Sheet2.Range("Table1[Agreed Claim (USD)]") 

Set RAll = Union(esave, psave, jsave) 

    For Each cell In RAll 

    If cell.Value <> "" And cell.Offset(0, 1).Value = "" Then 

     Dim missdata 
     missdata = MsgBox("Missing Data - Enter the Date for WorkBook to Save", vbOKOnly, "Missing Data") 
     Cancel = True 
     cell.Offset(0, 1).Select 


    Exit For 

    End If 

    Next cell 

End Sub 
+0

for 루프를 실행하기 전에 Sheet2.Activate를 추가해야합니다. –

답변

1

.Select은 피해야합니다. INTERESTING READ

왜 내가 그 셀을 선택하려고하는지 알고 싶습니까? 목적은 무엇입니까? 당신이 그것과 상호 작용하고 싶다면, 그것을 선택하지 않고 할 수 있습니다. 예를 들어,

If cell.Value <> "" And cell.Offset(0, 1).Value = "" Then 
    Dim missdata 
    missdata = MsgBox("Missing Data - Enter the Date for WorkBook to Save", vbOKOnly, "Missing Data") 
    Cancel = True 
    With cell.Offset(0, 1) 
     ' 
     ''~~> Do something 
     ' 
    End With 
    Exit For 
End If 

그래도 그 셀을 선택하려면 해당 시트에 있어야한다고 말한 적이 있습니다. 이제는 두 가지 방법이 있습니다. 하나는 위의 설명에서 언급 한 것과 같습니다.

Workbook_BeforeSave 이벤트에서 For Each cell In RAll 바로 앞에 Sheet2.Activate을 추가하거나 버튼의 클릭 이벤트에서 수행하십시오.

Sub Refresh_Pivot() 
    ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh 
    Sheet2.Activate 
    ActiveWorkbook.Save 
End Sub 

다른 점. 저장을 사용 중지하려면 Exit For 앞에 Cancel = True을 전달해야 할 수 있습니다.