2011-01-17 1 views
1

VBA를 사용하여 다른 데이터의 하위 집합에서 Excel "테이블"범위를 채 웁니다.ListRows.Item (i) .Delete를 사용하여 Excel 테이블에서 행을 삭제할 때 속도가 느립니다.

데이터를 얻는 속도는 빠릅니다 (캐시 된 배열 또는 다른 시트의 데이터에 대한 SQL 쿼리에서).하지만 추가 및 삭제는 느립니다.

With Worksheets("Overview").ListObjects("OverviewServiceTable") 

    For i = .ListRows.Count To 1 Step -1 
     .ListRows(i).Delete 
    Next 

    For i = 0 To UBound(cache) 
     Set NewRow = .ListRows.Add(AlwaysInsert:=True) 
     NewRow.Range.Cells(1, 1).Value = cache(i) 
    Next 

End With 

기본 프로파일 링을 약간 사용하면 행을 추가 및 삭제할 때 행 당 최대 시간이 걸립니다. 이와 같이 테이블을 삭제하고 업데이트하는 훨씬 빠른 방법이 있습니까? 그렇지 않으면 나는 "일반"셀 범위를 사용하여 예쁘게 보이도록 하겠지만, 자동 필터 같은 좋은 것들은 사라질 것입니다.

감사합니다.

답변

5

당신은 수동으로 설정 계산을 시도하고 코드가 저도 같은 문제가 있었다

Application.Calculation = xlCalculationManual 
Application.ScreenUpdating = False 

your code here 

Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 
+0

딱! 아주 간단합니다. 나는 심지어 계산을 생각조차하지 않았다 : (고맙다. – Cylindric

2

을 실행되는 동안 화면 업데이트를 해제하지만, 등을 계산, 화면 업데이트를 해제하는 것은 나를 위해 작동하지 않았다 수 있습니다.

가 첫 번째 줄은 머리글 행을두고, "NamedTable"라는 테이블에서 모든 행을 삭제합니다
Range("NamedTable").Clear 
Range("NamedTable").RemoveDuplicates Columns:=1 

(있는 경우 : 웹을 검색하고 시간 이상 내 VBA를 조정 한 후, 여기 내 해결 방법입니다 그것은 존재한다).

두 번째 줄은 테이블의 모든 세포가 지금은 비어있는 사실을 활용하고, 내가 아는

+0

고맙다. 나는 모든 스크린 업데이트, 계산 등을 끄려 시도했지만, 여전히 행 당 ~ 1 초가 걸렸다.이 버전은 ~ 5 행에 대해 1 초가 걸린다. 총 – aSystemOverload

1

(첫 번째 열에서 "중복"분석) 모든 중복 행을 제거, 그것은 약간의 늦었지만 미래의 사용자를위한 ..

listobject.DataBodyRange.Rows.Delete 

좀 도와; O)

+0

안전한 버전 : "Not listobject.DataBodyRange가 Nothing이면 listobject.DataBodyRange.rows.Delete End" –

관련 문제