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.

Pierwszy pusty wiersz - po skopiowaniu z 2003 do 2007 makro nie działa

pearljammer 05 Lis 2014 15:48 855 10
  • #1 05 Lis 2014 15:48
    pearljammer
    Poziom 6  

    witam,
    proszę o pomoc, moja cała znajomość programowania ogranicza się do znajdowania i dostosywania formuł - kiedyś znalazłem i dostosowałem do swoich potrzeb makro do wprowadzania danych w arkusz za pomocą userform z przyciskami do przechodzenia między wierszami, wstawiania i kasowania wierszy - ogólnie bardzo fajny programik.
    niestety po skopiowaniu arkusza z wersji 2003 do 2007 coś się sypie i nie czyta formuły:
    dla zapisu:
    iLastPos = GetFirstEmptyRow(ThisWorkbook.Worksheets("baza")) - 1
    pokazuje
    Sub or Function not defined
    podkreślenie zaznacza na niebiesko, powinien być inny zapis w tej wersji excela?
    może ktoś pomóc?

    0 10
  • #2 05 Lis 2014 16:18
    PRL
    Poziom 33  

    Nie skopiowałeś wszystkich funkcji z pliku źródłowego.
    Konkretnie chodzi o funkcję 'GetFirstEmptyRow'.
    Ale możesz zamienić wiersz z błędem na:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Błąd nie wynika z różnych wersji Excela.

    0
  • #3 05 Lis 2014 18:57
    pearljammer
    Poziom 6  

    PRL napisał:
    Nie skopiowałeś wszystkich funkcji z pliku źródłowego.
    Konkretnie chodzi o funkcję 'GetFirstEmptyRow'.
    Ale możesz zamienić wiersz z błędem na:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Błąd nie wynika z różnych wersji Excela.


    kurcze już sprawdzałem na wszystkie sposoby, i się poddałem.
    w załączeniu zamieszczam plik - arkusz działa w pliku utworzonym w wer.2003 ale nie działa ani w 2007 ani2013 (może chodzi o inne rozszerzenie xls a xlsm?-no ale formuła powinna działać.
    próbowałem skopiować inne potrzebne arkusze do pliku w wer.2003 ale tam z kolei wyskakuje że jest inna ilość wierszy i kolumn więc teraz z moim problemem stoję w rozkroku i ani w te, ani we wte!
    (trzeba zmienić rozszerzenie na .xlsm)

    0
  • #4 05 Lis 2014 19:05
    PRL
    Poziom 33  

    Tak jak masz funkcję

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Tak samo musisz mieć funkcję 'GetFirstEmptyRow'.
    Zapytam inaczej: wiesz o czym mówię, czy też kombinujesz przez kopiuj/wklej?

    P.S. Nie trzeba określać 'Value', 'Text' etc. gdy te są zwracane, jako domyślne.
    Inaczej mówiąc a = Me.Text, to to samo, co a = Me.Text.Text.
    x = Cells(1,1).Value. to to samo, co x = Cells(1,1).

    0
  • #5 05 Lis 2014 19:49
    pearljammer
    Poziom 6  

    no szczerze to kombinuję próbując być cwańszy niż jestem
    i tak już był sukces jak znaleziony kod jak ten udało się dostosować i zadziałał,
    teraz wywala "Expected function or variable" chcociaż już sam formularz się uruchomił, wciąż nie wiem gdzie jest różnica między tym działąjącym a obecnym poza tym co dopisałem

    0
  • #6 06 Lis 2014 07:12
    adamas_nt
    Moderator Programowanie

    PRL napisał:
    Tak jak masz funkcję
    Prawdę mówiąc, nie ma funkcji. Jest makro. Różnica jest w tym, że makro (Private Sub) się wykonuje, funkcja (Function) zwraca wartość.
    W załączonym pliku, zdaje się, brakuje modułu z tą właśnie funkcją.

    Następna sprawa to argument: GetFirstEmptyRow(ThisWorkbook.Worksheets("baza")) - 1
    o co tu chodzi? Mam wrażenie jak by czegoś nie dopisano...

    I jeszcze jedna uwaga. Wszystkim zmiennym dot. wierszy należy zmienić typ z Integer na na Long. W Excel v. >2003 arkusze są "pojemniejsze".

    0
  • #7 06 Lis 2014 07:22
    PRL
    Poziom 33  

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Adamas, właśnie autorowi napisałem, że brakuje ww funkcji.
    Gdzieś ją posiał...

    A funkcja najzwyczajniej zwraca ostatni wiersz z podanego arkusza, jak widać.

    0
  • #8 06 Lis 2014 07:44
    adamas_nt
    Moderator Programowanie

    Aaa! Znaczy - argumentem funkcji jest obiekt. Krócej/prościej byłoby przekazać jedynie nazwę (as String). Ciekawe w takim razie co tam (w tej nieskopiowanej funkcji) się dzieje ;)

    0
  • #9 06 Lis 2014 09:27
    PRL
    Poziom 33  

    Mnóstwo się dzieje.;)
    Aż jedna linijka:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    A dla Autora załącznik.

    Nie zapomnij zmienić iLastPos z Integer na Long oraz

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    na

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Edit: dodałem +1, gdyż nazwa funkcji ma zwrócić ostatnią pustą komórkę.
    A tak w ogóle, to nie wiem, skąd Autor wymyślił - 1?

    0
  • #10 06 Lis 2014 11:38
    pearljammer
    Poziom 6  

    no udało się odpalić formularz po wprowadzonych poprawkach, przechodzi po wierszach i zczytuje dane ale jedynie jak wykasuję zawartość makra:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    modyfikowałem ten zapis wg Waszych wskazówek ale wciąż nie mogę wpisać w arkusz nowowprowadzonych w formularz danych.
    dziwne że ten sam dokładnie kod działa w Excelu2003 (plik w załączeniu) i naprawdę nie mogę dojść dlaczego nie działa w nowym Excelu!- rozwiązanie zdecydowanie ponad moje siły!

    0
  • #11 07 Lis 2014 07:08
    adamas_nt
    Moderator Programowanie

    Zapisywanie masz przecież (i słusznie) realizowane przy naciśnięciu klawiszy nawigacji. Pod klawiszem 'OK', poza Unload, kod usunięto. Dopisz po prostu 'SaveDataToRow iCurrentPos' i z głowy.

    0