Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

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

Jarmuch 15 Jul 2013 22:47 2763 11
  • #1
    Jarmuch
    Level 10  
    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?

    Code: vb
    Log in, to see the code
  • #2
    marcinj12
    Level 40  
    Musiałbyś plik załączyć...
  • #3
    Jarmuch
    Level 10  
    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
  • #4
    marcinj12
    Level 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?
  • #5
    Jarmuch
    Level 10  
    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

    Code: vb
    Log in, to see the code
  • #6
    marcinj12
    Level 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ą?
  • #7
    Jarmuch
    Level 10  
    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
  • Helpful post
    #8
    marcinj12
    Level 40  
    Jarmuch wrote:
    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.
  • #9
    Jarmuch
    Level 10  
    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
  • #10
    marcinj12
    Level 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.
  • #11
    Jarmuch
    Level 10  
    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ć
  • #12
    adamas_nt
    Moderator of Programming
    Jarmuch wrote:
    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.