[vba] automatyczne nadawanie nazw zmiennym

[vba] automatyczne nadawanie nazw zmiennym

Wątek przeniesiony 2024-06-25 14:38 z Inne języki programowania przez cerrato.

YA
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 2 lata
  • Postów:38
0

Witam,
Użytkownik w założeniu, za pomocą przycisku może dodać kolejny "poziom" jakichś działań.
Przykładowo w utworzonym wcześniej zbiorze dat od do) tworzy podzbiór dat na których później coś się liczy. Pierwszemu podzbiorowi przypisuję wartość licznika LICZNIK = 1, pozostałym +1
działając w takim podzbiorze chciałbym aby wartości były przechowywane w indywidualnych zmiennych (tablicach również) dla każdego z podzbiorów

Czy można w jakiś sposób zadeklarować zmienną/tablicę aby jej nazwa była składową nazwy i zmiennej licznik?
Przykładowo w efekcie chciałbym uzyskać: Datakońcaświata(licznik) as date? Datakońcaświata1 .... 2 ... 3 itp w zależności od stanu licznika?

Marcin.Miga
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 6 godzin
  • Postów:2792
0

Uzyj kolekcji. Klucz możesz definiować sobie zupełnie dowolnie.

YA
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 2 lata
  • Postów:38
0

Tak rzuciłem tylko okiem zaraz sbie temat przeczytam ale ... , czy dobrze rozumiem że to taki odpowiednik klas i obiektów z C# ?
Wycofuję pytanie,
Zasada najpierw sprawdź potem pytaj wraca do użycia :)

edytowany 1x, ostatnio: Yanno
YA
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 2 lata
  • Postów:38
0

Uzyj kolekcji. Klucz możesz definiować sobie zupełnie dowolnie.

Ok, dokształciłem się, poczytałem i ... nadal jestem początkującym początkującym :)
Proszę więc o potwierdzenie/zaprzeczenie słuszności obranej drogi. A wygląda to mniej więcej tak:
<> Tworzę sobie kolekcję do przechowywania danych o czymś, niech to będzie dla przykładu zaplanowane działanie serwisowe w samochodzie.
<> Użytkownik tworzy takie działanie (wybiera z listy na ten przykład) pod postacią wymiany opon. Określa terminy, warunki. miejsce i cenę jaką będzie musiał zapłacić.
<> Wprowadzone dane zapisuję w kolekcji jako np. pozycję 1
<> Użytkownik wpadł dodatkowo na pomysł wymiany amortyzatora, bo mu się auto "giba" na zakrętach i teściowa w drodze do kościoła ma nudności. Nikt nie lubi zarzyganej tapicerki.
<> Użytkownik tworzy takie działanie jako kolejne.
<> Wprowadzone dane zapisuję w kolekcji jako pierwsza wolna pozycja.
Użytkownik powtarza swoje działania aż do końca ram, a ja mam dane poukładane w sensowny sposób , z możliwością ich "bezproblemowego" obrabiania na dalszym etapie.
W tym dalszym etapie, dane z każdego z wprowadzonych "Działań serwisowych" będą obrabiane i przetwarzane dalej w innym kontekście. Może dla jasności pominę co dalej bo mi się wymyślanie przykładów nie powiodło :).

Czy taka droga ma sens?
Jeżeli nie, to w którą stronę się kierować?

P.S.
Ten przykład to tylko przykład. Właśnie go wymyśliłem dla zobrazowania problemu.

edytowany 2x, ostatnio: Yanno
Marcin.Miga
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 6 godzin
  • Postów:2792
0

Nie, nie ma sensu. Użyj bazy danych.

YA
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 2 lata
  • Postów:38
0

Nie to że się bronię przed takim rozwiązaniem. W przyszłości z ochotą zacznę to rozpracowywać, gdyż postanowiłem się rozwijać również w tym kierunku.
Jednakże ... chwilowo jako osoba zupełnie początkująca naumiewam się vba od strony excela (dodatkowo i równolegle to samo osiągam poprzez c#) . Uczę się samodzielnie, korzystając głównie z dokumentacji ms, poradników i wujka google. Zanim przejdę do baz danych, chciałbym we własnej ocenie mieć świadomość, poznania podstaw vba (i c#).
W tym konkretnie przypadku chodzi mi o ogarnięcie sposobu na "zarządzanie danymi" w programie.
Mam to szczęście, że mój pracodawca dodatkowo za to (efekty nauki w postaci programu) mi płaci :) W efekcie powstało i działa całkiem dobrze narzędzie do kalkulowania ceny usługi.
Krokiem gdzieś tam kolejnym będzie baza danych i przechowywanie w niej efektów pracy wielu osób, jednak nie jestem na to jeszcze gotowy.

Chwilowo chcę usprawnić i ulepszyć program.
W efekcie, zamiast określenia w arkuszu na sztywno iluśtam pozycji możliwych do wprowadzenia (w przykładzie powyżej - działań serwisowych w samochodzie- choć samo narzędzie nie ma nic wspólnego z samochodami i serwisem) chcę dodawać je w miarę potrzeb.
W moim planie kolekcje wydają się odpowiednie (podkreślam wydają się osobie początkującej).
Chwilowo chcę w niej trzymać dane poukładane w tabelach.
W późniejszym "rozwoju" przejdę do stworzenia sobie klasy, obiektu, i przechowywania danych dla obiektu w kolekcji, ponownego ich przepychania do obiektu aby je "obsłużyć" w innych operacjach itp itd.
Problemem dla mnie było dla mnie to (tutaj opisuję mój tok rozumowania w tamtym czasie), że chcąc obsłużyć dodawanie pozycji jedną procedurą, muszę jakoś wprowadzone dane "zyndywidualizować" (Boże co za słowo), aby odnosiły się do konkretnej dodanej pozycji. Chciałem to zrobić z pominięciem zapisywania sobie tego w arkuszu. I dlatego wątek ma taki tytuł, a nie inny, gdyż zastanowiłem się czy istnieje możliwość aby zmienne (tablice czy inne takie) w których miałem przechowywać wyniki procedury, mogą być "nazwane w locie" - indywidualnie dla każdej z dodanych pozycji (sam siebie nie rozumiem, ale liczę że Wam się uda). Tutaj kolekcja jest jak najbardziej pomocna, za każdym dodaniem pozycji, uzyskane dane wrzucam o worka kolekcji identyfikując je w sposób dowolny i w wypadku potrzeby dalszej obróbki mam do nich bezproblemowy dostęp.
Ominę dzięki temu dotychczasowe działanie - przechowywania koniecznych danych w komórkach arkusza (co na początku było dobrym rozwiązaniem ze względu na łatwość ogarnięcia) i ciągłego pobierania ich, obrabiania i ponownego zapisywania.
Od teraz arkusz ma służyć do przechowywania wyników działania, a nie jako podręczny i łatwy (dla mnie) w obsłudze ze względu na wizualizację ram.

Czyli moja droga w rozwoju umiejętności to chwilowo:
---> kolekcje + podstawowe zmienne
---> kolekcje + Tablice
---> kolekcje + obiekt
Baza danych.

Opisałem jak umiałem ... i dlaczego i co chcę uzyskać.

W moim wczorajszym pytaniu chodzi mi o sens opisanego rozwiązania. Czy warto iść tą drogą, czy ma szansę działać (takie odnoszę wrażenie i kilka podstawowych prób podnosi mnie na duchu) w taki sposób.
Do baz dojdę, ale przede mną jeszcze kilka innych płotków do przeskoczenia.

Ales
  • Rejestracja:około 6 lat
  • Ostatnio:dzień
  • Postów:121
0

Utwórz sobie arkusz, w którym będzie zdefiniowana tabela. Będzie to twoja baza danych. Jeśli nie chcesz aby był widoczny dla użytkownika to w jego właściwościach jest opcja ukrywania - vbveryhidden. Kolekcje są niewygodne w użytku, nie idź w tę stronę

YA
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 2 lata
  • Postów:38
0

Poukrywane, poblokowane iw każdej innej formie zaczarowane arkusze z danymi mam i używam. Działają i to dobrze, ale jak zawsze istnieje jakieś ale...

  • Dużo operacji zapisu i odczytu danych to dużo zmarnowanego czasu. Gdy to się robi raz, aby zrzucić wynik (zapisać lub wczytać efekt pracy) to jeszcze ok, ale traktowanie arkusza jak podręcznej pamięci do obliczeń to już spore różnice w działaniu. Sprawdziłem sobie na przykładzie tabeli i arkusza - utworzenie kalendarza, sprawdzenie i oznaczenie konkretnych dni, porównanie kalendarzami pomocniczych dat (np. świąt, choć kalendarzy pomocniczych w sumie jest z 10) i odpowiednie działanie w razie gdy ... ). W wypadku arkusza dla okresu 3 lat trwa to około 7 sekund. Gdy te same dane przepchnę w tablice, to praktycznie działa w jednym kliknięciu myszki.

  • Tablica dała mi możliwości, które dla arkusza są niedostępne - więcej wymiarów. Do tego samego kalendarza stworzyłem sobie tablicę 3d. rok/miesiąc/dzień, na skrzyżowaniu przechowuję sobie wartości "byte" określające "cośtam". Jasne że mogę w arkuszu i inaczej, ale okazało się to całkiem wygodne.

  • Właśnie byłem 10 dni na urlopie i z marszu wróciłem do obróbki mojego projektu, potrzebowałem do tego tylko 10 minut na kawę, kiedy wcześniej musiałem sobie pół dnia przypominać co jest czym i po co. Dobrze przemyślana tablica ułatwia (to moje subiektywne wrażenie) działania. Wcześniej większość kodu odpowiadała za zapis danych w taki sposób aby później można było to odnaleźć. Było to upierdliwe, gdyż po kilku dniach robienia innych elementów zawsze wymagało to ponownej analizy co i jak się dzieje. teraz wystarczy pamiętać YY/MM/DD i co wartości oznaczają. Gdybym od razu zaczął od tablic, oszczędziłbym sobie masę roboty (za to niczego bym się nie nauczył).

Czy kolekcje są niewygodne? Być może, tylko teraz mam "awersję" do poprzedniej formy. Samo ogarnianie danych w projekcie tak, aby były gotowe do użycia później, to było 50% kodu. Teraz (szacunkowo, jak już całość przerobię) około 5%. Rząd wielkości to spory sukces. To mi się w głowie mieści, poprzednia metoda wysypywała się uszami.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)