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.

[Rozwiązano] [VBA] Combobox z dynamicznym zakresem - gdy Range = 0 błąd Run-time error''1004'

25 Mar 2020 15:07 147 7
  • Poziom 2  
    Dzień dobry,

    Przy wykorzystaniu Userform wprowadzane są dane da arkusza. Arkusz traktowany jest jako swego rodzaju baza danych. Jedna z kolumn tworzy nazwany dynamiczny zakres: "PESELW" [ =PRZESUNIĘCIE(DaneOsobowe!$B$2;0;0;ILE.NIEPUSTYCH(DaneOsobowe!$B:$B)-1;1) ].

    Następnie ten zakres wykorzystany jest do wygenerowania listy w combobox:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod znajduje się w: Private Sub UserForm_Activate()

    Problem 1: jeżeli w danym momencie zakres jest pusty (w tabeli nie wprowadzono jeszcze żadnych rekordów), w trakcie uruchamiania Userform zwracany jest błąd: Run-time error'1004': Method 'Range' of object '_Worksheet' failed. Zakres jest pusty, zwracany jest błąd wartości.

    Problem nie będzie występował jeżeli ręcznie wprowadzimy pierwszy rekord (dane pierwszej osoby) i dopiero wtedy uruchomimy Userform (formuła z nazwy zakresu wtedy nie zwróci błędu #ADR!).

    Problem 2: Jeżeli podczas jednej sesji wprowadzimy nowe rekordy, lista w combobox nie zaktualizuje się o nowe pozycje. Konieczne jest ponowne załadowanie Userform aby do tego doszło. W jaki sposób wymusić "odświeżenie" listy bez ponownego włączania Userform?

    Oprogramowanie: Excel 2016
  • Pomocny post
    Poziom 38  
    2. Odświeżenie polega na usunięciu pozycji z listy i ponownym dodaniu.
    Musisz to odświeżenie wpleść w jakieś zdarzenie formularza.
    1. PESELW pewnie tworzysz po uruchomieniu formularza, a powinieneś przed.
  • Poziom 2  
    PRL napisał:
    2. Odświeżenie polega na usunięciu pozycji z listy i ponownym dodaniu.
    Musisz to odświeżenie wpleść w jakieś zdarzenie formularza.
    1. PESELW pewnie tworzysz po uruchomieniu formularza, a powinieneś przed.


    1. Wcześniejsze zdefiniowanie zmiennej, która będzie zawierać zakres PESELW nie pomaga. Błąd nadal występuje. Problem leży w pustym zakresie. Zastanawiam się nad rozwiązaniem:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Nie wiem jeszcze jak to ugryźć.
  • Poziom 38  
    Cytat:
    zdefiniowanie zmiennej

    Jakiej zmiennej. Przecież PESELW, to zakres.
    Jak to logika, że wypełniasz kombo pustym zakresem?
  • Poziom 2  
    PRL napisał:
    Cytat:
    zdefiniowanie zmiennej

    Jakiej zmiennej. Przecież PESELW, to zakres.
    Jak to logika, że wypełniasz kombo pustym zakresem?


    Taka logika, że przy pierwszym użyciu formularza tabela jest pusta (brak rekordów, to jest ta jedna wyjątkowa sytuacja, w której zakres jest pusty).
  • Poziom 38  
    To dlaczego nie ładujesz do kombo danych, gdy takie dane masz?
  • Poziom 34  
    fafik86 napisał:
    Taka logika, że przy pierwszym użyciu formularza tabela jest pusta

    Tak jak kolega @PRL napisał trochę to dziwnie robisz no ale.
    Wyłącz na chwile błędy i będzie ok
    On Error Resume Next daj przed pętlą.
  • Poziom 2  
    Wg wiadomości PRL.