2012-08-03 3 views
0
Sub TurnAutoFilterOn() 
'check for filter, turn on if none exists 
    If Not ActiveSheet.AutoFilterMode Then 
    ActiveSheet.Range("A1").AutoFilter 
    End If 
End Sub 

잘 작동하고 자동 필터를 켭니다.Excel VBA 자동 필터 기능 내부

Function Req(ByVal MCode As String) As Integer 
    TurnAutoFilterOn 
End Function 

작동하지 않습니다.

Function Req(ByVal MCode As String) As Integer 
'check for filter, turn on if none exists 
    If Not ActiveSheet.AutoFilterMode Then 
    ActiveSheet.Range("A1").AutoFilter 
    End If 
End Function 

작동하지 않습니다.

excel vba autofilters는 SUB에서만 작동하고 기능에서는 작동하지 않아야합니까?

+2

을 당신이 다음 UDF로 사용하는 경우 다음이 작동하지만 것 VBA에서 함수를 호출하는 경우 UDF가 다른 셀의 값을 변경하지 못하도록 autofilter를 변경할 수 없기 때문에 UDF로 작동하지 않습니다. –

+0

위의 함수는 UDF가 아닙니다. – Ashok

+0

UDF에서 무엇을 의미하는지 이해했습니다 ... 예 엑셀 셀에서 함수를 호출하려고했습니다 ... 자동 필터로 정의 된 SUB를 호출하려고하는 함수에서 여전히 자동 필터를 사용할 수 없습니다. – Ashok

답변

1

위의 의견 작성자는 셀에 의해 호출되는 기능에서 통합 문서 (즉, 모든 셀)를 업데이트하는 것이 옳습니다. 허용/지원되지 않습니다.

Excel에서는 셀 수식을 기반으로 셀 간 종속성을 미리 계산할 수있는 통합 문서 다시 칠하기 모델을 제공합니다. 이를 통해 원본 소스에서 변경 사항을 의존하는 셀로 변경 사항을 (상대적으로) 효율적으로 전파 할 수 있습니다. 통합 문서 relaculation이 완료되면 다른 수식에서 참조되지 않은 셀에 변경 내용이 전파 될 때까지 변경 내용을 반복적으로 전파합니다 (즉, 재귀 적으로). 셀 수식을 사용하면 통합 문서의 셀을 수정할 수 없습니다. 사전 계산 된 수식 기반 종속성 분석을 효과적으로 무효로 (또는 적어도 극적으로 약화) 지원하고 다른 계산 모델을 필요로하는 경우 (이는 효율성이 떨어질 수 있음) 지원해야합니다. (순환 셀 참조 (직접 또는 간접적으로) 또한 이력 함수를 약간 어렵게 만드는이 방법에 문제가 있습니다.)

그러나 나중에 수행 할 수 있도록 VBA 데이터 구조에 일부 데이터를 기록하는 것이 좋습니다 아래의 예에서는 매우 단순한 public gx이지만 이러한 데이터 구조는 거의 모든 복잡성으로 인해 발생할 수 있습니다. 그런 다음 이벤트를 사용하여 통합 문서를 다시 계산 한 후 해당 기록 된 데이터를 사용할 수 있습니다. 워크 시트 변경 이벤트는 계산을 마친 후 (셀 루틴 Worksheet_Calculate를 작성하고 워크 시트에 넣는) 일부 코드를 실행하는 방법입니다. 셀을 수정하면 문제가 해결 될 수 있습니다. 또한 Workbook_SheetCalculation이 ThisWorkbook의 코드에 포함되어 있습니다.

Private Sub Workbook_SheetCalculate(ByVal Sh As Object) 
    MsgBox "gx=" & gx 
    Application.Worksheets("Sheet1").Range("A1") = gx 
End Sub 

"Module1의"에서 :

Sheet1에있는
Public gx As Long 

Function MyFormula(x As Long) As String 
    gx = x 
    MyFormula = "hello" 
End Function 

, 셀 A5 : "에서 ThisWorkbook"에서

= MyFormula (A4)

당신은거야 문맥에서 gx가 A4의 숫자로 설정된 (수식의 실행에서 데이터를 저장함을 나타냄) 팝업을 가져오고, mod 워크 시트도 ifying. 이제 다른 번호로 A4를 수정하면 A4를 변경하면 다시 계산되기 때문에 결과가 표시됩니다.

(당신은 또한 SheetCalculate 이벤트에 대한 대안으로 Workbook_SheetChange 이벤트에 관심이있을 수 있습니다.)

+0

변경 또는 계산에 의해 트리거 된 이벤트에서 통합 문서를 변경하는 것을 잊어 버린 사실은 이벤트가 다시 트리거 될 가능성이 높습니다. 따라서 두 번 실행하면 코드가 작동하도록 준비하거나 첫 번째 호출에서 상태를 지우는 코드를 넣을 수 있습니다. 따라서 후속 호출은이를 테스트하고 아무 작업도 수행 할 수 없습니다. –