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.

[VBA, EXCEL] Wprowadzanie danych za pomoca inputbox itp - ruchome komórki

mysticmario 21 Kwi 2017 13:41 1515 10
  • #1 21 Kwi 2017 13:41
    mysticmario
    Poziom 8  

    Witam,
    Przeszukałem forum, ale nie znalazłem rozwiązania.
    jestem nowym użytkownikiem VBA i nigdy wcześneij nie programowałem, ale skonstruowalem sobie program do faktur, wcześniej już ktos pomagał mi wyedytowac poprawnie kod, moze i tym razem ktoś oświeci mnie na przyszłość.

    Mam plik faktury, w którym po kliknięciu jedngo z przycisków, kolejno wyskakują okna do uzupełnienia kolejnych sekcji faktury.
    Niestety, w pewnym momencie zorientowałem się, że gdy użyje kodu do wprowadzenia danych do komórki np Range("C5"), dane będą wprowadzane zawsze do komórki C5, ale w przypadku faktur wiaodmo, - przy większej ilosci pozycji komórki sie przesuwają, ale moje inputboxy i cała reszta boxów dalej klepią dane "na sztywno". Ominąłem to jak widać w sprytny sposób, ale niestety zawiódł mnie, ponieważ oprócz klepania faktur.
    na koniec kopiuje te wszytskie dane do bazy faktur i tu problem, bo ctrl+f nie znajdzie mi rzeczy poumieszczanych w polach tekstowych
    oto mój kod:
    Jak mogę zrobić, zeby dane wpadąły do komórki C5, chyba, że sie przesunie w dół to wtedy ma wbić dane np do C6 czy tam C15

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0 10
  • #2 21 Kwi 2017 20:45
    adamas_nt
    Moderator Programowanie

    Przypisania są zapewne w kodzie któregoś z UserForm. Wrzuć przykładowy plik z wszystkimi elementami (dane osobowe usuń lub zmień na fikcyjne).

    0
  • #3 22 Kwi 2017 09:09
    mysticmario
    Poziom 8  

    Zmiana w kodzie będzie taka sama wszędzie.
    Postaram sie wyjasnic lepiej.
    Mam komórke C5 w której wpisuje numer zamówienia klienta, wykorzystując do tego inputbox. Wszystko działa świetnei do momentu, kiedy zamiast 6 produktów faktura ma 7 produktów, tak więc dodaje nową linie z produktem, co automatycznie przesuwa mi komórke C5, w której ma byc numer zamówienia jedna linie niżej czyli teraz mój inputbox musi wstawi numer zamówienia do komórki C6, a nie C5. Ale przy powyższym kodzie zawsze będzie wstawiał do C5 - jak uelsatycznic kod, aby brał pod uwage przesunięcia?

    0
  • #4 27 Kwi 2017 00:55
    lanzul
    Poziom 25  

    mysticmario napisał:
    ... Mam komórke C5 w której wpisuje numer zamówienia klienta, wykorzystując do tego inputbox. Wszystko działa świetnei do momentu, kiedy zamiast 6 produktów faktura ma 7 produktów, tak więc dodaje nową linie z produktem, co automatycznie przesuwa mi komórke C5, w której ma byc numer zamówienia jedna linie niżej czyli teraz mój inputbox musi wstawi numer zamówienia do komórki C6, a nie C5. Ale przy powyższym kodzie zawsze będzie wstawiał do C5 - jak uelsatycznic kod, aby brał pod uwage przesunięcia?

    :?: tak może :?:
    mysticmari...eszyt1.zip Download (12.12 kB)

    Najprostsza poprawka jaką można wnieść, nie wiedząc nic więcej o arkuszu wprowadzania danych - tworzy się tam jakieś odwołanie cykliczne (?) ...

    Kolejne linie:
    "kolejny_wiersz = Application.CountA(Range("c:c"))"
    i
    "Range("c" & kolejny_wiersz + 1).Value = coś_tam"

    wyliczają dotychczas zajęte komórki w kolumnie 'C' i w pierwszej wolnej pod nimi dopisują kolejne dane.
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #5 27 Kwi 2017 11:12
    mysticmario
    Poziom 8  

    Wrzucam oskubanyz danych plik, na którym mam makra itp.
    zawiera odwołanei cykliczne, przy wprowadzeniu daty, aby sie nei zmeiniała co uruchomienie pliku.
    Prosze nie zważac na estetyke kodu, jak juz mówiłem to dzieło mojej nauki vba w 2tyg.
    Trzeba zmeinic rzszerzenie na xlsm.
    Mam nadzieję, ze to pomoże.
    Aby posługiwac się plikiem należy wyłączyc ochronę arkusza, lub kliknac "stwórz nowa faktuę" wtedy zrobi nowa kopie pliku i go odblokuje.
    Pozdrawiam,
    Mariusz Gola

    0
  • #6 27 Kwi 2017 14:44
    Prot
    Poziom 27  

    mysticmario napisał:
    Mam komórke C5 w której wpisuje numer zamówienia klienta :?: , wykorzystując do tego inputbox. Wszystko działa świetnei :?: do momentu, kiedy zamiast 6 produktów faktura ma 7 produktów


    Czarno to widzę ten Twój projekt przy takiej "precyzji" działania i opisu :cry:
    We wszystkich wariantach faktur z Twojego pliku w komórce C5 masz albo "datę wystawienia faktury" albo "datę wydania towaru" :?: :D nie ma natomiast nigdzie na tych fakturach w/w "numeru zamówienia klienta" :!:

    Jeśli chodzi o specyfikację towarów i usług, gdzie może powstawać dylemat ilości wierszy potrzebnych w danej fakturze i przechodzenia z wpisami od pierwszego do następnego wiersza - to proponuje wykorzystanie formuł w konkretnych szablonach faktur np tak jak na zrzucie
    [VBA, EXCEL] Wprowadzanie danych za pomoca inputbox itp - ruchome komórki2017-04...png Download (41.54 kB)

    W kodzie makr musisz zapewnić wtedy tylko dynamiczne dostosowanie obszaru wydruku :!: do parametru tego szablonu =MAX(Lp).
    W Twoim projekcie wydaje się, że zupełnie o tym zapomniałeś: co będzie makro drukować czy zachowywać w pdf ?

    Zauważyłem także, że próbujesz dublować kody występujące w Twoim projekcie -
    tworzysz np kod dla UserForm3, a potem w "Twym ostatnim dziecku" - module10 ponownie kombinujesz nad innym wprowadzaniem nazwiska osoby wystawiającej fakturę :D Moim zdaniem ten kod UserForm jest wygodniejszy jeśli ten projekt robisz dla siebie, czy własnej firmy.

    0
  • #7 28 Kwi 2017 02:06
    lanzul
    Poziom 25  

    mysticmario napisał:
    ... zawiera odwołanei cykliczne, przy wprowadzeniu daty, aby sie nei zmeiniała co uruchomienie pliku.

    Linię z kodem:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    Należy zamienić na:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    W komórki 'C5' i 'C6' nie będzie wprowadzana funkcja, tylko wynik formatowania tekstowego funkcji 'Dziś()'

    Dalej:
    mysticmario napisał:
    ...
    1. Mam komórke C5 w której wpisuje numer zamówienia klienta, wykorzystując do tego inputbox.

    2. Wszystko działa świetnei do momentu, kiedy zamiast 6 produktów faktura ma 7 produktów,
    3. dodaje nową linie z produktem, co automatycznie przesuwa mi komórke C5, w której ma byc numer zamówienia jedna linie niżej czyli teraz mój inputbox musi wstawi numer zamówienia do komórki C6, a nie C5. Ale przy powyższym kodzie zawsze będzie wstawiał do C5
    ...

    Ad 1.
    W komórkę 'C5', jak i w 'C6' są wprowadzane 'daty', co wynika z kodu makra, a nie 'nr zamówienia klienta'.
    Rozumiem tutaj, że ów 'nr zamówienia klienta', to w rzeczywistości 'nr faktury' (?)

    Ad 2. i Ad 3.
    hmm ... Cały szkopuł w tym, że żadne dane z okien dialogowych 'inputbox' nie są wpisywane w żadne komórki, lecz w pola tekstowe.
    Dodając nowy wiersz w tabeli z pozycjami faktury, np: na zakładce "waluta PLN, ENG 0%" jedyne co można 'przesunąć', to pola tekstowe znajdujące się poniżej tabelki: 'REF', 'REQ', 'PO', 'Opis ogólny' i 'Stawki VAT'
    [VBA, EXCEL] Wprowadzanie danych za pomoca inputbox itp - ruchome komórkimysticmari...ls_002.jpg Download (45.7 kB)

    Żeby uniknąć, 'pewnych niechcianych zachowań' pól tekstowych można im, w ich właściwościach, zaznaczyć odpowiednie opcje:
    [VBA, EXCEL] Wprowadzanie danych za pomoca inputbox itp - ruchome komórkimysticmari...ls_001.jpg Download (48.58 kB)

    lub

    pobawić się sterowaniem położenia tych pól tekstowych z poziomu kodu:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    Natomiast, co się tyczy 'uelastycznienia kodu' w tym konkretnym przypadku, to powinna być brana pod rozwagę opcja całkowitego przerobienia formularzy, tak aby każda wpisywana dana miała swoją komórkę lub zakres w arkuszu. Łatwiej wtedy cokolwiek zrobić, niż przesuwać sobie pola tekstowe punkt po punkcie na ekranie monitora kodem makra, bo to raczej żmudna robota ... :|

    Ps: To przesuwanie 'programowe' pól tekstowych, to trochę tak jak dzierganie takiego formularza w pliku tekstowym, wykorzystując do tego znaki odstępu, tabulatora, itd.

    0
  • #8 29 Kwi 2017 23:40
    lanzul
    Poziom 25  

    mysticmario napisał:
    ... działa świetnei do momentu, kiedy zamiast 6 produktów faktura ma 7 produktów, tak więc dodaje nową linie z produktem, co automatycznie przesuwa mi komórke C5, w której ma byc numer zamówienia jedna linie niżej czyli teraz mój inputbox musi wstawi numer zamówienia do komórki C6, a nie C5. Ale przy powyższym kodzie zawsze będzie wstawiał do C5 - jak uelsatycznic kod, aby brał pod uwage przesunięcia?

    hmm ... po zapoznaniu się bliżej z podesłanym 'zeszytem do faktur' stwierdzam, że rzeczywiście może on być wysoce 'upierdliwy' w codziennej obsłudze ... :| ...

    Proszę się zapoznać z poniższym przykładem 'lekkiego uzdatnienia' jego funkcjonalności ... może będzie w czymś przydatny.
    Copy of FA...TURA02.zip Download (66.63 kB)Punkty: 1.5 dla użytkownika

    Poprawki bazują na:
    1. 'automatyzacji' wprowadzania danych w oparciu o 'punkty odniesienia' w arkuszu.
    Takimi są naglówki tabeli, czy pewne frazy występujące 'chyba' stale w arkuszu faktury: 'REF.', 'REQ.', 'PO:', 'Issued by', itp.

    2. wrzuceniu zawartości rozwijanych list formularzy do osobnego arkusza - znacznie łatwiej będzie w nim dopisywać nowe i odpisywać zbędne pozycje
    Jeśli coś nie pojawi się na którejś liście, to trzeba sprawdzić w danym formularzu UserForm, czy przypadkiem nie costał przekroczony zakres zarezerwowany na pozycje listy w arkuszu i odpowiednio go skorygować:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    3. automatyzacji 'czyszczenia' arkusza faktury pod nowe wpisy

    4. opcji naprawy formuł liczących wartości kwot w tabeli

    Przykład oparty o fakturę 'waluta PLN, ENG 0%' - jeśli się sprawdzi, to trzeba będzie go dostosować do innej terminologii 'punktów odniesienia' w danej fakturze.
    Reszta 'uwag' w modułach ...

    Ps: Zostawiłem pola tekstowe gwoli porównania co i gdzie jest wprowadzane w nowej wersji arkusza
    :)

    0
  • #9 19 Maj 2017 10:43
    mysticmario
    Poziom 8  

    lanzul napisał:
    mysticmario napisał:
    ... zawiera odwołanei cykliczne, przy wprowadzeniu daty, aby sie nei zmeiniała co uruchomienie pliku.

    Linię z kodem:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    Należy zamienić na:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    W komórki 'C5' i 'C6' nie będzie wprowadzana funkcja, tylko wynik formatowania tekstowego funkcji 'Dziś()'

    Dalej:
    mysticmario napisał:
    ...
    1. Mam komórke C5 w której wpisuje numer zamówienia klienta, wykorzystując do tego inputbox.

    2. Wszystko działa świetnei do momentu, kiedy zamiast 6 produktów faktura ma 7 produktów,
    3. dodaje nową linie z produktem, co automatycznie przesuwa mi komórke C5, w której ma byc numer zamówienia jedna linie niżej czyli teraz mój inputbox musi wstawi numer zamówienia do komórki C6, a nie C5. Ale przy powyższym kodzie zawsze będzie wstawiał do C5
    ...

    Ad 1.
    W komórkę 'C5', jak i w 'C6' są wprowadzane 'daty', co wynika z kodu makra, a nie 'nr zamówienia klienta'.
    Rozumiem tutaj, że ów 'nr zamówienia klienta', to w rzeczywistości 'nr faktury' (?)

    Ad 2. i Ad 3.
    hmm ... Cały szkopuł w tym, że żadne dane z okien dialogowych 'inputbox' nie są wpisywane w żadne komórki, lecz w pola tekstowe.
    Dodając nowy wiersz w tabeli z pozycjami faktury, np: na zakładce "waluta PLN, ENG 0%" jedyne co można 'przesunąć', to pola tekstowe znajdujące się poniżej tabelki: 'REF', 'REQ', 'PO', 'Opis ogólny' i 'Stawki VAT'


    Żeby uniknąć, 'pewnych niechcianych zachowań' pól tekstowych można im, w ich właściwościach, zaznaczyć odpowiednie opcje:


    lub

    pobawić się sterowaniem położenia tych pól tekstowych z poziomu kodu:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    Natomiast, co się tyczy 'uelastycznienia kodu' w tym konkretnym przypadku, to powinna być brana pod rozwagę opcja całkowitego przerobienia formularzy, tak aby każda wpisywana dana miała swoją komórkę lub zakres w arkuszu. Łatwiej wtedy cokolwiek zrobić, niż przesuwać sobie pola tekstowe punkt po punkcie na ekranie monitora kodem makra, bo to raczej żmudna robota ... :|

    Ps: To przesuwanie 'programowe' pól tekstowych, to trochę tak jak dzierganie takiego formularza w pliku tekstowym, wykorzystując do tego znaki odstępu, tabulatora, itd.


    Witam.
    Nie było mnie chwilę więc zarzuciłem projekt na chwilę.
    Postaram się w dniu dzisiejszym wykonac dokładny opis problemu w postaci wideo, inaczej nie jestem w stanie przekazać, istoty problemu.
    Po krótce:
    Komórka C5 w przypadku mojego opisu jest tylko i wyłącznie przykładem, nie ma faktycznego odniesienia w moim projekcie.
    Jeżeli chodzi o dane z okien dialogowych, Wpisywane są do pól tekstowych dlatego, że tylko w ten sposób mogłem 'ominąć' brak dynamicznych komórek.
    Utworzone pole tekstowe ma stały numer porządkowy, dzieki temu dając komende np. wprowadzenia numeru faktury w polu tekstowym 4, input box zawsze wprowadzi numer faktury do pola tekstowego 4, nie ważne gdzie to pole się znajduje. Jak zauważyłem, załączony przeze mnie plik praktycznie nie działa. Dzisiaj wieczorem usiąde do tego i nagram video opis - będzie łatwiej. Zależy mi na tym projekcie.

    0
  • #10 19 Maj 2017 21:58
    lanzul
    Poziom 25  

    mysticmario napisał:

    Postaram się w dniu dzisiejszym wykonac dokładny opis problemu w postaci wideo, inaczej nie jestem w stanie przekazać, istoty problemu.
    ...
    Komórka C5 w przypadku mojego opisu jest tylko i wyłącznie przykładem, nie ma faktycznego odniesienia w moim projekcie.
    ...
    Jak zauważyłem, załączony przeze mnie plik praktycznie nie działa. Dzisiaj wieczorem usiąde do tego i nagram video opis - będzie łatwiej. Zależy mi na tym projekcie.


    Proszę się zapoznać z plikiem zamieszczonym w odpowiedzi nr "#8".
    Jest tam przeróbka, która wpisuje dane w komórki arkusza, a nie w pola tekstowe, które są dość "sztywne", jeśli chodzi o ich przemieszczanie "dynamiczne" w arkuszu - jak się ten przykład sprawdza i czy w ogóle (?) ...

    0
  • #11 19 Maj 2017 22:32
    mysticmario
    Poziom 8  

    Pobrałem plik
    przyznam szcerze, z musze dobrze nad tym kodem posiedziec.
    Nie jestem tak biegły w VBA, wszystko mi się miesza jak to czytam. Co nie co zrozumiałem i chyba fundamentalnie źle się za to zabralem. Wydaje mi się, ze nie będę potrzebował dynamicznych komórek, aczkolwiek spróbuje tego rozwiązania z odp. #8

    0