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

EXCEL - Jak wymusić MsgBox przy błędnym wpisie w zakresie komórek?

JaroFon 20 Wrz 2015 20:12 1080 13
REKLAMA
  • #1 15008621
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Witam. Jak w oknie MsgBox wymusić informację jeśli w danym zakresie komórek arkusza wpiszę dane które tam nie mogą być? Chodzi o to żeby w komórkach przez pomyłkę nie pojawiło się nic innego jak tylko cyfry. Żadnych liter, znaków specjalnych, interpunkcyjnych, plusów, minusów, tylko cyfry.
  • REKLAMA
  • Pomocny post
    #2 15008676
    markoz7874
    Poziom 31  
    Posty: 1776
    Pomógł: 132
    Ocena: 208
    Dane->sprawdzanie poprawności->kryteria poprawności ->pełna liczba
  • Pomocny post
    #3 15008785
    Maciej Gonet
    Specjalista - VBA, Excel
    Posty: 2207
    Pomógł: 824
    Ocena: 481
    A nie wystarczy sprawdzanie poprawności danych - opcja pełna liczba i podać zakres od 0 albo od 1 do ile potrzeba. Jeśli dane wprowadzane z klawiatury i użytkownik nie jest złośliwy, to powinno wystarczyć. Co innego jeśli dane są kopiowane z innych komórek, wtedy ten mechanizm nie działa. Wstawiłem do A1.
    Komunikat MsgBox można wyświetlić przy zmianie wartości komórki przez procedurę obsługi zdarzenia Change. W procedurze trzeba określić zakres komórek, w jakim ma to być sprawdzane. Jeśli to konieczne, to na przykład dla zakresu A2:A4 mógłby być taki kod:
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod

    W razie błędu pozostawia pustą komórkę.
    Załączniki:
    • Liczby_calkowite.xls (32.5 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #4 15009586
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Sprawdzanie poprawności danych było by wystarczające jednak problem w tym że nie mogę tej opcji ustawić odgórnie, dlatego że plik w którym ma być ta opcja jest tworzony z innego głównego pliku i zakres w którym ma działać sprawdzanie danych jest ruchomy. Dlatego sprawdzanie danych musi być włączone przez makro. Zakres w którym ma być ustawione sprawdzanie danych jest poniżej. Jak w tym makro ustawić ten zakres sprawdzania danych?

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #5 15009769
    Maciej Gonet
    Specjalista - VBA, Excel
    Posty: 2207
    Pomógł: 824
    Ocena: 481
    Dzień dobry,
    A co w tym kodzie oznacza "ark"? Czy nie jest to arkusz aktywny (ActiveSheet)?
    Poza tym czy 6 to stała? Jeśli tak, to po co tak komplikować ten adres, wystarczy
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
    Poza tym, jak często zmienia się wartość "dstW"?
    W sumie można makrem uruchomić też sprawdzanie poprawności danych, tylko tę procedurę należałoby uruchamiać po każdej zmianie dstW. Kod byłby taki:
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod


    A jeśli chodzi o tę moją propozycję kodu w procedurze obsługi zdarzenia, to procedura powinna być wpisana do modułu arkusza "ark", a w samej treści zamiast
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
    należy wpisać
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
    TYlko ta zmienna dstW musi być widoczna dla tego zdarzenia, więc nie może być zadeklarowana wewnątrz jakiejś procedury, tylko przed procedurami w module ogólnym jako zmienna publiczna.
    Pozdrowienia
  • REKLAMA
  • #6 15009999
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    @-Maciej_ Gonet dzięki wielkie. Makro działa idealnie. O to mi właśnie chodziło. Nie wiedziałem ze można zrobić coś takiego że jak aktywuje komórkę z zakresu to cały czas wyświetla informacje. Ale zapomniałem jeszcze o jednym. Czy możesz mi pomóc przy dodaniu do makro jeszcze jednej opcji. W tym samym zakresie potrzebuje aby dodać informacje ze jeżeli do komórki wpisze wartość od 20 tysięcy w zwysz aby mnie o tym poinformowało cze taka wartość została wpisana i abym sprawdził czy się nie pomyliłem.
  • #7 15010018
    Maciej Gonet
    Specjalista - VBA, Excel
    Posty: 2207
    Pomógł: 824
    Ocena: 481
    Już się pogubiłem. Dostałeś dwie propozycje - jedną z poprawnością danych, drugą z komunikatem w MsgBox - więc którą wybrałeś i gdzie ma być to ostrzeżenie o przekroczeniu wartości 20000?
  • #8 15010034
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Wybrałem poniższy kod. Jest jak dla mnie najbardziej idealny. I do tego kodu czy można dodać taką informacje o wpisaniu wartości 20 tysięcy i powyżej. Problem w tym że zakres w którym ma to się wszystko dziać jest na początku niewiadomych. Dopiero po wygenerowania całej listy, dstW mówi jak daleko sięga zakres. Czyli ja z głównego pliku generuje listę, lista jest wstawiania do nowego pliku i tam właśnie poniższy kod wstawia odpowiednie formatowania. Jeśli to mało to wstawię Ci cały mój kod którym to robię.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #9 15010154
    Maciej Gonet
    Specjalista - VBA, Excel
    Posty: 2207
    Pomógł: 824
    Ocena: 481
    Procedura poprawności danych może sprawdzać w komórce tylko jeden warunek i podejmować jeden rodzaj akcji w razie niespełnienia tego warunku. Tak jak jest to w tej chwili napisane wpis poprawny to liczba całkowita od 1 do 1000
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod

    i jeśli warunek nie jest spełniony, zgłasza błąd krytyczny (liczbę trzeba koniecznie poprawić lub powrócić do poprzedniego wpisu, aby można było iść dalej).
    Wartość graniczną można oczywiście zmienić wg potrzeb, ale teraz pojawia się nowy warunek: przekroczenie 20000, ale już nie błąd krytyczny, tylko ostrzeżenie. Tego nie da się zrobić jednocześnie w procedurze poprawności danych. Albo procedura będzie pilnowała, żeby nie wprowadzać liczb ujemnych, ułamków ani tekstów i dla takiej procedury trzeba ustalić górną granicę, której nie wolno przekroczyć (jeśli nie ma takiej granicy, można podać dowolnie dużą liczbę), albo procedura będzie sprawdzała przekroczenie granicy 20000 i wyświetlała tylko komunikat ostrzegawczy (ale wtedy ułamki i liczby ujemne trzeba wyeliminować w inny sposób). Więc należałoby połączyć dwa rozwiązania - jedno sprawdzać za pomocą procedury poprawności danych, a drugie za pomocą zdarzeń - tylko które jak? Za pomocą procedury zdarzeniowej można korygować wpisy - ułamki zaokrąglać, liczby ujemne zamieniać na najmniejszą dopuszczalną, teksty ignorować, a w razie przekroczenia 20000 uruchomić kontrolę poprawności z ostrzeżeniem. Albo odwrotnie - sprawdzać poprawność w kontroli poprawności, a przekroczenie zakresu 20000 sygnalizować MsgBoxem.
    Nie wiem, który wariant jest bardziej odpowiedni.
  • #10 15010466
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    Sprawdzanie poprawności jakie tu zostało zaproponowane zostawię bo to dobre rozwiązanie. Co do informacji o wpisie wartości powyżej 20000 to zastosowałbym MsgBox. Problem w tym że jeśli chciałbym zastosować MsgBox to muszę w arkuszu odgórnie zapodać na jakim zakresie to ma działać a niestety arkusz nie wie jaki będzie zakres dopóki nie wygeneruję listę. Ale znalazłem na to sposób. Tak na prawdę arkusz wie gdzie będzie koniec zakresu bo w komórce E2 po wygenerowaniu listy pojawi się cyfra mówiąca o tym ile jest pozycji w liście a to jest po prostu koniec zakresu. Do E2 po generacji listy wkleja się wzorzec ILE.LICZB który mówi o tym ile jest pozycji w liście. Może na podstawie tego idzie wykorzystać te dane? Próbuje coś jak poniżej ale nie wiem jak to rozwinąć tak aby poprawnie działało i informowało o wpisach od 20000 i powyżej.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #11 15011161
    Maciej Gonet
    Specjalista - VBA, Excel
    Posty: 2207
    Pomógł: 824
    Ocena: 481
    Jeśli nie ma górnego ograniczenia dla wprowadzanych liczb procedurę Walidacji można zapisać też tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Natomiast procedurę zdarzeniową sygnalizującą przekroczenie wartości 20000 umieszczamy w module arkusza. Może ona wyglądać tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Procedura uruchamia się w komórkach, w których jest ustawiona walidacja. Jeśli wprowadzona wartość przekracza 20000, wyświetlany jest komunikat ostrzeżenia. Potwierdzenie pozostawia komórkę bez zmiany, odpowiedź negatywna kasuje wpis i pozostawia pustą komórkę.
  • #12 15011292
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    @-Maciej_ Gonet jesteś wielki. Rewelacja. O to mi chodziło. Dałem tak jak w poniższym kodzie. W MsgBox dodałem informację jaką kwotę wpisałem. Jeszcze kombinuję czy można by dodać informację jakiemu pracownikowi dałem tą kwotę powyżej 20 000. Pracownik znajduje się w kolumnie B.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #13 15011377
    Maciej Gonet
    Specjalista - VBA, Excel
    Posty: 2207
    Pomógł: 824
    Ocena: 481
    Odwołanie do komórki z kolumny B w tym samym wierszu co Target:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #14 15011390
    JaroFon
    Poziom 23  
    Posty: 1631
    Pomógł: 11
    Ocena: 355
    @-Maciej_ Gonet wielkie dzięki za pomoc ;)

Podsumowanie tematu

✨ W dyskusji poruszono problem wymuszenia wyświetlania komunikatu MsgBox w programie Excel, gdy użytkownik wprowadza dane niezgodne z określonymi kryteriami w zakresie komórek. Użytkownik chciał, aby wprowadzane dane były wyłącznie liczbami całkowitymi, bez liter i znaków specjalnych. Proponowane rozwiązania obejmowały użycie walidacji danych oraz procedur obsługi zdarzeń, które wyświetlają komunikaty w przypadku wprowadzenia wartości przekraczających 20 000. Użytkownicy dzielili się kodem VBA, który umożliwia dynamiczne ustawienie zakresu walidacji oraz wyświetlanie komunikatów ostrzegawczych w zależności od wprowadzonych wartości.
Wygenerowane przez model językowy.
REKLAMA