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 - Początki z Userform - Dodawanie/usuwanie do/z listobox

m4xon 20 Paź 2016 12:05 1554 16
  • #1 20 Paź 2016 12:05
    m4xon
    Poziom 15  

    Cześć koledzy,

    Mam do Was ogromną prośbę, mianowicie chciałbym wejść odrobinę w świat Userformów, do tej pory wykonywałem najprostsze, gdzie umieszczałem przyciski start, zapisz etc. Teraz chciałbym pójść o krok dalej, ale totalnie się zagubiłem.

    Mianowicie tworzę makro, które na podstawie listy funduszy w listoboxie będzie usuwać dane z raportu. Mianowicie, jeżeli dany fundusz będzie na liście to go nie usunie z raportu (w raporcie numer funduszu jest w 1 kolumnie). W załączeniu zaprojektowany Userform.

    Niestety nie mam bladego pojęcia jak to ugryźć, stąd bardzo proszę Was o pomoc.

    Pozdrawiam
    maxon

    0 16
  • #2 20 Paź 2016 12:16
    JRV
    Specjalista - VBA, Excel

    Arkusz bez UserForm.
    Co to jest fundusz ? Nie znam 100% polskiego ezyka.

    m4xon napisał:
    będzie usuwać dane z raportu
    Jak te dane bedzie dodawane?

    0
  • #3 20 Paź 2016 12:34
    m4xon
    Poziom 15  

    Fundusz w tym przypadku to jest kod numerowy i nazwa, np: 1234 (numer) TEST (nazwa). Ewentualnie nazwa nie jest potrzebna, tylko sam numer czyli jakieś 1234, 8753, 5432 itp - bo nie chcę tego za bardzo sobie skomplikować, a chciałbym zrozumieć jak to się tworzy.

    Dane z raportu będą importowane, dodam jeszcze na górze przycisk "Importuj raport", dobrze, że zwrócileś uwagę.

    0
  • #4 20 Paź 2016 13:00
    JRV
    Specjalista - VBA, Excel

    m4xon napisał:
    Dane z raportu będą importowane

    Z tego wynika, że raport będzie w oddzielnym pliku, importujesz dane do arkusza kalkulacyjnego(Macro.xlsx)
    m4xon napisał:
    makro, które na podstawie listy funduszy w listoboxie będzie usuwać dane z raportu
    m4xon napisał:
    jeżeli dany fundusz będzie na liście to go nie usunie z raportu

    Tak co wlasnie makro ma dzialac? Gdzie makiet raportu?

    0
  • #5 20 Paź 2016 13:09
    m4xon
    Poziom 15  

    Dokładnie, załączam raport, np fundusz MD919 będzie znajdował się na listboxie i makro w toku działania nie będzie usuwało go z raport.

    Co do samego raportu to dane będą przekopiowywane do Arkusza1

    0
  • Pomocny post
    #6 20 Paź 2016 13:20
    JRV
    Specjalista - VBA, Excel

    Teraz każdy, kto chciałby pomóc, należy utworzyć UserForm zawierający nazwy elementów, które mogą nie pokrywać się z Twoimy... Możemy grzecznie zapytać "Pokaż formularza, nie w zdjęcie tylko w pliku"?

    0
  • #7 20 Paź 2016 20:31
    m4xon
    Poziom 15  

    Wybacz JRV, byłem przekonany, że w pierwszym poście wrzuciłem prawidłowy plik. Załączam jeszcze raz spakowanego.

    Tak jak pisałem wcześniej, zależy mi żeby makro zawierało listę funduszy (kodów), które można powiększać o kolejne nowe lub odejmować niepotrzebne. Makro będzie miało za zadanie usuwać wszystkie fundusze/kody inne niż na liście.

    Domyślam się, że w excelu musi być dodatkowa karta gdzie ta lista z listboxa będzie aktualizowana? A może źle podchodzę do tematu?

    Jeszcze raz przepraszam za niepotrzebne zamieszanie, mój błąd.

    0
  • Pomocny post
    #8 22 Paź 2016 14:21
    Prot
    Poziom 29  

    m4xon napisał:
    zależy mi żeby makro zawierało listę funduszy (kodów), które można powiększać o kolejne nowe lub odejmować niepotrzebne. Makro będzie miało za zadanie usuwać wszystkie fundusze/kody inne niż na liście.


    Czy ja dobrze rozumiem kolego "m4xon", że oczekujesz żeby na forum ktoś sporządził Ci listę funduszy unijnych ? :D

    A na poważnie to gdybyś zamiast pustego arkusza - przesłał arkusz roboczy (fundusze unijne nie stanowią chyba żadnej tajemnicy korporacyjnej :?: ) to forumowicze szybciej mogliby Ci pomóc rozwiązać ewentualne problemy w "oskryptowaniu" Twojego formularza :idea:

    BTW Czemu formularz z załączonego pliku xlsm jest inny od tego z postu #1 :D

    0
  • #9 23 Paź 2016 21:21
    m4xon
    Poziom 15  

    Prot napisał:
    m4xon napisał:
    zależy mi żeby makro zawierało listę funduszy (kodów), które można powiększać o kolejne nowe lub odejmować niepotrzebne. Makro będzie miało za zadanie usuwać wszystkie fundusze/kody inne niż na liście.


    Czy ja dobrze rozumiem kolego "m4xon", że oczekujesz żeby na forum ktoś sporządził Ci listę funduszy unijnych ? :D

    A na poważnie to gdybyś zamiast pustego arkusza - przesłał arkusz roboczy (fundusze unijne nie stanowią chyba żadnej tajemnicy korporacyjnej :?: ) to forumowicze szybciej mogliby Ci pomóc rozwiązać ewentualne problemy w "oskryptowaniu" Twojego formularza :idea:

    BTW Czemu formularz z załączonego pliku xlsm jest inny od tego z postu #1 :D


    Czołem Prot.
    Nie nie ma to nic wspólnego z funduszami unijnymi, fundusze to kolumna w raporcie określająca konta księgowe, głupia nazwa w sumie, mogłem napisać konta :-)

    Załączyłem raport, który generuję z aplikacji, nie wiem co jeszcze mogę dorzucić :-) formularz jest inny, bo kombinowałem coby był jak najmniej skomplikowany, ale jak napisałem nie jestem biegły w userformach i nie wiem czy potrzebne są jeszcze jakieś dodatkowe pola :-) Tak naprawdę ogólna logika działania wygląda na prostą, czyli mam na listoboxie wszystkie fundusze, zaznaczam te które mnie interesują i daje start i makro powinno usunąć wszystkie pozostałe (oprócz tego musze jakoś móc dodać nowe i usunąć start, stąd przyciski dodaj usuń). Z chęcią pokombinuje jak to ogarnąć jak mnie trochę naprowadzicie podpowiecie jak zacząć, bo póki co nie mam pomysłu, widziałem kilka userformów gotowych i trochę to poplątane, ale może takie pierwsze wrażenie ;-)

    załączam jeszcze raz pliczek w raportem tak jak mówisz :-)

    0
  • Pomocny post
    #10 24 Paź 2016 00:25
    Prot
    Poziom 29  

    m4xon napisał:
    ...fundusze to kolumna w raporcie określająca konta księgowe, głupia nazwa w sumie, mogłem napisać konta :-)


    No to teraz trochę więcej wiadomo o co chodzi ?

    Tak się składa, że z formularzami zetknąłem się pierwszy raz jak opracowywałem sobie w Excelu v. 4.0 aplikację do fakturowania i księgowania uproszczonego (KPiR) całej gospodarki materiałowej :D . Obecnie wykorzystuje nowsze wersje Accessa i Excela lecz już do prowadzenia pełnej księgowości :!: .

    Formularze są wygodną formom (GUI) do wprowadzania i obróbki danych - jednakże w mojej ocenie ich użyteczność jest wprost proporcjonalna do ich przemyślanego oskryptowania :idea:

    Musisz dokładnie wiedzieć: jaki strumień danych posiadasz na wejściu (ich typ, rozmiary, typowe błędy itp) i w jakiej formie będą one wprowadzane do systemu (tabele Excela, Accessa lub raw text) ?; jakie przekształcenia tych danych chcesz przeprowadzić i jakie formuły, funkcje czy kwerendy można do tego typu przekształceń wykorzystać ? oraz ostatecznie jakie dane i w jakiej formie chcesz uzyskać na wyjściu z systemu ?

    Formularze stanowią ten GUI dla poszczególnych faz funkcjonowania systemu ale nie stanowi problemu ukształtowanie graficzne takiego formularza ale stworzenie skryptu procedury, która przeprowadzi oczekiwane przekształcenia danych :D

    Po analizie Twojego nowego załącznika spróbuje coś podpowiedzieć więcej.

    0
  • #11 24 Paź 2016 13:07
    m4xon
    Poziom 15  

    Prot napisał:
    m4xon napisał:
    ...fundusze to kolumna w raporcie określająca konta księgowe, głupia nazwa w sumie, mogłem napisać konta :-)


    No to teraz trochę więcej wiadomo o co chodzi ?

    Tak się składa, że z formularzami zetknąłem się pierwszy raz jak opracowywałem sobie w Excelu v. 4.0 aplikację do fakturowania i księgowania uproszczonego (KPiR) całej gospodarki materiałowej :D . Obecnie wykorzystuje nowsze wersje Accessa i Excela lecz już do prowadzenia pełnej księgowości :!: .

    Formularze są wygodną formom (GUI) do wprowadzania i obróbki danych - jednakże w mojej ocenie ich użyteczność jest wprost proporcjonalna do ich przemyślanego oskryptowania :idea:

    Musisz dokładnie wiedzieć: jaki strumień danych posiadasz na wejściu (ich typ, rozmiary, typowe błędy itp) i w jakiej formie będą one wprowadzane do systemu (tabele Excela, Accessa lub raw text) ?; jakie przekształcenia tych danych chcesz przeprowadzić i jakie formuły, funkcje czy kwerendy można do tego typu przekształceń wykorzystać ? oraz ostatecznie jakie dane i w jakiej formie chcesz uzyskać na wyjściu z systemu ?

    Formularze stanowią ten GUI dla poszczególnych faz funkcjonowania systemu ale nie stanowi problemu ukształtowanie graficzne takiego formularza ale stworzenie skryptu procedury, która przeprowadzi oczekiwane przekształcenia danych :D

    Po analizie Twojego nowego załącznika spróbuje coś podpowiedzieć więcej.


    Dzięki za wsaprcie :-)

    Ogólny zamysł nie jest skomplikowany, wiem, że mogę to zrobić wrzucając listę funduszy do arkusza i ustawić żeby np zrobił vlookup i usunął nieznalezione, ale chciałbym żeby to było trochę przyjaźniejsze i łatwiejsze było dodawanie lub usuwanie dodatkowych kont :-)

    0
  • #12 24 Paź 2016 19:15
    Prot
    Poziom 29  

    m4xon napisał:

    Ogólny zamysł nie jest skomplikowany
    :?:

    Musisz pamiętać, że tego typu działania w Excelu dają dość ulotny efekt :cry: . Jak coś wykasujesz w arkuszu źródłowym np Raport to konto oczywiście możesz ponownie wstawić ale tracisz już dane wartości dotyczące tego konta, ilość wystąpień operacji na tym koncie, chronologię oraz globalne obroty na tym koncie :cry:

    Dla zachowania wszystkich danych źródłowych ja preferuję wprowadzanie wszystkich danych do bazy Accessa (z zachowaniem pełnej chronologii i identyfikacji zdarzeń) i później import odpowiednich kwerend z tej bazy do obróbki i analizy do arkuszy Excela.

    Nie rozumiem nadal celu Twego działania - tworzenia formularza z takim funkcjonalnościami :?:

    Jakieś szczególne analizy ? analityka obrotów na grupie kont ? no nie wiem :D
    Z mojego doświadczenia wynika, że do takich analiz (robionych systematycznie)
    najwygodniejsze są kwerendy składające SQL przykładowo dla analizy rodzajowej kosztów wystarczy "wydziubać" małą kwerendę :|

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    potem zaimportować ją do sformatowanego arkusza Excela i już mamy przejrzystą analitykę kosztów :D .
    VBA - Początki z Userform - Dodawanie/usuwanie do/z listoboxanal 4..JPG Download (93.29 kB)

    0
  • Pomocny post
    #13 30 Paź 2016 16:01
    Prot
    Poziom 29  

    Prot napisał:

    Po analizie Twojego nowego załącznika spróbuje coś podpowiedzieć więcej.


    Wprawdzie autor postu nie odpowiada na szczegółowe pytania - ale "słowo się rzekło - kobyłka u płota" :D

    Plik przeanalizowałem i wg mnie takie funkcjonalności jakie opisywał m4xon
    Cytat:
    zależy mi żeby makro zawierało listę funduszy (kodów), które można powiększać o kolejne nowe lub odejmować niepotrzebne


    można przykładowo zrealizować przy użyciu formularza
    z wykorzystaniem pola listy z wielokrotnym wyborem.
    Cały arkusz i formularz musi być oczywiście odpowiednio oskryptowany w VBA i wyposażony w dynamiczne zakresy nazwane :cry: .

    Przykładowe rozwiązanie dla Excel 2007 przedstawiam w załączonym pliku
    ProtMac...zip Download (59.95 kB)Punkty: 2 dla użytkownika

    0
  • #14 04 Lis 2016 12:14
    m4xon
    Poziom 15  

    Dzięki Prot, twóje makro dało mi kilka odpowiedzi. Twoje zastosowanie listoboxa będzie bardzo dobrze się sprawdzać. Programuję przycisk Usuń fundusz z lity w ten sposób, że chcę wybrać na liście jeden lub więcej i po klilknięciu Usuń fundusze te zostaną wyrzucone z listy, która jest utworzona w ukrytym arkuszu.

    Mam taki pomysł:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Jednak mam error na ListBox2.RemoveItem I jak w załączniku...

    Chyba, że to obejść opcją find i delete row w pętli, tylko jak w to wpleść multiselect z listoboxa?

    Dzięki

    0
  • #15 04 Lis 2016 13:17
    Prot
    Poziom 29  

    Witam !

    Mnie wyszukanie metody zapewniającej założoną funkcjonalność zajęło 6 dni :cry:
    Jestem pewien na 100%, że można to zrobić na kilka innych sposobów :D i lepiej, ale muszę Ci zwrócić uwagę, że przy wszelkich modyfikacjach kodu trzeba dokładnie przeanalizować funkcjonowanie całego projektu:kody kontrolek userform, kody związane z wykorzystywanym arkuszem, ustawienie formuł i dynamicznych nazw w arkuszu, oraz relacji i interakcji tych elementów :idea:

    Metoda RemoveItem nie będzie dobrze działać z moim arkuszem Rob bo jego kod przygotowany jest na automatyczne odświeżanie zawartości po wszelkich zmianach, a nie wiem czy w ogóle i jak zadziała on z kilkoma pustymi komórkami w kolumnie ?

    Przy tworzeniu kodu VBA dobrym narzędziem jest w edytorze MVB - debuger :!:

    Przejrzyj krok po kroku co się dzieje przy Twoich modyfikacjach ? Gdzie nie włączyłeś aktywacji arkusza ? Czy i jakie wartości przyjmują Twoje zmienne ?
    Jak przechodzi focus na arkuszu ? itp itd

    0
  • #16 04 Lis 2016 18:46
    clubs
    Poziom 30  

    m4xon napisał:
    Jednak mam error na ListBox2.RemoveItem I jak w załączniku...


    Witam
    Masz błąd bo masz listboxa załadowanego przez rowsource musisz zmienić na addithem

    0
  • #17 08 Lis 2016 10:38
    m4xon
    Poziom 15  

    Powoli idę do przodu, aktualnie mam tyle:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Mam mały problem z:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    Mianowicie jak wybiorę kilka rzeczy na listoboxie to chciałbym aby je usunęło, w tym celu muszę wrzucić pętle, ale nie do końca wiem jak zawrzeć w niej dane wybrane w listboxie?

    I drugie pytanie, mianowicie jak pisałem wyżej głównym zadaniem makra jest to że ma usunąć z raportu kody inne niż wybrane z listy. Chciałbym zastosować AutoFiltr i wyselekcjonować kody inne niż wybrane na ListBox, w stylu:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    w jaki sposób połączyć ListBox z Criteria?

    0