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 EXCEL - Ograniczenie zawartości Combobox

19 Wrz 2014 10:25 2268 5
  • Poziom 2  
    Cześć,
    Mam problem z comboboxem, w którym potrzebuję ograniczyć możliwość wpisywania do wartości z klawiatury. Wiem, że można zupełnie zablokować możliwość wpisywania w comboboxie ale ze względu na długie listy nie chciałbym tego robić.

    Jak można ograniczyć możliwość wpisywanie wartości dla comboboxa aby:
    1. w przypadku comboboxów z wartościami można było wprowadzać tylko pierwsze liczby zgodne z listą,
    2. w przypadku tekstu żeby można było wpisywać tylko pierwsze litery listy
    a co najważniejsze żeby nie było można zaakceptować wartości spoza listy.

    Poniżej kod:
    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Moderator Programowanie
    Należy oprogramować warunki przy zdarzeniu Change oraz Exit ComboBoxów. Stopień skomplikowania zależy od ilości ograniczeń jakie chcesz nałożyć.

    P.S. Bardzo ułatwia życie prefiks przy nazwach kontrolek. Np cmbLiczba1, txtLiczba2 i nie muszę szukać które to ComboBox, a które TextBox...
  • Poziom 2  
    Dziękuję Adams_nt za wskazówkę, mógłbyś powiedzieć z czego powinienem skorzystać? Z jakiej procedury, czy funkcji? Ewentualnie czy da się wymusić zatrzymanie wykonywania procedury (powyżej) do momentu wprowadzenia poprawnych danych?

    Druga sprawa to czy wiecie w jaki sposób można wykorzystać
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    aby móc wybierać drukarkę sieciową, lub jedną z kilku?
    Ewentualnie w jaki sposób można dodać tylko kilka wybranych drukarek?
  • Pomocny post
    Moderator Programowanie
    ad.1 Przy zdarzeniu Change ComboBox'a sprawdzany jest każdy znak wprowadzany z klawiatury. Jeśli sprawdzany ma być tylko pierwszy, pierwszym warunkiem będzie Len(NazwaCombo.value)=1, następnie porównujesz (w pętli) z listą. Najprościej wstawić polecenie opuszczenia pętli przy pozytywnym wyniku porównania, a warunkiem kontynuowania kodu zrobić licznik_pętli <= ilość_pozycji_listy.

    Przy Exit "z urzędu" zadeklarowana jest zmienna "Cancel" (boolean). Jeśli wartość (po porównaniu jak wyżej) jest niezgodna, przypisanie 'Cancel=True' nie pozwoli opuścić kontrolki.

    ad.2 Drukarki zarejestrowane w systemie można umieścić w ComboBox'ie (Np o nazwie cmbPrinters) poniższym kodem (initialize formularza)
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    Tu z małym filtrem, chyba nie muszę tłumaczyć działania.

    Drukowanie realizujesz podstawiając wybór. Np
    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Poziom 2  
    W jaki sposób można się uchronić przed błędem "invalid property value" w comboboxie? Nie blokując wpisywania? W pozycji RowSource jest umieszczona lista z wartościami tekstowymi. Ewentualnie czy jest możliwe ewentualnie czy jest możliwe wyrzucenie msgbox'a zamiast błędu?
  • Moderator Programowanie
    Excel wyświetla Nr błędu, więc możesz go przechwycić i oprogramować warunek.
    Z drugiej strony - lepiej tak skonstruować makro, aby ustrzec się takich błędów. Np instrukcja warunkowa: If (not) isnumeric(znak_z_klawiatury) przy zmianie, lub tp