ID tematu: 192
 |
Problem z przypisaniem danych do formularza |
Autor |
Wiadomość |
chips
Exceloholic

Posty: 249
|
Wysłany: 30-01-2007, 16:53
|
|
|
Mam nadzieję, że masz jeszcze cierpliwość. Kolejna prośba dotyczy również list.
1. Chciałbym by po wybraniu jakiejś pozycji na liście pierwszej w liście drugiej wyświetlała się pozycja określona w makrze (załączyłem przykład). Da się to równie prosto zrobić?
2. Chciałbym aby w liście wyświetlała się tylko jedna pozycja (czyli nie tak jak w moim przykładzie). Czy da się to zrobić inaczej niż tylko zmianą rozmiaru listy?
2_listy_zależne.zip
|
Pobierz Plik ściągnięto 688 raz(y) 9.42 KB |
|
_________________ Pozdrawiam. CHIPS |
|
 | ID posta:
2009
|
|
|
 |
|
|
|
chips
Exceloholic

Posty: 249
|
Wysłany: 30-01-2007, 17:12
|
|
|
Tajan napisał/a: | chips napisał/a: |
2. Staram się aby formularz był możliwie przejrzysty i wymyśliłem żeby tą transpozycję na pion przenieść do drugiego arkusza i wówczas ListFillRange pobierał by dane z drugiego arkusza. Mam nadzieję że się da. |
Nie ma problemu. Do adresu dodajesz tylko nazwę arkusza, np.: Arkusz2!A1:A10 |
Wstawilem do ListFillRange: Arkusz2!A1:A10. Ale nie chce przyjąć. Pewnie coś trzeba dodać lub ujać |
_________________ Pozdrawiam. CHIPS |
|
 | ID posta:
2012
|
|
|
 |
|
|
Trebor
Excel Expert

Pomógł: 1752 razy Posty: 4680
|
Wysłany: 30-01-2007, 17:26
|
|
|
chips napisał/a: | Wstawilem do ListFillRange: Arkusz2!A1:A10. Ale nie chce przyjąć. Pewnie coś trzeba dodać lub ujać |
Powinno być dobrze pod warunkiem, że arkusz o nazwie Arkusz2 istnieje.
W Twoim przykładzie był system |
_________________ Trebbor@wp.pl |
|
 | ID posta:
2017
|
|
|
 |
|
|
Trebor
Excel Expert

Pomógł: 1752 razy Posty: 4680
|
Wysłany: 30-01-2007, 17:31
|
|
|
chips napisał/a: | 2. Chciałbym aby w liście wyświetlała się tylko jedna pozycja (czyli nie tak jak w moim przykładzie). Czy da się to zrobić inaczej niż tylko zmianą rozmiaru listy? |
Usuń we właściwościach Listboxa2 listfillrange.
Dla wprawy potestuj takie makro
Kod: |
Private Sub ListBox1_Click()
If ListBox2.ListCount >= 0 Then ListBox2.Clear
ListBox2.AddItem Cells(ListBox1.ListIndex + 1, 4)
End Sub
|
|
_________________ Trebbor@wp.pl |
|
 | ID posta:
2019
|
|
|
 |
|
|
chips
Exceloholic

Posty: 249
|
Wysłany: 30-01-2007, 17:55
|
|
|
Wszystko działa. Dzięki Trebor. Ale jeszcze mam zgryz z tym:
1. Cytat: | 2. Chciałbym aby w liście wyświetlała się tylko jedna pozycja (czyli nie tak jak w moim przykładzie). Czy da się to zrobić inaczej niż tylko zmianą rozmiaru listy? |
Tu chodzi mi o listę nr 1.
2.Czy wielkością czcionki w liście można sterować?
PS. To nie mój wątek forum więc nie mogę dodawać wam punktów za pomoc |
_________________ Pozdrawiam. CHIPS |
|
 | ID posta:
2022
|
|
|
 |
|
|
chips
Exceloholic

Posty: 249
|
Wysłany: 30-01-2007, 19:26
|
|
|
Umiem zmieniać kod który podał Trebor jeżeli dane będą w tym samym arkuszu. Ale jak zmienić ten kod jeżeli dane do obydwu tych list będą w innym arkuszu (arkusz2) - załączyłem plik.
Kod: | Private Sub ListBox1_Click()
If ListBox2.ListCount >= 0 Then ListBox2.Clear
ListBox2.AddItem Cells(ListBox1.ListIndex + 1, 4)
End Sub |
Sorry. że nadwerężam waszą cierpliwość ale formularz, który dzięki waszej pomocy staram się stworzyć jest dość karkołomny.
2_listy_zależne(2).zip
|
Pobierz Plik ściągnięto 689 raz(y) 10.08 KB |
|
_________________ Pozdrawiam. CHIPS |
|
 | ID posta:
2025
|
|
|
 |
|
|
Trebor
Excel Expert

Pomógł: 1752 razy Posty: 4680
|
Wysłany: 30-01-2007, 20:02
|
|
|
Sprawdź taki kod
Kod: |
Private Sub ListBox1_Click()
ListBox2.Clear
ListBox2.AddItem Sheets("Arkusz2").Cells(ListBox1.ListIndex + 1, 4)
End Sub
|
Pamiętaj, że lista dla listboxa jest indeksowana od 0 tj. pierwszy wiersz jest 0. Podobnie kolumna.
Czcionkę można zmienić dla całego formantu. Nie znam sposobu na zmianę wilkości czcionki dla jednego wiersza spośród innych.
Pozdrawiam |
_________________ Trebbor@wp.pl |
|
 | ID posta:
2027
|
|
|
 |
|
|
Tajan

Pomógł: 5618 razy Posty: 12152
|
Wysłany: 30-01-2007, 21:52
|
|
|
chips, zapytam, tak z ciekawości, po co Ci kontrolka listy w drugiej kolumnie, skoro chcesz wyświetlić jedną wartość? Możesz ją przecież wyprowadzić w komórce B1, bez potrzeby używania kontrolki. Zresztą, i makro nie jest tu potrzebne.
Ustaw właściwość "LinkedCell" pierwszego Listbox'a na komórkę A1, a do komórki B1 wpisz formułe:
Kod: | =JEŻELI(A1="";"";INDEKS(Arkusz2!D1:D8;PODAJ.POZYCJĘ(A1;Arkusz2!C1:C8;0))) |
A jezeli już koniecznie ma być kontrolka w kolumnie B, to możesz jej użyć, ustawiając jej "ListFillRange" na komórkę B1, zawierającą powyższą formułę. Efekt będzie taki sam, jak z makrem |
|
 | ID posta:
2030
|
|
|
 |
|
|
chips
Exceloholic

Posty: 249
|
Wysłany: 31-01-2007, 11:38
|
|
|
Trebor. Dzięki. Twoje makro działa dla 2 list jeżeli tablica jest w innym arkuszu. Potrzebuję jeszcze ten kod zmodyfikować (spójrz niżej).
Tajan. Dzięki za odpowiedź. Faktycznie trochę błądzę szukając efektywnego rozwiązania. Teraz faktycznie widzę, że dwie listy zależne od siebie to nie najlepszy kierunek. Niemniej nie mogę drugiej listy zastapić komórką z formułą którą podałeś dlatego, że w rzeczywistości dane w tej drugiej liście są to dane tekstowe o znacznej wielkości (kilka zdań).
Bazując na wiadomościach do tej pory od Was otrzymanych wydaje mi się, że najlepszym rozwiązaniem była by lista (ListBox1) oraz pole tekstowe (TextBox1) (zalezne od siebie jak wczesniej). Tylko nie potrafię zmienić kodu by to działało. Możecie pomóc?
Kod: | Private Sub ListBox1_Click()
ListBox2.Clear
ListBox2.AddItem Sheets("Arkusz2").Cells(ListBox1.ListIndex + 1, 4)
End Sub |
|
_________________ Pozdrawiam. CHIPS |
|
 | ID posta:
2036
|
|
|
 |
|
|
Tajan

Pomógł: 5618 razy Posty: 12152
|
Wysłany: 31-01-2007, 12:05
|
|
|
Rozwiązanie z TexBox'em już bardziej do mnie przemawia
Zmień kod w następujący sposób:
Kod: |
Private Sub ListBox1_Click()
TextBox1.Value= Sheets("Arkusz2").Cells(ListBox1.ListIndex + 1, 4).Value
End Sub |
|
|
 | ID posta:
2037
|
|
|
 |
|
|
chips
Exceloholic

Posty: 249
|
Wysłany: 31-01-2007, 12:35
|
|
|
Dzięki. Działa. Mam nadzieję, że koncepcja mi się nie zmieni. |
_________________ Pozdrawiam. CHIPS |
|
 | ID posta:
2039
|
|
|
 |
|
|
chips
Exceloholic

Posty: 249
|
Wysłany: 09-02-2007, 09:10
|
|
|
Witam, Jeżeli potrzebuję to makro zastosować dla wiekszej ilości listboxów to czy jest możliwość jednej procedury z np. pętlą, czy też muszę utworzyć tyle procedur ile listboxów?
Kod: | Private Sub ListBox2_Click()
TrescCheckList1.Value = Sheets("System2").Cells(ListBox2.ListIndex + 12, 2).Value
End Sub |
|
_________________ Pozdrawiam. CHIPS |
|
 | ID posta:
2365
|
|
|
 |
|
|
Tajan

Pomógł: 5618 razy Posty: 12152
|
Wysłany: 09-02-2007, 10:29
|
|
|
Pętlą się nie da. Wprawdzie istnieje pewien sposób polegający na napisaniu własnej klasy, ale w Twoim przypadku radziłbym jednak zastosować oddzielna procedurę dla każdej kontrolki. |
|
 | ID posta:
2370
|
|
|
 |
|
|
|