ID tematu: 70535
 |
Tworzenie listy pozycji w ListBox w UserForm |
Autor |
Wiadomość |
Leon M
Exceloholic

Wersja: Win Office 2010
Posty: 131
|
Wysłany: 28-03-2021, 14:12 Tworzenie listy pozycji w ListBox w UserForm
|
|
|
Szanowni Forumowicze,
Zwracam się do Was z gorącą prośbą o rozwiązanie następującej kwestii:
W Tabeli w arkuszu Excela zawarte są dane pracowników, na podstawie których tworzone są comiesięczne rachunki. Makro obsługujące arkusz podmienia określone łańcuchy znaków w szablonie rachunku odpowiednimi danymi pobieranymi z tabeli i tworzy rachunki, zapisując je w folderze "Rachunki bieżące".
W załączniku zamieszczam materiał poglądowy.
W obecnym rozwiązaniu po kliknięciu kontrolki "Utwórz" tworzone są rachunki dla wszystkich pozycji w tabeli.
Liczba pozycji w tabeli jest zmienna, bowiem sukcesywnie dopisywani do listy są nowi pracownicy.
Chciałbym rozbudować obecny układ o wykorzystanie UserForm przez możliwość przedstawienia listy pracowników (nazwisko i imię) z tabeli w ListBox z możliwością wielokrotnego wyboru.
W takim przypadku tworzone byłyby rachunki dla pracowników zaznaczonych w ListBox.
Samodzielnie nie potrafię napisać odpowiedniego makra, dlatego kieruje prośbę do Szanownych Forumowiczów o pomoc w rozwiązaniu przedstawionego zagadnienia.
Z góry serdecznie dziękuję za Wasze odpowiedzi.
Tworzenie Rachunków.rar
|
Pobierz Plik ściągnięto 12 raz(y) 145.62 KB |
|
|
 | ID posta:
402858
|
|
|
 |
|
|
|
beret
ExcelGaduła 500+

Wersja: Win Office 2007
Pomógł: 13 razy Posty: 784
|
Wysłany: 29-03-2021, 09:02
|
|
|
Cytat: | W obecnym rozwiązaniu po kliknięciu kontrolki "Utwórz" tworzone są rachunki dla wszystkich pozycji w tabeli.
| Ja bym to zrobił inaczej. Zamiast tworzyć rachunki w Wordzie, szablon rachunku zrobiłbym w Excelu i odpowiednio korzystał z niego przy wywoływaniu pracownika / pracowników. |
|
 | ID posta:
402891
|
|
|
 |
|
|
Leon M
Exceloholic

Wersja: Win Office 2010
Posty: 131
|
Wysłany: 29-03-2021, 11:43
|
|
|
Beret, dzięki za Twój wpis.
Czy mógłbyś bardziej szczegółowo przedstawić swoją koncepcję i zobrazować ją przykładem w arkuszu? |
|
 | ID posta:
402900
|
|
|
 |
|
|
apollo
ExcelSpec

Pomógł: 1317 razy Posty: 4543
|
Wysłany: 29-03-2021, 11:50
|
|
|
O ile pamiętam to już zrobiłem dla Ciebie takie zadanie. |
|
 | ID posta:
402903
|
|
|
 |
|
|
Tadek
Excel Expert

Wersja: Win Office 2007
Pomógł: 1984 razy Posty: 5659
|
Wysłany: 29-03-2021, 14:34
|
|
|
Wg propozycji Bereta (chyba się nie obrazi ).
Zobacz w załaczniku.
LISTA.xlsm
|
Pobierz Plik ściągnięto 13 raz(y) 29.75 KB |
|
|
 | ID posta:
402914
|
|
|
 |
|
|
Leon M
Exceloholic

Wersja: Win Office 2010
Posty: 131
|
Wysłany: 29-03-2021, 17:12
|
|
|
Apollo, tak, dobrze pamiętasz, w rozwiązaniu przedstawionym przez Ciebie wybór pozycji do utworzenia rachunku dokonywał się poprzez InputBox, a teraz chciałbym zaaplikować do tego celu ListBox w UserForm.
Tadku, bardzo dziękuję za przedstawienie rozwiązania. Prawdę mówiąc, nie mogę dociec, na jakiej zasadzie ono działa. Np., jak została utworzona lista wyboru, jak dokonują się podstawienia poszczególnych danych. |
|
 | ID posta:
402926
|
|
|
 |
|
|
apollo
ExcelSpec

Pomógł: 1317 razy Posty: 4543
|
Wysłany: 29-03-2021, 19:38
|
|
|
Poczytaj to, co napisałem w arkuszu Arkusz3. Cały kod w Module1 i UserForm1.
Lista Obecności.xlsm
|
Pobierz Plik ściągnięto 15 raz(y) 42.95 KB |
|
|
 | ID posta:
402932
|
|
|
 |
|
|
Leon M
Exceloholic

Wersja: Win Office 2010
Posty: 131
|
Wysłany: 29-03-2021, 22:34
|
|
|
Apollo, przeogromne dzięki za przedstawione rozwiązanie. Odpowiada w pełni podanym założeniom.
Teraz muszę się podjąć rozgryzienia kodu, który stworzyłeś, aby pojąć jego działanie. |
|
 | ID posta:
402939
|
|
|
 |
|
|
Tadek
Excel Expert

Wersja: Win Office 2007
Pomógł: 1984 razy Posty: 5659
|
Wysłany: 30-03-2021, 08:27
|
|
|
Cytat: | Tadku, bardzo dziękuję za przedstawienie rozwiązania. Prawdę mówiąc, nie mogę dociec, na jakiej zasadzie ono działa. Np., jak została utworzona lista wyboru, jak dokonują się podstawienia poszczególnych danych.
| Lista wyboru:
kliknij kolejno:
1) Formuły-->Menedżer nazw-->pracownik (tu jest utworzona lista pracowników)
2) Dane-->Poprawność danych-->Lista-->Źródło (lista wyboru)
Podstawianie danych:
dane są podstawiane za pomocą odpowiednich formuł - aby je zobaczyć odkryj kolumnę L. |
|
 | ID posta:
402944
|
|
|
 |
|
|
Leon M
Exceloholic

Wersja: Win Office 2010
Posty: 131
|
Wysłany: 30-03-2021, 13:54
|
|
|
Tadku, bardzo dziękuję z wskazówki i wyjaśnienia. |
|
 | ID posta:
402959
|
|
|
 |
|
|
Leon M
Exceloholic

Wersja: Win Office 2010
Posty: 131
|
Wysłany: 30-03-2021, 15:58
|
|
|
Apollo, jeszcze raz pięknie dziękuję za napisaną przez Ciebie aplikację. Cieszę się z niej niezmiernie.
Zacząłem właśnie analizować kody, które ułożyłeś, i w związku z tym chciałbym Cię uprzejmie prosić o wyjaśnienia w kwestiach, w których mam problemy z ich ogarnięciem.
1. W procedurze UserForm_Initialize() jest taki oto fragment:
Kod: |
For r = 1 To UBound(dane)
dane(r, 3) = r + 3 ' w 3-ciej dodanej kolumnie zapamiętać numer wiersza na arkuszu danej pozycji.
Next r
With ListBox1
.ColumnCount = 2
.MultiSelect = 1
.List = dane
End With
|
Tablica dane() ma trzy kolumny, natomiast ListBox chyba dwie (ListBox1.ColumnCount = 2).
Czy to znaczy, że do ListBox zostają przypisane tylko dwie pierwsze kolumny tablicy dane() (ListBox1.List = dane), czy może że tylko dwie kolumny ListBox są wyswietlane (ListBox1.ColumnCount = 2)?
2. W procedurze CommandButton1_Click():
Kod: |
If ListBox1.Selected(r) Then
count = count + 1
wiersze(count) = ListBox1.List(r, 2) ' numer wiersza na arkuszu wybranej pozycji
End If
|
Jak indeksowana jest ListBox, od 0 czy od 1, bowiem zastanawia mnie czy ListBox1.List(r, 2) jest odwołaniem do drugiej, czy trzeciej kolumny? Wydaje mi się, że do trzeciej.
3. W procedurze UtwórzRachunek()":
zmieniłem na
Kod: |
Application.StatusBar = "Plik " & indeks
|
i niestety nie działa, nie wyświetla wartości indeks, czyli liczby kolejnego tworzonego rachunku.
Nie wiem, dlaczego.
Będę bardzo wdzięczny za wyjaśnienia, za które z góry pięknie dziękuję. |
|
 | ID posta:
402975
|
|
|
 |
|
|
apollo
ExcelSpec

Pomógł: 1317 razy Posty: 4543
|
Wysłany: 30-03-2021, 16:57
|
|
|
Leon M napisał/a: |
Tablica dane() ma trzy kolumny, natomiast ListBox chyba dwie (ListBox1.ColumnCount = 2).
Czy to znaczy, że do ListBox zostają przypisane tylko dwie pierwsze kolumny tablicy dane() (ListBox1.List = dane), czy może że tylko dwie kolumny ListBox są wyswietlane (ListBox1.ColumnCount = 2)? |
1. Kwestia dostępności danych.
Ile kolumn ma tablica dane to tyle jest kolumn danych w ListBox. Te kolumny danych można potem odczytać z ListBox. W naszym przypadku są dostępne 3 kolumny danych w ListBox o indeksie 0, 1, 2.
2. Kwestia widoczności danych.
Tylko ColumnCount kolumn jest wyświetlonych. W nszym przypadku widzimy tylko 2 kolumny.
Czyli w naszym przypadku ListBox ma dane w 3 kolumnach, ale tylko 2 pierwsze są widoczne a 1 kolumna jest ukryta. Mimo, że kolumny są ukryte można odczytać z nich dane.
Cytat: |
2. W procedurze CommandButton1_Click():
Jak indeksowana jest ListBox, od 0 czy od 1, bowiem zastanawia mnie czy ListBox1.List(r, 2) jest odwołaniem do drugiej, czy trzeciej kolumny? Wydaje mi się, że do trzeciej.
|
Wiersze i kolumny w ListBox są indeksowane od 0. Czyli pierwszy wiersz ma indeks = 0, kolumna trzecia ma indeks = 2.
Uwaga: w tablicy dane wiersze i kolumny są liczone od 1. Jeśli tablica tworzona jest w ten sposób:
dane = <Obszar na arkuszu>.Value, gdzie <obszar na arkuszu> zawiera conajmniej 2 komórki, to wiersze i kolumny tablicy dane zawsze są liczone od 1.
Cytat: |
3. W procedurze UtwórzRachunek()":
zmieniłem na
Kod: |
Application.StatusBar = "Plik " & indeks
|
|
Pod linią Application.StatusBar ... dodaj DoEvents |
|
 | ID posta:
402980
|
|
|
 |
|
|
Leon M
Exceloholic

Wersja: Win Office 2010
Posty: 131
|
Wysłany: 30-03-2021, 17:52
|
|
|
Apollo, pięknie dziękuję za przedstawione wyjaśnienia, bardzo mi pomogły w ogarnianiu kodu. |
|
 | ID posta:
402982
|
|
|
 |
|
|
Leon M
Exceloholic

Wersja: Win Office 2010
Posty: 131
|
Wysłany: 30-03-2021, 20:29
|
|
|
Apollo, chciałbym zwrócić się o pomoc jeszcze w następującej rzeczy. Otóż, chciałbym dodać jeszcze jeden element do Twojej aplikacji. Mianowicie, aby po wybraniu pozycji z ListBox i naciśnięciu przycisku "Utwórz rachunki" wyświetlał się komunikat o liczbie wybranych pozycji.
Czy można do tego celu wykorzystać formant Label? Jeśli można, to jak to wykonać?
Czy w oknie ListBox można zamieszczać tekst? Np. w górnej części "Wybierz pozycje z poniższej listy"
I jeszcze pytanie: czy można sprawić tak, aby po utworzeniu rachunków automatycznie zamykało się okno ListBox?
Z góry bardzo dziękuję za odpowiedź. |
|
 | ID posta:
402988
|
|
|
 |
|
|
apollo
ExcelSpec

Pomógł: 1317 razy Posty: 4543
|
Wysłany: 31-03-2021, 02:52
|
|
|
Leon M napisał/a: | Mianowicie, aby po wybraniu pozycji z ListBox i naciśnięciu przycisku "Utwórz rachunki" wyświetlał się komunikat o liczbie wybranych pozycji.
Czy można do tego celu wykorzystać formant Label? |
Jeśli chcesz użyć Label to połóż gdzieś na Form Label1, i Label2 po jego prawej stronie. Ustaw Caption dla Label1 na "Liczba wybranych pozycji:", Caption dla Label2 na pusty. W Sub CommandButton1_Click po linii If count Then dodaj
Kod: |
Label2.Caption = count
|
Cytat: |
Czy w oknie ListBox można zamieszczać tekst? Np. w górnej części "Wybierz pozycje z poniższej listy"
|
Tuż nad ListBox połóż Label z Caption = "Wybierz pozycje z poniższej listy"
Cytat: |
czy można sprawić tak, aby po utworzeniu rachunków automatycznie zamykało się okno ListBox? |
Nie rozumiem. Zamykać ListBox? Co to takiego? Jeśli chcesz zamknąć Form to w Sub CommandButton1_Click przed linią End Sub dodaj
|
|
 | ID posta:
402998
|
|
|
 |
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Dodaj temat do Ulubionych Wersja do druku
|
 |
Strona używa plików cookies.
Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe
|