logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

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

fafik86 25 Mar 2020 15:07 708 7
REKLAMA
  • #1 18559371
    fafik86
    Poziom 2  
    Posty: 4
    Ocena: 1
    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
  • REKLAMA
  • Pomocny post
    #2 18559570
    PRL
    Poziom 41  
    Posty: 6887
    Pomógł: 953
    Ocena: 892
    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.
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #3 18561962
    fafik86
    Poziom 2  
    Posty: 4
    Ocena: 1
    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źć.
  • REKLAMA
  • #4 18562082
    PRL
    Poziom 41  
    Posty: 6887
    Pomógł: 953
    Ocena: 892
    Cytat:
    zdefiniowanie zmiennej

    Jakiej zmiennej. Przecież PESELW, to zakres.
    Jak to logika, że wypełniasz kombo pustym zakresem?
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #5 18562137
    fafik86
    Poziom 2  
    Posty: 4
    Ocena: 1
    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).
  • #7 18563068
    clubs
    Poziom 38  
    Posty: 2219
    Pomógł: 629
    Ocena: 406
    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ą.
  • #8 18563882
    fafik86
    Poziom 2  
    Posty: 4
    Ocena: 1
    Wg wiadomości PRL.

Podsumowanie tematu

✨ Dyskusja dotyczy problemu z dynamicznym zakresem "PESELW" w formularzu Userform w VBA, który generuje błąd Run-time error '1004' w przypadku, gdy zakres jest pusty. Użytkownik próbuje dodać elementy do comboboxa, ale napotyka na trudności, gdy tabela nie zawiera rekordów. Uczestnicy sugerują, aby przed dodaniem elementów do comboboxa sprawdzić, czy zakres jest pusty, oraz rozważyć użycie instrukcji "On Error Resume Next" w celu zignorowania błędów. Wskazują również na konieczność wcześniejszego zdefiniowania zakresu przed uruchomieniem formularza.
Wygenerowane przez model językowy.
REKLAMA