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

TextBox w UseForm: Jak wprowadzić formułę zamiast liczby?

bursonik 23 Paź 2017 20:09 1158 7
REKLAMA
  • #1 16774788
    bursonik
    Poziom 8  
    Posty: 23
    Ocena: 2
    Cześć,
    mam utworzony taki texbox w którym w tej chwili mogę wpisywać liczby i one pojawiają mi się w moim kosztorysie. Problem polega na tym aby kosztorys był prawidłowy musi być weryfikowalny czyli tzw. przedmiar musi być w komórce zapisany jako dodawanie, mnożenie odejmowanie itd.
    Chciałbym aby ktoś z was w razie możliwości pomógł mi przekształcić go w takie coś, że jak będę w nim wpisywać 2+3-4*(56-2) to w odpowiedniej komórce wrzuci mi formułę czyli =2+3-4*(56-2) i komórka da wynik. Musi być w komórce formula nie może być sam wynik . Na razie jest tak że w texbox da się wpisać tylko liczbę bez żadnych znaków i nawiasów.
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod


    Z góry dzięki za pomoc.
  • REKLAMA
  • #2 16775450
    lanzul
    Poziom 30  
    Posty: 1023
    Pomógł: 199
    Ocena: 123
    bursonik napisał:
    wpisywać 2+3-4*(56-2) to w odpowiedniej komórce wrzuci mi formułę czyli =2+3-4*(56-2)

    No to sobie kolega chyba trochę poczeka ... bo ... np.:

    1. trzeba sprawdzić, czy wprowadzane znaki mieszczą się na liście tych akceptowalnych, np.:
    "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "(", ")", "+", "-", "*", "/", "^", "%", "="

    2. trzeba sprawdzić, czy wpisywany łańcuch znaków nie kończy się znakiem innym jak ")" lub "%"
    3. trzeba sprawdzić, czy jak pkt 2., to czy jest wcześniej znak "("

    Pętelki i porównania, a może ktoś i za wyrażenia regularne się złapie ...
  • REKLAMA
  • #3 16775517
    bursonik
    Poziom 8  
    Posty: 23
    Ocena: 2
    Udało się coś mi takiego bez tych "idioto-odpornych" założeń. Jak ktoś źle coś wpisze to nic nie wstawi w komórkę i podświetli ją na czerwono więc też jest ok.
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #4 16776080
    lanzul
    Poziom 30  
    Posty: 1023
    Pomógł: 199
    Ocena: 123
    To może w ogóle coś takiego ? Przerzucić całe zdarzenie na wyjście z TextBox2.
    Po co za każdym wpisaniem jakiegoś znaku - czy będzie on akceptowalny, czy też nie - sprawdzać czy nie powoduje błędu i wpisywać go w arkusz lub nie ?
    Zrobić to "zbiorczo" raz i krócej ...
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Można ewentualnie dodać etykietę, która będzie wyświetlać info o błędzie lub wynik działania, jeśli będzie wszystko w porząsiu ...
  • #5 16776127
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1463
    nie ma "płaskich" algorytmów, które rozwiążą takie wyrażenia. Jakikolwiek rozsądny algorytm musi być rekurencyjny.
    Temat jest w branży znany, użyteczne może być googlanie "expression parser" albo "expression evaluator".
    Nie bardzo prowadzą do tego wyrażenia regularne, posiekają na części, ale nie obliczą (moim zdaniem "moda" na wyrażenia regularne jest nadmierna - kod jakiegokolwiek większego wyrażenia regularnego jak trzeba poprawić, albo rozbudować, okazuje się kodem "write-only" Link).

    Rady na poziomie "liczenia literek" nie bardzo prowadzą do czegokolwiek, i zupełnie trzeba oddzielić sobie w głowie zagadnienia GUI (zdarzenia, Label'e itd) od parsowania.

    Nie umiem w krótkim poście wyłożyć teorii paserów o wymiarze przynajmniej pół semestru. Tego się nie da zrobić na zasadzie "bo bardzo chcę", trochę bazy teoretycznej trzeba.

    Twoim celem jest uzyskać skutek, czy napisać własny mechanizm parsowania wyrażenia?
    Ja realizuję parsery (średnie i większe) w takim narzędziu Antlr, choć nie sądzę aby taka rada była pomocna.
    Jest wiele gotowych ewaluatorów do wyrażeń (choć ich filozofię też trzeba "zakumać")
  • #6 16776213
    lanzul
    Poziom 30  
    Posty: 1023
    Pomógł: 199
    Ocena: 123
    To tylko excel, arkusz kalkulacyjny, a nie specjalizowany program z algorytmami wyszukiwania zapożyczonymi, ze znanych z prasy codziennej, agencji wywiadowczych.
    Ma za zadanie ułatwić życie użytkownikowi w codziennym używaniu tegoż arkusza, w tym przypadku, do szybkiego tworzenia "kosztorysów".
    Bardzo chwalebne, że kolega bursonik stara się sam sobie pomagać ... korzystając od czasu do czasu z pomocy innych ...
  • #7 16776395
    kinggustav
    Poziom 27  
    Posty: 797
    Pomógł: 93
    Ocena: 93
    Pomysł z analizą wyrażenia wydaje się trochę nadmiarowy. Oczywiście, żeby było idealnie to tak trzeba, ale zastanówmy się co się stanie jak wpiszemy z błędem. Excel poinformuje o błędzie i się poprawimy. Można też przechwycić komunikat błędu i podstawić własny po czym wymusić przejście do edycji wyrażenia. W większości przypadków to wystarczy, a jest znacznie prostsze.
  • REKLAMA
  • #8 16776604
    lanzul
    Poziom 30  
    Posty: 1023
    Pomógł: 199
    Ocena: 123
    kinggustav napisał:
    W większości przypadków to wystarczy, a jest znacznie prostsze

    bursonik napisał:
    Jak ktoś źle coś wpisze to nic nie wstawi w komórkę i podświetli ją na czerwono więc też jest ok

    Właśnie ... jak widać autor rozwiązał już sprawę "bez naszej pomocy" ... i to też jest bardzo dobre.

Podsumowanie tematu

✨ Użytkownik poszukuje sposobu na wprowadzenie formuł matematycznych do TextBox w aplikacji Excel, aby wyniki były zapisywane jako formuły, a nie tylko jako liczby. W odpowiedziach zaproponowano różne podejścia, w tym sprawdzanie poprawności wprowadzanych znaków oraz wykorzystanie zdarzenia wyjścia z TextBox do wstawiania formuły. Użytkownicy podkreślili, że można użyć funkcji Application.Evaluate do oceny wprowadzonych formuł, a także zasugerowali, że obsługa błędów może być uproszczona poprzez przechwytywanie komunikatów błędów Excela. Wskazano również na potrzebę teoretycznego zrozumienia parsowania wyrażeń matematycznych.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA