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:
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'.
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.
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"):
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.
... 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.
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
Nie bardzo. Nie mam pojęcia jak to zrobić 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' . 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.
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ą.
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.
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.
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?
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.
OK. teraz zrozumiałem 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.
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.
No szkoda że temat ma ograniczoną ilość kliknięć na . Już tyle pomocy mi tu udzieliłeś że za każdą z nich zasługujesz na . 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.
...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 )
Jednak poszedłem dalej i aby szybciej przeszukiwać listę pracowników dodałem do okna dodatkowe pola pomocnicze (filtrujące) jak widać na screenie:
...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'):
...jak wyeliminować błąd aby nie wyskakiwał jak wpiszę kombinację liter niezgadzającą się z listą? Poniżej kod:
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
...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):
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?
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ć.
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:
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].