Akademia VBA

czyli jak uzyskać władzę nad światem … danych

Usuwanie duplikatów

Kategorie: Excel VBA,Office 2007,Office 2010 — Dariusz Kolasa o 22:13, 27 Mar 2013

Jedną z nowości w Excelu 2007/2010 jest narzędzie do usuwania duplikatów. Bardzo przydatne np do tworzenia słowników. We wcześniejszych wersjach ten efekt można było osiągnąć za pomocą opcji filtra zaawansowanego, co nie było bardzo proste i mało kto o tym wiedział. Nowego narzędzia Usuń duplikaty da się też użyć z poziomu kodu, np:

'---
ActiveSheet.UsedRange.Columns(10).RemoveDuplicates Columns:=1, Header:=xlYes
'---

Generowanie Tabel Przestawnych – Excel 2007/2010

Kategorie: Excel VBA,Office 2007,Office 2010,Problemy z Office — Dariusz Kolasa o 10:37, 6 Kwi 2012

Generując tabelę przestawną z poziomu kodu pod Excelem 2003 można było jako argumentu Source metody tworzącej PivotCache podać dowolny poprawnie zdefiniowany obiekt Range, np CurrentRegion lub UsedRange. Podobnie rzecz ma się pod Excelem 2007/2010 (pamiętajmy tylko o użyciu metody PivotCaches.Create zamiast PivotCaches.Add). Niestety okazuje się, że w momencie gdy obiekt Range ma liczbę wierszy przekraczającą 65 536 (co teoretycznie nie powinno być problemem pod Excelem 2007/2010) metoda generuje błąd nr 13 Type mismatch :( Rozwiązaniem (niezbyt eleganckim ale innego chyba nie ma) tego problemu jest użycie zamiast obiektu Range klasycznego stringa R1C1 z tymże zakresem:

    Dim OstW As Long
    Dim OstK As Long
    Dim strZakres As String
    Dim PC as PivotCache
 
    OstW = Cells(ArkDane.Rows.Count, 1).End(xlUp).Row
    OstK = Cells(1, ArkDane.Columns.Count).End(xlToLeft).Column
    strZakres = "R1C1:R" & OstW & "C" & OstK
    Set PC = ActiveWorkbook.PivotCaches.Create( _
        SourceType:=xlDatabase, _
        SourceData:=strZakres, _
        Version:=xlPivotTableVersion14)

Przy okazji możemy zapoznać się z powszechnie znanymi wyrażeniami zwracającym nr ostatniego wiersza i ostatniej kolumny w zakresie danych

Przykład bazuje na stronie z MS Answers: http://answers.microsoft.com/en-us/office/forum/office_2010-customize/pivotcache-type-mismatch-error-when-65536-rows/0827889e-b671-e011-8dfc-68b599b31bf5?msgId=4e3a2b20-7a72-e011-8dfc-68b599b31bf5

Co się stało z DAO w Access 2007/2010?

Kategorie: Access VBA,Office 2007,Office 2010 — Dariusz Kolasa o 21:17, 11 Cze 2011

Otóż zostało ono wbudowane w bibliotekę Accessa 2007/2010! Nie wiem po co ale tak właśnie się stało. nawet nie próbuj ustawiać referencji do klasycznego DAO 3.6, nie da się włączyć. Wywala komunikat o konflikcie. Na szczęście nie trzeba tego robić, po prostu biblioteka DAO jest dostępna bez tego, co widać w kodzie na liście IntelliSense.