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

EXCEL - Masowe dodawanie i usuwanie danych

14 Lis 2013 18:34 2361 11
  • Poziom 23  
    Witam. Właśnie pracuję nad udoskonaleniem mojego pliku i mam pewien problem z którym nie mogę sobie poradzić. Mam pewne okno UserForm w którym mogę przefiltrować listę pracowników. Obok w oknie (zaznaczone na screenie) mam opcję z którą nie mogę sobie poradzić. Jest tam przycisk 'Dodaj'. Na chwilę obecną udało mi się zrobić tak że w oknie ComboBox wybieram przodowego i po kliknięciu na 'Dodaj' dodaje mi wpis z ComboBox dla zaznaczonego pracownika do kolumny 'U' w arkuszu 'Lista pracowników'. I ta opcja działa poprawnie. Jednak ja chciałbym aby takie dodawanie wpisu z ComboBox było możliwe jednocześnie dla wielu pracowników. Na chwilę obecną w oknie z listą pracowników jest wyłączona opcja MultiSelect. Jak zrobić aby po zaznaczeniu opcji MultiSelect w oknie z listą pracowników możliwe było zaznaczenie wielu pracowników i dodanie dla nich wpisu z okna ComboBox za jednym kliknięciem na przycisk 'Dodaj'? Drugi problem z którym nie mogę sobie poradzić to przycisk 'Usuń przodowego'. Jakim kodem mogę usunąć z kolumny 'U' w arkuszu 'Lista pracowników' wszystkie wpisy które zostaną wyświetlone w oknie ComboBox zaznaczone na screenie? Dołączam plik. W archiwum znajduje się folder 'Foto' który jest potrzebny do prawidłowej pracy pliku. Bardzo proszę o pomoc.

    EXCEL - Masowe dodawanie i usuwanie danych
  • Moderator Programowanie
    1. Pomyliłeś Labele. Powinno być
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    i podobnie niżej, ale to nie będzie już potrzebne.

    2. Zamiast podstawiania indeksu jako Nr wiersza (ostWrs = Label14.Caption), powinieneś zastosować pętlę. Podobną do tej w 'lstFiltr_Change'.
    Spróbuj jak to działa
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    Teraz tylko pozostaje wyszukanie zaznaczonych pracowników - wartość: lstFiltr.List(i) w pętli lub metodą 'Find' i podstawienie przodowego z Kombo...
  • Poziom 23  
    No tylko jak to zrobić, bo ja zupełnie sobie z tym nie radzę :(
  • Pomocny post
    Moderator Programowanie
    Po prostu (blok w kodzie przycisku)
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    Usuwanie podobnie, tylko: .Cells(ostWrs, 21) = ""

    Edit: Nie możesz po indeksie listy, ponieważ jeśli włączysz któryś z filtrów (po lewej), to nie będzie się zgadzać kolejność...
  • Poziom 23  
    Dzięki wielkie, działa idealnie :) A proszę powiedz mi jak zmienić poniższy kod który jest umieszczony w 'lstFiltr_Click' tak aby pokazywał jakiego aktualnie pracownika zaznaczyłem? Przed włączeniem opcji MultiSelect w oknie lstFiltr i zmianą kodu na Twój pokazywało mi tam dane pracownika i jego foto a teraz nic nie pokazuje. Jak zmienić kod aby pokazywał mi dane pracownika i foto ostatnio zaznaczonego pracownika w MultiSelect?

    EXCEL - Masowe dodawanie i usuwanie danych

    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    Moderator Programowanie
    Przenieś do Change (zdaje się, że Click możesz wyrzucić)
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Z tym labelem od konta, też coś się nie klei. Powinno być przy Change
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    Nie zapomnij dopisac w Initialize: Label6.Caption = ""
  • Poziom 23  
    Jeśli chodzi o pierwszy kod do wyświetlania pracownika i foto to nie działa. Kod do konta działa super. Wrócę jeszcze do usuwania przodowego. Nie do kończ o takie usuwanie mi chodzi, czyli: .Cells(ostWrs, 21) = "" . Taka opcja usuwa tylko przodowego dla zaznaczonych pracowników. Opcja usuwania przodowego zupełnie nie ma być związana z pracownikami. Usuwanie ma polegać na tym że z kolumny 'U' mają zostać usunięte wszystkie wpisy które wyświetlają się w TextBox1
  • Pomocny post
    Moderator Programowanie
    Jeśli chodzi o foto. Źle jest pobierana nazwa pliku. Zakładając, że nazwy obrazków=nazwisko pracownika (a tak z Twojego kodu wychodzi), to
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    Przy usuwaniu nazwiska przodowego najprościej będzie zastosować 'Do While' do pustej. I jeśli się zgadza, usuwasz...
  • Poziom 23  
    Dzięki wielkie. Działa super. A proszę pomóż mi jeszcze z tym usuwaniem. Nie wiem jak to zrobić. Chodzi o takie usuwanie które sprawdzi że nazwa która wyświetla się ComboBox będzie istniała w kolumnie 'U' arkusza to po prostu z tej kolumny usunie tak samo brzmiące wpisy pamiętając o tym że nie może usunąć całego wiersza a tylko wpis z komórki
  • Moderator Programowanie
    Chodzi o taką alternatywę Command1? powinno działać takie coś
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    Przeklej sobie testowanie kontrolek z CommandButton1.
    Oczywiście można to samo osiągniesz przez WorksheetFunction.Match lub Evaluate("=MATACH(..."), ale skoro 'Find' już znasz ;)
  • Poziom 23  
    No tak jest ok. Ale ten kod ma zasadę działania taką samą jak dodawanie. Ja chcę usuwanie zrobić które nie będzie miało związku z filtrowaniem. Ten kod usunie wpis pod warunkiem jeśli przefiltruję pracowników. Usuwanie ma polegać na tym że zaznaczam w ComboBox przodowego którego chcę i bez żadnego połączenia z filtrem po kliknięciu na usuń ma z kolumny 'U' usunąć wszystkie wpisy jakie zostaną zaznaczone w ComboBox. Czyli 'jeśli ComboBox = x to w kolumnie 'U' usuń z komórek wszyto co jest równe x'
  • Moderator Programowanie
    Oj przemyśl to. Żebyś nie zbudował bomby z opóźnionym zapłonem. Masz przecież przycisk "zaznacz wszystko"...
    Na wszelki wypadek i tak zapytałbym się (msgbox). A nuż ktoś nie trafił myszą we właściwy guzik...

    P.S. Usuwanie "jak leci" zrealizujesz w prostej pętli 'While', wszystkiego 3-4 linijki...