Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Excel- Kwestionariusz pracownika. Rozszerzenie możliwości pliku

JaroFon 23 Feb 2013 22:54 12561 83
  • #61
    marek003
    Level 40  
    Nawet jak zmienisz wspomnianą przeze mnie 2 (dwójkę) na 3 ?
  • #62
    JaroFon
    Level 23  
    No tak jest tam jedna dwójka, ale choćbym zmienił ją nawet na dziesięć to i tak zapis idzie od wiersza drugiego i nie wiem dlaczego. To jest oryginalny kod wyciągnięty z okna dodawania tematów:

    Code: vbscript
    Log in, to see the code
  • #63
    marek003
    Level 40  
    No to coś nie gra.
    Za wpis do comboboxa "cmbTemat" odpowiada kod:

    Code: vbscript
    Log in, to see the code

    czyli wpis od druriego wersa do ostatniego. Jezeli zmienisz zmienną i np na i=5 zacznie wpisywać od 5 wiersza. Nie ma innej możliwości.

    Sprawdz czy napewno uruchamiasz tą procedurę cmdDodaj2_Click (lub w tej procedurze zmieniasz zmienną i )

    Jeżeli dalej nie będzie grało załącz wyrywek z arkuszem bo nie widzę możliwości by to źle działało.
  • #64
    JaroFon
    Level 23  
    Kod ten jest skopiowany z okna 'Temat' i sam zobacz, wpisałem dla przykładu cyfrę 5 a zapis zaczyna się i tak od wiersza 2. Sprawdź na oknie 'Vydejka' (na razie działa tam tylko dodawanie nowej pozycji). Przy okazji, w starym pliku mam do arkusza dołączony poniższy kod który ma za zadanie skopiować zawartość komórki w kolumnie 'C', jak ten kod przerobić aby kopiował zaznaczoną zawartość kolumny '3' w oknie ListBox? Akurat kopiowanie tej zawartości jest kluczowym elementem tego okna 'Vydejka'.

    Code: vbscript
    Log in, to see the code


    Excel- Kwestionariusz pracownika. Rozszerzenie możliwości pliku
  • #65
    JaroFon
    Level 23  
    W robocie trochę posiedziałem nad plikiem i nawet udało mi się zrobić całe okno 'Vydejka' (magazyn), dodawanie, usuwanie i edytowanie pozycji. Nawet zrobiłem kopiowanie numeru o którym wcześniej pisałem, przerobiłem trochę kod i ten poniższy umożliwia mi skopiować to co chcę:

    Code: vbscript
    Log in, to see the code


    Mam problem z jedną sytuacją, mianowicie numerowanie. Jeśli chodzi o dodawanie pozycji to bez problemu pozycje są numerowane. Jednak mam problem jak zrobić ponowne numerowanie w przypadku usuwania jakiejkolwiek pozycji. Dajmy na to że zostanie usunięta pozycja gdzieś w środku listy to jak ponownie ponumerować w takim wypadku listę. Poniższy kod służy mi do usuwania pozycji.

    Code: vbscript
    Log in, to see the code
  • #66
    marek003
    Level 40  
    Co do cmbTemat to wszystko działa tak jak trzeba. Jak dasz od 5 to jest od 5. Oczywiście zadziała dopiero jak wciśniesz dodaj. Przy aktywacji okna tego nie widać bo nie ta procedura za to odpowiada. Ale jak uruchomisz procedurę cmdDodaj2_Click (w w oknie temat) wszystko działą tak jak powinno.

    Co do numerowania tyle powinno wystarczyć (wykasowałem dubel "with"):


    Code: vbscript
    Log in, to see the code
  • #67
    JaroFon
    Level 23  
    Dzięki wielkie. Okno 'Vydejka' (Magazyn) działa poprawnie a przede wszystkim działa kopiowanie numeru więc tematu z tym oknem nie ma co już drążyć. Teraz kolejne okno a dla mnie priorytet- przeniesienie kwestionariusza pracownika ze starego do nowego pliku (łącznie z opcją (po aktualizacji) tworzenia dodatkowych (pomocniczych) list do wykorzystania w innych opcjach pliku). Myślałem o zastosowaniu opcji dodawania, edytowania i usuwania pozycji w taki sam sposób co w 'Vydejka' ponieważ działa poprawnie. Na razie to tylko testy działania i mam mały problem z poniższym. Zrobiłem nowe okno 'Kwestionariusz pracownika' które będzie służyło do ewidencji pracowników. Jak widać na poniższym screenie pierwszy STOP przy testach to dodanie Nazwiska i Imienia.

    Excel- Kwestionariusz pracownika. Rozszerzenie możliwości pliku

    ... do dodania wykorzystam poniższy kod który połączy mi Nazwisko i Imię w jedną całość i wklei do komórki:

    Code: vbscript
    Log in, to see the code


    ... jednak nie wiem jak z powrotem wrócić pracownika do okna 'Kwestionariusz' tak aby rozłączył mi Nazwisko od Imienia. Chcę wykorzystać do tego poniższy kod ale jak nim rozłączyć na okna cmdNazwisko i cmdImie? Poniższy kod jedynie wklei mi do okna cmdNazwisko całego pracownika z imieniem i nazwiskiem.

    Excel- Kwestionariusz pracownika. Rozszerzenie możliwości pliku

    Code: vbscript
    Log in, to see the code


    Problem dotyczy tylko tej jedne sytuacji bo tylko Nazwisko i Imię będzie łączone w całość. Kody są urwane z kontekstu ale myślę że będzie wiadomo o co chodzi :D
  • #68
    marek003
    Level 40  
    Nie wchodząc w szczegóły dlaczego tak a nie inaczej (np wykorzystać inny namiar) wykorzystaj split(ciąg tekstowy,znak rozdzielający).

    Bazą jest tu twój "ciąg":
    nawisko|spacja|imię

    Więc jak wpiszesz np.:
    tekst = split(ciąg," ")' między cudzysłowami jest spacja (w innym przypadku inny "separator")

    to
    nazwisko = tekst(1)
    imię = tekst(2)


    Rozumiesz?
  • #69
    JaroFon
    Level 23  
    Nie bardzo. Nie mam pojęcia jak to zrobić :cry: Z tego co napisałeś zrozumiałem że miałbym zrobić coś takiego jak poniżej ale to chyba źle zrozumiałem bo to nie działa :| :

    Code: vbscript
    Log in, to see the code


    Dodano po 1 [godziny] 12 [minuty]:

    Tak długo krążyłem aż wreszcie posklejałem to do kupy. Dzięki wielkie za pomoc. W sumie prosto mi to wyjaśniłeś ale po całodniowej dniówce gdzieś mi 'żyłka pękła' :D . Myślę że o to Ci chodziło jak w poniższym kodzie bo właśnie w ten sposób oddzielenie Nazwiska od Imienia działa poprawnie.

    Code: vbscript
    Log in, to see the code


    A co miałeś na myśli pisząc:
    marek003 wrote:
    Nie wchodząc w szczegóły dlaczego tak a nie inaczej (np wykorzystać inny namiar)...


    ...czy jest jakiś lepszy sposób na zrobienie kwestionariusza? Zrobiłem to tak jak potrafiłem ale jeśli jest lepszy i pewniejszy sposób to jestem otwarty na propozycje.
  • #70
    marek003
    Level 40  
    Ze split'em o to mi chodziło (ale jest jenen mankament poniżej).

    Co do innych "namiarów" - inaczej zrozumiałem bo z kolei jak to pisałem to byłem po piwku. Z tym że po co łączysz imię z nazwiskiem by je znów rozłaczać - nie może być to w oddzielnych komórkach? (ewentualnie trzecja komórka "nazwa" która łączy)

    Kłopot ze split'em będzie jeżeli ktoś będzie miał dwa imiona lub będzie dwunazwiskowy i rozdzielisz to spacją.
  • #71
    JaroFon
    Level 23  
    Opcje łączenia i rozłączania nazwiska od imienia mam już zastosowaną w starym 'Kwestionariuszu'. Po prostu wprowadzając nowego pracownika osobno wpisuję Nazwisko i Imię, i nie ma opcji o podwójnych imionach lun nazwiskach, a jeśli już to po prostu wprowadziłbym jedno nazwisko i imię. Stary Kwestionariusz jest zrobiony na arkuszu a nowy jak widać robię na oknie UserForm. Mam nadzieję że uda mi się poprawnie zrobić to okno. Ale mam jeszcze pytanko co do kodu 'dodającego'. Proszę powiedz mi która część kodu mówi o tym od którego wiersza zaczyna się zapis? Zapis zaczyna się od drugiego wiersza ale która część kodu o tym decyduje?

    Code: vbscript
    Log in, to see the code


    Dodano po 29 [minuty]:

    Edit

    ...wrócę do tego łączenia. Robię to po to że inne okna UserForm które są w tym jednym pliku korzystają z listy pracowników z nazwiskiem i imieniem. Jak bym zapisywał Nazwisko i Imię osobno to pozostałe okna UserForm i ich kody musiałbym pozmieniać tak aby łączyły te dwa człony, a po co se robić niepotrzebną robotę jak można to robić przy dodawaniu nowego pracownika.
  • #72
    marek003
    Level 40  
    Teoria :
    cells(nr wiersza, nr kolumny)

    więc (czytaj zielone :) ):



    Code: vbscript
    Log in, to see the code


    Jak widać zarządzanie wierszem do wpisu zależy od zmiennej ostWrs która jest określona jako ostatni zapisany wiersz w arkuszu.
    Jek chcesz zarządzać gdzie co wpisać musisz mieć wpływ w tej procedurze właćnie na tą zmienną. Jest jednak mankament że jak pamiętam zmienna ostWrs jest globalna (może tyczyć się różnych procedur - nie tylko tej) więc jeżeli byś miał niązarządzać to zmień jej nazwę i dopiero wtedy działaj.
  • #73
    JaroFon
    Level 23  
    Wydaje mi się że wszystko zrozumiałem ale w dalszym ciągu nie mam pojęcia co zrobić albo jak zmienić kod abym mógł zadać od którego wiersza chcę zacząć zapisywanie. Skąd ostWrs wie (w przypadku mojego kodu) że ma zacząć zapisywanie od drugiego wiersza (zadaje powtórnie to pytanie ale naprawdę nie mam pojęcia...). W moim przypadku mam pusty arkusz 'Lista pracowników' i po zapisaniu pierwszego pracownika widzę że jest na pozycji 2. Dlaczego?
  • #74
    marek003
    Level 40  
    stąd:
    ostWrs = .Cells(.Rows.Count, "B").End(xlUp).Row
    Wydaje mi się że nie to chcesz docelowo uzyskać. Myślę że chcesz określić do którego wiersza wpisać dane więc jak na sztywno wpiszesz że ostWrs = 8 to zacznie wpisywać od 9 ale ... dla zrozumienia i nauki:

    rozbijmy to :
    ostWrs = .Cells(.Rows.Count, "B").End(xlUp).Row

    Count to "liczba/ilość wszystkich/kiego" - więc .Rows.Count to liczba wszystkich wierszy w arkuszu.
    dalej:
    .Cells(.Rows.Count, "B") to określenie adresu komórki czyli poprzez .Rows.Count adres jest w ostatnim wierszu a z drugiego parametru funkcji cells (po przecinku) wiemy żę to kolumna B (to samo by było gdyby zamiast "B" pisało 2 )
    dalej:
    End(xlUp) to w wolnym tłumaczeniu koniec [End] idąc w górę [xlUp]
    a
    Row to nr danego wiersza

    więc
    .Cells(.Rows.Count, "B").End(xlUp).Row (myślowo bo to nie jest widoczne ale...) stając na ostatnim wierszu arkusza kolumny B i idąc w górę aż do końca - "zaistnienia" zapisanego wiersza) zwróć nr wiersza.


    Więc jeżeli masz zapisane parę wierszy w arkuszu kod tej linii makra "tak jakby" (bo to się nie dzieje) przejdzie do ostatniego wiersza w kolumnie B i idąc w górę szuka zapisanego wiersza i jak go znajdzie zwraca jego numer zmiennej ostWrs
    Jeżeli nie ma żadnego zapisanego wiersza zwraca 1 (tak samo jakby wiersz pierwszy był zapisany - tu trzeba dodać jeżeli() aby to rozróżnić)

    Potem w kodzie dodajesz 1 i stąd masz 2 nr wiersza.
  • #75
    JaroFon
    Level 23  
    OK. teraz zrozumiałem :D Ja kombinowałem że muszę coś zmienić w kodzie żeby zapisywało od tego wiersza co chcę, a to wystarczy tylko odpowiednio zaprojektować tabelę w arkuszu a dokładnie nagłówek samej tabeli, dzięki bardzo.
  • #76
    marek003
    Level 40  
    Dzięki
    Wolę "opcję" zrozumiałem niż wszyskie pomógł (chodź to też miłe).
    Może to moje "zboczenie" - nie jestem nauczycielem - ale coś mam w sobie by moja "pomoc" uczyła a nie wyłacznie rozwiązywała problem (stary już jestem i tak mnie czasami nachodzi :) ).
    Chodzi o to by jak już się z czegoś korzysta to robić to z wiedzą i rozumem a nie na wiarę, chodź co do samej wiary mam całkiem przeciwne podejście.
  • #77
    JaroFon
    Level 23  
    No szkoda że temat ma ograniczoną ilość kliknięć na Excel- Kwestionariusz pracownika. Rozszerzenie możliwości pliku. Już tyle pomocy mi tu udzieliłeś że za każdą z nich zasługujesz na Excel- Kwestionariusz pracownika. Rozszerzenie możliwości pliku. Nie chcę otwierać ciągle nowych tematów skoro każdy dotyczył by jednego i tego samego pliku

    Dodano po 1 [godziny] 16 [minuty]:

    No a teraz mam kolejne pytanie.
    Zrobiłem takie pomocne okno (nazwałem je 'Personal') które pokazuje mi ważne informacji łącznie z foto, przykład podam na własnej osobie.

    Excel- Kwestionariusz pracownika. Rozszerzenie możliwości pliku

    ...na foto proszę nie patrzeć bo jest zrobione 10 lat temu (wtedy byłem młody i piękny a teraz starość mnie dopadła :wink: )
    Jednak poszedłem dalej i aby szybciej przeszukiwać listę pracowników dodałem do okna dodatkowe pola pomocnicze (filtrujące) jak widać na screenie:

    Excel- Kwestionariusz pracownika. Rozszerzenie możliwości pliku

    ...po przefiltrowaniu na liście zostałem tylko ja, ale wyskakuje mi błąd kiedy wpiszę w oknie 'Nazwisko' kombinację liter która nie zgadza się z listą pracowników (podobnie jest w oknie 'Znaczek'):

    Excel- Kwestionariusz pracownika. Rozszerzenie możliwości pliku

    Excel- Kwestionariusz pracownika. Rozszerzenie możliwości pliku

    ...jak wyeliminować błąd aby nie wyskakiwał jak wpiszę kombinację liter niezgadzającą się z listą? Poniżej kod:

    Code: vbscript
    Log in, to see the code
  • #78
    marek003
    Level 40  
    Chyba błąd jest bo poprzez nieodpowiedni wpis w okienko próbujesz zdefiniować tablicę z zerową lub ujemną pozycją w pierwszym jej wymiarze
    Spróbuj dodać warunek i w razie braku danych zatrzymaj procedurę.

    Nie wiem jak wpłynie to na dalsze działanie programu. Jeżeli wyskoczą dalsze błędy trzeba by był postąpić z nimi analogicznie.

    Wracając do kodu myśle żepowinno być zero (tak jak napisałem) ale gdyby było nie tak to w warunku zamiast =0 wstaw =1

    sprawdź
    Code: vbscript
    Log in, to see the code
  • #79
    JaroFon
    Level 23  
    Teraz jest ok :D jednak zamiast kodu:

    Code: vbscript
    Log in, to see the code


    ...dałem ten poniższy i zamiast informacji 'Brak danych' po prostu zresetuje mi listę i będzie tak jakby przestał działać filtr:

    Code: vbscript
    Log in, to see the code


    Jednak jest jeszcze jeden błąd który sam sobie stworzyłem dodając ten filtr. Na początku było wszystko ok dopóki nie dodałem filtr, mianowicie chodzi o część poniższego kodu:

    Code: vbscript
    Log in, to see the code


    ...ten kod bez filtru poprawnie pokazuje mi informacje które chcę, jednak problem w tym że kod pokazuje informacje na podstawie indeksu jaki zostanie zaznaczony w oknie 'lstTele', jednak po zastosowaniu filtru i przy wyszukiwaniu zmienia się indeks danego pracownika co skutkuje że wyświetlają się niepoprawne informacje (po prostu innego pracownika). Jak to rozwiązać? Poniżej jest cały kod który pokazuje informacje (oczywiście poprawnie tylko w przypadku jak nie korzystam z filtra):

    Code: vbscript
    Log in, to see the code
  • #80
    JaroFon
    Level 23  
    Opanowałem problem błędu indeksu po filtrze :D . Poniższy kod wszystko naprawił:

    Code: vbscript
    Log in, to see the code


    ...a to kod w całości i śmiga jak talala... :D :

    Code: vbscript
    Log in, to see the code
  • #81
    JaroFon
    Level 23  
    Czy jest taka opcja aby po kliknięciu w okno 'TextBox' jeśli jest tam wpisany text to żeby automatycznie zaznaczyło ten text w sposób pokazany na screenie?

    Excel- Kwestionariusz pracownika. Rozszerzenie możliwości pliku
  • #82
    marek003
    Level 40  
    Mam ostatnio mało czasu więc rzadko zaglądam na forum ale kiedyś przy wychodzeniu z textboxa sprawdzałem czy jest to liczba i jeżeli nie to zaznaczało cały tekst textboxa (też z elektrody).

    Code: vbscript
    Log in, to see the code


    Za samo zaznaczenie odpowiada
    Code: vbscript
    Log in, to see the code


    Jednak na chwilę obecną nie wiem jak uruchomić procedurę po jednym kliknięciu.

    Na marginesie jeżeli zamiast jednego kliknięcia zrobisz dwuklik to bez żadnego kodu zaznaczy się cały tekst z textboxa.

    Może akurat na to załóż oddzielny temat - daj innym się wykazać. :)
  • #83
    JaroFon
    Level 23  
    Mam podobny kod wykorzystany w oknie gdzie wpisuję daty (dodałem do niego Twój sposób zaznaczania) jednak mam problem z tym kodem bo nie działa poprawnie ale tylko dlatego że okno 'TextBox' jest włożone w sumie do dwój okien 'Frame' (bez 'Frame' działa poprawnie). Czy można coś zrobić żeby kod działał poprawnie bez konieczności usuwania 'Frame'? A to ten kod:

    Code: vbscript
    Log in, to see the code
  • #84
    marek003
    Level 40  
    Jak wspomniałem rzuć na nowy topik, w chwili obecnej ja nie wiem - może jak bym dłużej posiedział ale ... w najbiższym okresie ja nie znajdę na to czasu [min miesiąc].