Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Excel, VBA - Błąd VBA6.dll przy tworzeniu tabeli

Jarmuch 15 Lip 2013 22:47 2331 11
  • #1 15 Lip 2013 22:47
    Jarmuch
    Poziom 9  

    Witam

    Mam za zadanie napisać kod do automatycznego tworzenia tabeli przestawne w VBA. To udało się bardzo łatwo...
    Jednak problem pojawił się w momencie dodania opcji uzupełnienia tabeli źródłowej o dane z innego arkusza. W momencie tworzenia tabeli wyskakuje błąd VBA6.dll dla office'a 2007.
    bez tego kod kompiluje się normalnie
    PT.AddFields RowFields:=Array("Użytkownik"), ColumnFields:="Typ Zagadnienia"

    Czy byłby ktoś wstanie pomóc w znalezieniu problemu?

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0 11
  • #2 15 Lip 2013 22:58
    marcinj12
    Poziom 40  

    Musiałbyś plik załączyć...

    0
  • #3 15 Lip 2013 23:21
    Jarmuch
    Poziom 9  

    Już przesyłam...
    Drobne wyjaśnienie co do danych...
    Na początku program ma uzupełnić tabelę godzin poprzez wyszukanie typu zagadnienia z arkusza faktury i wklejenie danych z kolumny Typ również znajdującego się w fakturach.
    Utworzona tabela przestawna ma mieć użytkowników w wierszach a typy zagadnień w kolumnach. Tabela w gruncie rzeczy jest tworzona, dane są poprawnie odczytane jedna błąd występuje przy jej uzupełnianiu.

    Dzięki za zainteresowanie, pozdrawiam

    0
  • #4 15 Lip 2013 23:41
    marcinj12
    Poziom 40  

    I w którym momencie ten błąd Tobie wyskakuje?? Bo ja klikam przycisk Odśwież w załączonym pliku i nic się nie dzieje. Zmieść pliki wraz z opisem tak, żeby ktoś kto je pobierze mógł odtworzyć ten problem u siebie.
    Próbowałeś debugować kod krok po kroku? W którym miejscu dostajesz błąd?

    0
  • #5 16 Lip 2013 16:20
    Jarmuch
    Poziom 9  

    Przepraszam ale wstawiłem "działający" kod, chociaż nie mam pojęcia dlaczego nie działa uzupełniania ;/ Tutaj jeszcze się muszę przyjrzeć co nawaliło...

    Odnośnie tabeli przestawnej to wystarczy usunąć komentarz w miejscu

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #6 16 Lip 2013 18:56
    marcinj12
    Poziom 40  

    Po odkomentowaniu tego fragmentu na moim komputerze odświeżanie dalej działa (Excel 2007, Win7). Czyli problem musi być albo w Twojej konfiguracji Excela, albo w jakiś ustawieniach systemowych.
    Sprawdź na początku, czy w opcjach programu excel->centrum zaufania->ustawienia centrum zaufania masz ustawione odpowiednio niskie poziomy zabezpieczeń.
    Dodatkowo, w projekcie VBA Tools->References sprawdź, czy nie ma zahaczonych jakiś dziwnych bibliotek z napisem MISSING

    Jeżeli to nie pomoże, to spróbuj zrobić projekt OD NOWA w Excelu (żadnego kopiowania zakładek czy tabeli!!! co najwyżej możesz skopiować kod makra!), bo coś mi się widzi, że ten projekt napisałeś w Excelu 2003 lub na innym systemie i przestał działać na nowym Office / systemie...
    ...a jeżeli nie pomoże żadne z powyższych, to już sam nie wiem, pozostaje google i szukanie przyczyny błędu dla vba6.dll

    Swoją drogą - musisz za każdym razem tworzyć tabelę przestawną od nowa? Nie wystarczy zrobić jej raz, a makrem jedynie odświeżać tą już istniejącą?

    0
  • #7 16 Lip 2013 23:12
    Jarmuch
    Poziom 9  

    Wcześniej znalazłem komendę którą wpisywało się do do okienka uruchom, która aktywowało plik vba6.dll. Tym razem niestety nie działa ;/
    Program od początku pisałem na tym samym lapku więc kwestia wersji programu nie wchodzi w grę.

    Pozostaje tylko ponownie przepisać kod i zobaczę co da się zrobić :)

    Dzięki wielkie za pomoc i dam znać co z tego wyszło

    0
  • Pomocny post
    #8 17 Lip 2013 00:41
    marcinj12
    Poziom 40  

    Jarmuch napisał:
    Wcześniej znalazłem komendę którą wpisywało się do do okienka uruchom, która aktywowało plik vba6.dll
    Pewnie chodzi o rejestrację biblioteki w systemie - sęk w tym, że rejestrujesz w ten sposób jakąś starszą wersję biblioteki, która nie istnieje/lub nie jest zarejestrowana/ w systemie.
    Pisząc makro od początku w nowym pliku nie powinieneś mieć żadnych problemów - Excel domyślnie powinien załadować sobie wszystkie wymagane biblioteki w odpowiedniej wersji.

    0
  • #9 17 Lip 2013 22:54
    Jarmuch
    Poziom 9  

    Stworzenie pliku od nowa podziałało :)

    Pytanie jak i prośba... Czy możecie znaleźć przyczynę dlaczego funkcja szukająca-uzupełniająca nie działa? W kodzie uzupełniany jest tylko pierwszy wynik o ile zadziała oczywiście a chciałbym skorzystać z funkcji "For Each".

    pozdrawiam

    0
  • #10 17 Lip 2013 23:37
    marcinj12
    Poziom 40  

    Ojjj, namieszałeś w tym kodzie w pliku - zrób to jeszcze raz, porządnie.

    Zmienną FinalRow wyszukujesz w arkuszu "godziny".

    Do zmiennej "szukana" przypisujesz wartości z arkusza z arkusza faktury, ale pętlę For masz do FinalRow z innego arkusza...

    Potem, to co masz w zmiennej "szukana", próbujesz wyszukać znowu w arkuszu faktury, w kolumnie F - gdzie masz walutę - a do tego w zakresie do FinalRow, które jest wzięty z arkusza "godziny"...

    Zrób to jeszcze raz porządnie i orientuj się, co chcesz wyszukać, gdzie chcesz wyszukać i na którym arkuszu w danym momencie pracujesz.

    0
  • #11 18 Lip 2013 01:22
    Jarmuch
    Poziom 9  

    To jest mój pierwszy program w VBA i nie wiedziałem, że źródło z której czerpie wartości do zmiennej są istotne... Skoro pracuje na kilku arkuszach to muszę przepisywać zmienne? Czy porządkowanie jak to ująłeś przeprowadzić w inny sposób? Krótki komentarz rozjaśniłby na czym się skoncentrować

    0
  • #12 18 Lip 2013 07:50
    adamas_nt
    Moderator Programowanie

    Jarmuch napisał:
    To jest mój pierwszy program w VBA
    To nie gra roli, najważniejsze żebyś rozumiał co się dzieje.

    Wyobraź sobie (lub wyrwij z zeszytu i opisz) trzy kartki. W nagłówku 1-szej napisz "Faktury (baza)", na drugiej "godziny (WSD2)", na trzeciej "Wynik(WSD)"

    Pytaj i odpowiadaj.
    1. Z której kartki pobieram dane dla zmiennej 'szukany'? Wg rozmiaru tabelki narysowanej na tej a nie innej kartce muszę przypisać wartości dla FinalRow i FinalCol
    2. Na której kartce jest tabela, w której muszę wyszukać wartość zmiennej 'szukany' aby określić Nr wiersza (c.Row)
    3. Następne
    4. I następne

    Testuj:
    tst1=WSD2.Range("A1")
    tst2=baza.Range("A1")

    Zauważ, że zmienne mają różną wartość, czyli pochodzą z różnych miejsc skoroszytu.

    Przy wykonywaniu kodu krokowo (klawisz [F8]), ustawienie kursora "nad" zmienną, spowoduje wyświetlenie jej wartość w chmurce.

    Testuj, wnoś poprawki, testuj, poprawiaj, testuj... aż do skutku.

    0