2016-06-28 4 views
0

Excel 2013을 사용하고 있습니다. 고객 목록과 그 정보로 구성된 대형 시트가 있습니다. 이 스프레드 시트에 새 고객을 추가 할 때 CustomerID를 우리 서버에 게시하여 대부분의 정보를 채우면 서버는 고객 정보를 Json 문자열로 반환 한 다음 파싱합니다. 특정 함수가 필요한 정보를 반환합니다. 즉 "= Json_get_email (Userid)"가 전자 메일 주소를 반환합니다. 이 모든 것은 매우 잘 작동하며 회사의 직원이 사용하기에 비교적 친숙합니다.Excel에서 자동 필터를 적용 할 때 함수를 다시 계산하지 못하게하십시오.

자동 필터가 적용될 때 문제가 발생합니다. 이 기능이 변하지 않는 경우에도 자동 필터를 적용하면 스프레드 시트가 모든 기능을 다시 계산하게되고 고객이나 소수의 고객에게 효율적이고 빠른 것이 미친 듯이 스프레드 시트 속도를 늦추 게됩니다.

필자는 필터가 적용될 때마다 계산되는 기능을 방지 할 수있는 방법이 있는지 알고 자합니다.

최선을,

파비앙

+0

이 질문은 당신과 상당히 유사하다고 생각합니다. http://stackoverflow.com/questions/12808009/run-vba-code-automatically-after-running-a-filter 대답은이 문서를 참조합니다. https : // www. experts-exchange.com/articles/2773/Trapping-a-change-to-a-filter-list-with-VBA.html – jcarroll

+0

'Json_get_email' 함수를 수정하여 각 입력 값의 반환 값을 캐시합니다. 서버에서 데이터를 다시 페치하지 않고 캐시 된 값. 반환 값은 주어진 입력에 대해 상당히 고정되어 있어야하므로 매우 안전해야합니다. –

답변

0

다음은 구현 된 솔루션입니다. 많은 사람들이 UDF와 동일한 문제를 겪고있는 것을 보면서 공유하고 싶습니다.

완벽하지는 않지만 매번 서버에 연결하여 문자열을 파싱하지 않으므로 훨씬 빠릅니다.

나는
Public Names_in_List(100000000 To 104000000) As Boolean 

    Function JSon_CustomerName2(UserID As String) As String 
    If Names_in_List(UserID) = False Then 
     'The Function Has not yet been run for this ID 
     '... Do whatever 
     Names_in_List(UserID) = True 'Update the status 
    Else 
     JSon_CustomerName2 = Application.Caller.value 'Reuse the value that was in the cell. 
    End If 
    End Function 

는 언제나처럼, 나는 사용자 당은 하나의 비트 속도를하지만, 논리 값으로 메모리를 교환했다 USER_ID 색인 논리 값의 공개 배열을 만들었습니다.

유용한 통찰력을 얻기 위해 @Tim에게 많은 감사를드립니다.

2

이런 식으로 뭔가 할 것이다 시트 훨씬 더 빨리 :

Function Json_get_email(arg) 

    Static dict As Object '<< persists between calls 

    If dict is nothing then set dict = Createobject("scripting.dictionary") 

    If not dict.exists(arg) Then 
     'have not seen this value of arg before 
     '...get the return "email" value for 'arg' here 
     dict.add arg, email 
    End If 

    Json_get_email = dict(arg) 'return the cached value 

End Function 

이 같은 인수 값을 사용하여 통화 사이의 반환 이메일 값을 캐시 아무 문제 없을 것 .

+0

이것은 매우 좋은 생각입니다.이 솔루션을 구현하고 기능면에 대해 다시 알려 드리겠습니다. – Fabien