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.

[vba] - ComboBox - wielkość liter

22 Wrz 2012 14:40 2409 8
  • Poziom 11  
    Witam, dziś chciałbym prosić o pomoc w rozwiązaniu następującego problemu. Przy wpisywaniu tekstu do combobox automatycznie wypełnia się danymi z listy załadowanymi do combobox. Jak wpisać nowy tekst różniący się wielkośćią początkowych liter od tekstu będącego na liście?
    Np. na liściie mamy słowo "Domowy", chcę wpisać DOM (koniecznie dużymi literami) i zapisać jako nową wartość.
    Czy jest możliwe aby podczas pisania było rozróżniane czy wpisywana jest duża litera czy mała?
    Chyba pytanie jest jasne ale na wszelki wypadek podam jeszcze jeden przykład:
    Chciałbym aby tekst Domowy był traktowany jako różny od tekstu DOMowy.
  • Moderator Programowanie
    Jaki program?
    Ustaw właściwość MatchEntry na None i nie powinno być problemów.
    Jeśli znajdziesz coś podobnego do Limit to List, to ustaw na False.
  • Poziom 11  
    Excel.
    Jest właściwość MatchEntry ale to nie rozwiązuje problemu. Owszem mogę wprowadzić dowolny tekst ale chciałbym zachować równocześnie możliwość rozpoznawania czy tekst jest nowy czy istniejący na liście. Przy ustawieniu MatchEntry na None kązdy tekst, niezależnie czy istnieje na liście czy nie ma ListIndex = -1. Także chciałbym móc korzystać z efektu podpowiadania już istniejącego tekstu.
    Może spodziewam się za dużo ale zakładam, że to da się zrobić tylko ja nie wiem jak.
    Do tej pory najczęściej wykorzystywałem zdarzenie Change dla pola ComboBox i w zależności od wartości ListIndex sterowałem zachowaniem aplikacji. Jest to rozwiązanie proste ale może można to zrobić inaczej.
    W tej chwili efekt jaki chcę uzyskać polega mniej więcej na tym.
    1. zaczynam wpisywać tekst do ComboBox, w miarę wpisywania tekstu wypełniają się inne pola tekstowe danymi zależnymi od ListIndex (ComboBox jest wielokolumnowe) np. pole ComboBox to "Nazwa" inne pola to adres
    2. jeśli pasuje mi to co podpowiada mi lista przechodzę do edycji innch pól Userform, jeśli wartości "nazwa" nie ma na liście to wpisuje nową wartość (ListIndex = -1) pola adres są czyszczone i następnie je uzupełniam z palca.
    3. robię zapisz, co dopisuje mi nową wartość
  • Moderator Programowanie
    siwek62 napisał:
    Do tej pory najczęściej wykorzystywałem zdarzenie Change dla pola ComboBox i w zależności od wartości ListIndex sterowałem zachowaniem aplikacji.
    Jak sama nazwa wskazuje, musi zostać wybrana wartość z listy. Jedynym rozsądnym rozwiązaniem jest sprawdzenie indeksu i jeśli <0 dopisanie do listy.
    Tu pojawiają się pytania: czy lista pobierana jest z arkusza, tworzona przy inicjacji formularza, czy jeszcze w inny sposób? Jaka by nie była konieczne przy takim rozwiązaniu byłoby jej przepisanie.
    Oczywiście pytanie zasadnicze: Jaki to będzie miało wpływ na wyniki? Nie wszystkie indeksy będą odpowiadały tym samym wartościom jak przy inicjacji...
  • Poziom 11  
    Czytanie indeksów mam rozwiązane. Lista jest ładowana przy inicjalizacji formularza z zewnętrznego pliku z danymi. Jeśli mam ListIndex = -1 dodaję do listy metodą AddItem (na koniec listy) i ListIndex odczytuje funkcją UBond. Niedogodność polega na tym, że lista przestaje mieć cechy przesortowanej, ale tym mam zamiar się zająć w następnej kolejności.
    Cytat:
    Oczywiście pytanie zasadnicze: Jaki to będzie miało wpływ na wyniki? Nie wszystkie indeksy będą odpowiadały tym samym wartościom jak przy inicjacji...

    Dlatego nie przeładowuje listy (na razie) bo wymagałoby to wielu zmian w innych miejscach kodu. Ale z tym chyba sobie poradzę później.
    Natomiast nadal nie mam pomysłu jak wpisać jako nową wartość "domOWY" jeśli mam na liście "domowy"
  • Moderator Programowanie
    siwek62 napisał:
    Natomiast nadal nie mam pomysłu jak wpisać jako nową wartość "domOWY" jeśli mam na liście "domowy"
    Nie rozumiem. Napisałeś, że dodajesz na koniec listy. Excel rozróżnia wielkość liter, zdaje się...
  • Poziom 11  
    Widzę, że się nie rozumiemy. Jeśli dopisuję nową wartość to dopisuję ją na końcu ale nie w tym problem. Może nie potrafię tego jednoznacznie opisać, spróbuje jeszcze raz wytłumaczyć.
    Zakładając, że na liście mamy następujące wpisy:

    Abecadło
    Abolicja
    Gusiec Sp.z o.o.

    Próbuje dopisać "GUS". W momencie wpisania "G" w polu tekstowym pojawia się "Gusiec Sp.z o.o." z ustawionym kursorem na drugim znaku. Wpisuje "U" kursor przesuwa się na trzeci znak, nadal w polu tekstowym widnieje "Gusiec Sp.z o.o." niezależnie czy "u" wpisane jest z Shiftem (duże U) czy bez Shiftu. Następnie wpisuje "S" (z Shiftem - duże "S"), kursor przesuwa się na czwarty znak, w polu tekstowym jest "Gusiec Sp.z o.o." Wciskam Delete - efekt jaki uzyskam to: "Gus". Jedyny sposób który znam aby wpisać "GUS" to po wpisaniu "s" dodać spację i cofnąć do edycji "u" i "s" i zamienić je na duże litery.
    Nie potrafię tego inaczej opisać, jeśli uznacie, że nadal nie wiadomo o co mi chodzi to trudno, proszę usuńcie ten temat.
    Czy Excel rozróżnia małe i duże litery? Mam nadzieję że tak, właśnie o to próbuje się dopytać, jak zrobić aby "Cia" było rozpoznawane jako inny ciąg niż "CIA".
    Oczywiście zależy mi na ustawieniu MatchEntry Complete
  • Moderator Programowanie
    Zobacz różnicę na przykładzie. Kontrolki ActiveX, więc zachowują się podobnie jak w formularzu. Ustaw MachEntry na wyłączone, wybieranie z listy i tak będzie działać.

    Ewentualnie dodaj pole tekstowe i jeśli lista będzie pusta lub wartość spoza listy (ListIndex=-1) to niech pobiera z pola.
  • Poziom 11  
    Zgadza się, wybranie z listy ustawia ListIndex wybranej pozycji ale nie o takie rozwiązanie mi chodzi. Chciałbym mieć możliwość wyboru wartości z listy lub wpisanie z ręki. Przy MatchEntry=None (2) wpisanie(nie wybranie z listy) "Gusiec Sp.z o.o." ustawia ListIndex= -1 mimo że taki wpis jest na liście. Musiałbym zablokować możliwość wpisywania ręcznie i ograniczyć się tylko do wybierania wartości z listy, a tego bym nie chciał. Dodatkowo musiałbym rozwiązać wpisywanie nowej wartości. Dodatkowo ktoś korzystający z formularza mógłby nie zauważyć pozycji na liście i zdublować wpis. Za dużo widzę komplikacji dla rozwiązania problemu małych i dużych liter.
    Jeśli nie ma innego rozwiązania to dziękuje za próbę pomocy i pozdrawiam.