2011-07-29 2 views
2

다음 코드를 사용하여 셀을 변경하면 Excel에서 자동 필터를 새로 고칩니다.자동 필터를 oncellchange를 갱신 할 때 Excel이 손상됩니다.

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim MySheet As Worksheet 
    'On Error Resume Next 
    'Set MySheet = Application.ActiveSheet 
    'MySheet.Columns(1).AutoFilter.ApplyFilter 
    'On Error Resume Next 
    'Application.EnableEvents = False 
    Worksheets("Basisgegevens").Range("$A$1:$A$146").AutoFilter Field:=1, Criteria1:=Array("0", _ 
     "2", "="), Operator:=xlFilterValues 
    'Application.EnableEvents = True 
    'On Error GoTo 0 
End Sub 

특정 기준에 따라 행을 숨기려면이 방법을 사용합니다. 그리고 그것은 정말 잘 작동합니다.

문제
그러나 나는 셀에 유효성 검사를 설정하고 그 멋진 드롭 다운 목록 중 하나를 추가 할 때. 그 부분은 잘 작동 enter image description here

하지만 최대한 빨리 숨길 수있는 자동 필터를 일으키는 다른 값을 선택으로/충돌

에게 엑셀 다른 세포를 표시 : enter image description here
는 다음과 같이 할 셀을 얻으려면

내 이론
유효성 검사 드롭 다운이 셀을 변경합니다.
위의 VBA 코드를 트리거합니다.
그러나 유효성 검사 코드가 아직 실행 중이며 필터 설정이 다시 초기화됩니다.
이로 인해 Excel이 중단됩니다.

어떻게 수정합니까?
VBA 이벤트가 지연되면 어떻게 든 도움이됩니까?
어떻게하면됩니까?

+1

과 :

는 여기에 주변에 작업입니다. 어떤 데이터가 어떤 열에 있는지, 어떤 셀에 유효성 검사를 추가하는지, 또는 우리가 볼 수있는 시트 사본을 알려주는지에 대한 자세한 정보를 제공해야합니다. – Eddy

답변

1

경주 조건처럼 보입니다. 필터를 다시 적용하면 전에 계산이 완료되어 Excel 충돌이 발생합니다.
큰 시트가 필요하므로 계산이 오래 걸립니다. 나를 위해 엑셀 충돌하지 않습니다에 코드를 붙여 넣기 (2010 년) 새로운 엑셀 시트를 작성

Option Explicit 

Dim ReapplyFilter As Boolean 

'OnCalculate is always called twice, before and after calculation. 
'I'm only interested in the event after. 
Private Sub Worksheet_Calculate() 
    If (Application.CalculationState = xlDone) And (ReapplyFilter = True) Then 
    ReapplyFilter = False 
    On Error Resume Next 
    Worksheets("Basisgegevens").Range("$A$1:$A$146").AutoFilter Field:=1, Criteria1:=Array("0", _ 
      "2", "3", "4", "5", "="), Operator:=xlFilterValues 
    On Error GoTo 0 
    End If 

End Sub 

'Always Reapply the filter on activation of the sheet. 
Private Sub Worksheet_Activate() 
    Worksheets("Basisgegevens").Range("$A$1:$A$146").AutoFilter Field:=1, Criteria1:=Array("0", _ 
      "2", "3", "4", "5", "="), Operator:=xlFilterValues 
End Sub 

'OnChange: set the flag to be picked up by calculation later on. 
Private Sub Worksheet_Change(ByVal Target As Range) 
Dim MySheet As Worksheet 
    ReapplyFilter = True 
End Sub 
1

지금하고있는 일에 어떤 문제가 있다고 생각하지 않습니다. 하지만 addins와 같은 충돌을 일으키는 또 다른 구성 요소가 있다고 의심됩니다. 불필요한 추가 기능 (http://office.microsoft.com/en-us/excel-help/load-or-unload-add-in-programs-HP010096834.aspx)을 언로드하거나 삭제 한 다음 코드를 다시 시도해보십시오.

+0

그것은 addins 아니에요, 나는이 문제를 해결하는 해결 방법을 발견했습니다. 아래 내 대답을 참조하십시오. – Johan

관련 문제