ID tematu: 75464
 |
Formularz uzupełniający bazę o brakujące dane |
Autor |
Wiadomość |
partner2001
Exceloholic

Wersja: Win Office 365
Posty: 245
|
Wysłany: 19-01-2024, 14:38 Formularz uzupełniający bazę o brakujące dane
|
|
|
Witam serdecznie.
Stworzyłem w pliku excela bazę danych w tabeli.
Tabela ta jest częściowo wypełnina.
Posiada wpisane min. : nrID. nr meczy, nazwiska zawodników, w niektórych wypadkach nr stołów.
Potrzebuję aby formularz pozwalał wpisać brakujące dane tj.:
wyniki rozegranych setów, zwyciezcę meczu. itd. jednocześnie pobierając wprowadzone dane do tej bazy.
I tak Formularz ma pobrać dane:
- Pole Nazwa turnieju ma być pobrane z arkusza info z komórki C3
- Nr meczu Kolumna B tabeli w arkuszu TG64
- Nr stołu kolumna C
- Nawisko 1 zawodnika kolumna D
- Nawisko 2 zawodnika kolumna D
- dopisać dane:
- Kolumny: F,H,I,K,L,N,O, Q,R,T - wyniki poszczególnych setów w punktach poszczególnych setów
- Kolumny U i W - podsumowanie meczu czyli wynik wynikający z setów np. 3:0, 3:1; 3:2, 0:3; 1:3, 2:3
- wpisać (jeśli jej nie ma) nazwisko i imię zwycięzcy.
Chciałbym aby Formularz otwierał sie po kliknięciu myszką na nr meczu w tabeli bazy danych i żeby domyślnie zostały pobrane dane przypisane dla tego meczu. Po otwarciu formularza
Rekord można zmienić wybierając nr meczu z listy (pole combo Box) lub scrollbarem.
Nr stołu jeśli jest w bazie niech się pobierze jako wartość domyślna ale można ją zmienić lub wpisać.
Przyciski: zgodnie z ich opisem.
Czy może mi ktoś pomóc. To jest mój pierwszy formularz i nie mam pojęcia jak się programuje formularze.
Plik w załączeniu a formularz ma nazwę - WprowadzanieMeczy.
Nie wiem czy jest to możliwe aby wprowadzane dane w formularzu były sprawdzane pod względem poprawności tj.
Lewy i prawy wynik seta to liczba całkowita z zakresu od 0 do 199 ale:
- jeżeli lewy wynik mniejszy od 10 to prawy musi być 11 i na odwót
- jeżeli lewy jest równy 11 to prawy musi być mniejszy od 10 lub równy 13
- jeżeli lewy wynik jest równy 10 to prawy musi być o 2 większy czyli 12
- jeżeli lewy wynik jest większy od 11 to prawy musi być o 2 pkty mniejszy lub większy np 12:10; 13:11 lub 12:14; 15:17 itd.
- jeżeli już jeden z zawodników wygrał 3 sety to nie można już wpisać danych w następnym secie - mecz się zakończył.
TworzenieFormularza.xlsm
|
Pobierz Plik ściągnięto 70 raz(y) 111.26 KB |
|
_________________ Dziękuję za pomoc.
Pozdrawiam
Leszek |
|
 | ID posta:
432852
|
|
|
 |
|
|
|
Tadek
Excel Expert

Wersja: Win Office 2010
Pomógł: 2222 razy Posty: 6121
|
Wysłany: 20-01-2024, 09:16
|
|
|
Dużo tego.
Na początek:
pobieranie farmularza z danymi.
Ps. Formularz ukazuje się po 2-krotnym klknięciu w nr meczu.
TworzenieFormularza (T).xlsm
|
Pobierz Plik ściągnięto 59 raz(y) 121.49 KB |
|
|
 | ID posta:
432869
|
|
|
 |
|
|
partner2001
Exceloholic

Wersja: Win Office 365
Posty: 245
|
Wysłany: 20-01-2024, 10:39
|
|
|
Jak na razie super. o to mi chodziło.
Teraz wpisywanie do formularza wyników setów ze sprawdzeniem poprawności wpisywanych wartości. W excelu zrobiłbym to warunkami "jeżeli" i podsumowaniem warunków funkcją "oraz" ale jak to zrobić w VBA to nie mam pojęcia.
Bardzo dziękuję za dotychczasową pracę.
Wiem, że tego jest dużo ale może jakaś wspólna wiedza kilku expertów pomoże w rozwiązaniu tego zadania. |
_________________ Dziękuję za pomoc.
Pozdrawiam
Leszek |
|
 | ID posta:
432871
|
|
|
 |
|
|
master_mix
Excel Expert


Wersja: Win Office 365
Pomógł: 1293 razy Posty: 2637
|
Wysłany: 20-01-2024, 19:39
|
|
|
Nie wiem czy rozsądne jest nie znając VBA budowanie takiego projektu.
Bo co z tego że jakiś zarys działającego projektu zamieszczam poniżej, jak i tak żeby cokolwiek dodać, pozmieniać będziesz za każdym razem potrzebował pomocy.
Zastanów się czy nie zrobić tego "standardowo", czyli odpowiednio dopasowany do edycji arkusz excela bez kodów, ewentualnie jakieś drobne elementy funkcjonalności podbite kodami.
W załączniku przykład. Miłej zabawy :)
TworzenieFormularza.xlsm
|
Pobierz Plik ściągnięto 69 raz(y) 165.52 KB |
|
_________________
Podejmę współpracę (pracę)
Programowanie C#, Android, iOS, VB.NET, VBA, ASP.NET Core, WPF, Xamarin, Power Platforms, XAML, MVC, LINQ, Entity Framework. Bazy danych SQL Server, Oracle, MySQL, Firebird
Wrocław i okolice …lub zdalnie. |
|
 | ID posta:
432882
|
|
|
 |
|
|
partner2001
Exceloholic

Wersja: Win Office 365
Posty: 245
|
Wysłany: 20-01-2024, 21:37
|
|
|
Dziękuję bardzo za pomoc.
Myślę, że jest rozsądne uczenie się czegoś nowego nawet jak się ma ponad 60 lat.
VBA uczę się i myślę, że pomoc ekspertów pomoże mi poszerzać moją wiedzę z tego zakresu.
Brak celi do zrealizowania, nowych wyzwań powoduje, że człowiek traci sens życia.
Zapytałem kiedyś (chyba Tajana) gdzie mógłbym się najskuteczniej nauczyć programowania w VBA a on mi odpowiedział że "tutaj" (mając na myśli to forum).
Więc uczę się korzystając z wiedzy mądrzejszych ode mnie - i bardzo dziękuję wszystkim którzy mi pomogli i tym którzy mi pomogą w przyszłości.
Myślę, że również i w tym temacie ktoś mi pomoże oraz, że z moich tematów i ich rozwiązań skorzystają również inni.
Jeszcze raz dziękuję za pomoc i proszę o dokończenie tego tematu. |
_________________ Dziękuję za pomoc.
Pozdrawiam
Leszek |
|
 | ID posta:
432886
|
|
|
 |
|
|
master_mix
Excel Expert


Wersja: Win Office 365
Pomógł: 1293 razy Posty: 2637
|
Wysłany: 20-01-2024, 22:37
|
|
|
partner2001 napisał/a: | Myślę, że jest rozsądne uczenie się czegoś nowego nawet jak się ma ponad 60 lat. |
NIGDY nie jest za późno! Trzymam kciuki
partner2001 napisał/a: | Zapytałem kiedyś (chyba Tajana) gdzie mógłbym się najskuteczniej nauczyć programowania w VBA a on mi odpowiedział że "tutaj" |
100% racji
partner2001 napisał/a: | Jeszcze raz dziękuję za pomoc i proszę o dokończenie tego tematu. |
Ale podałem Ci gotowe rozwiązanie, wszystkie założenia z twojego wątku działają.
Uruchamiasz formularz klikając 2x w wierszu z meczem (jakakolwiek komórka w kolumnie B:E) |
_________________
Podejmę współpracę (pracę)
Programowanie C#, Android, iOS, VB.NET, VBA, ASP.NET Core, WPF, Xamarin, Power Platforms, XAML, MVC, LINQ, Entity Framework. Bazy danych SQL Server, Oracle, MySQL, Firebird
Wrocław i okolice …lub zdalnie. |
|
 | ID posta:
432889
|
|
|
 |
|
|
partner2001
Exceloholic

Wersja: Win Office 365
Posty: 245
|
Wysłany: 21-01-2024, 10:21
|
|
|
Witaj ponownie. I jeszcze raz dziękuję.
Napisałem o dokończeniu bo:
- Pole Nazwa turnieju nie pobiera z arkusza info z komórki C3 tylko jest opis.
- Pole Nr stołu pobiera się z tabeli ale w wypadku gdy jest puste nie można wpisać ani zmienić nr stołu w formularzu.
- fantastycznie by było(chociaż wiem że to dużo pracy) gdyby na koniec lini po apostrofie było opis tej lini. Jest to bardzo uczące i byłoby pomocne w modernizowaniu kodu i nauce innych użytkowników tego forum. |
_________________ Dziękuję za pomoc.
Pozdrawiam
Leszek |
|
 | ID posta:
432894
|
|
|
 |
|
|
master_mix
Excel Expert


Wersja: Win Office 365
Pomógł: 1293 razy Posty: 2637
|
Wysłany: 21-01-2024, 20:42
|
|
|
partner2001 napisał/a: | gdyby na koniec lini po apostrofie było opis tej lini. |
no to jest faktycznie dużo pisania :D, może jak kiedyś znajdę więcej czasu i chęci
Generalnie najważniejsze przy jakichkolwiek zmianach jest pilnowanie komunikacji klas:
UserForm (WprowadzanieMeczy)
ClassGameList
ClassGameData
Klasa ClassGameList, jest nadrzędna i kontroluje ClassGameData "aktywną" w formularzu, jak również generuje zdarzenie zmiany pól tej klasy "aktywnej" po zapisie, potrafi też ustawić która klasa (mecz) ClassGameData ma być aktywna.
Natomiast klasa ClassGameDat jest nadrzędna dla klas ClassSetData (setów) które są kolekcją/tablicą. Jest też nadrzędną dla klasy ClassGameElement, która to przechowuje nrMeczu i wiersz arkusza w którym jest wpis.
To tak z grubsza. i z tego co jeszcze pamiętam
Nie jest to oczywiście wszystko optymalnie przemyślane, bo aż tyle czasu wolnego to nie mam ;)
pilnuj procedur w klasie ClassGameList:
ActiveGameWriteToSheet - zapis aktywnej (w formularzu) gry do arkusza
GameActivate - pobranie danych z arkusza dla aktywnej gry w formularzu-> ta procedura właśnie generuje zdarzenie zmiany ActiveGame dla formularza
TworzenieFormularza.xlsm
|
Pobierz Plik ściągnięto 65 raz(y) 162.81 KB |
|
_________________
Podejmę współpracę (pracę)
Programowanie C#, Android, iOS, VB.NET, VBA, ASP.NET Core, WPF, Xamarin, Power Platforms, XAML, MVC, LINQ, Entity Framework. Bazy danych SQL Server, Oracle, MySQL, Firebird
Wrocław i okolice …lub zdalnie. |
|
 | ID posta:
432903
|
|
|
 |
|
|
partner2001
Exceloholic

Wersja: Win Office 365
Posty: 245
|
Wysłany: 22-01-2024, 09:16
|
|
|
Serdeczne dzięki.
Działa ok.
W wyrazamia szacunku. |
_________________ Dziękuję za pomoc.
Pozdrawiam
Leszek |
|
 | ID posta:
432914
|
|
|
 |
|
|
partner2001
Exceloholic

Wersja: Win Office 365
Posty: 245
|
Wysłany: 22-01-2024, 16:04
|
|
|
Jeszcze jedno pytanie.
Jeśli mam stworzony plik w którym jest jeden arkusz "info" oraz 4 arkusze TG64; TG32; TG16 i TG8 iinne arkusze ale formularz ich nie dotyczy oraz w każdym z nich takie same tabele różniące się tylko liczbą meczy ( najwięcej w tym TG64) to musze mieć 4 takie same formularze z opisem np. WprowadzenieMeczy64; WprowadzanieMeczy32; WprowadzanieMeczy16 i WprowadzanieMeczy8 oraz dla każdego formularza Moduły class formularza np. ClassGammeData64; ClassGammeData32; ClassGammeData16; ClassGammeData8; ClassGameElement64; ClassGameElement32; ClassGameElement16; ClassGameElement8 itd z następnymi modułami? oczywiście muszę je zmodyfikować w miejscach gdzie odnoszą się do arkusza TG64 (arkTG64)? |
_________________ Dziękuję za pomoc.
Pozdrawiam
Leszek |
|
 | ID posta:
432920
|
|
|
 |
|
|
master_mix
Excel Expert


Wersja: Win Office 365
Pomógł: 1293 razy Posty: 2637
|
Wysłany: 23-01-2024, 01:20
|
|
|
nic nie musisz powielać, te klasy mogą być uniwersalne.
Tylko trzeba małą modyfikację zrobić, żeby mogły dotyczyć dowolnego arkusza o tej samej strukturze.
Mianowicie w klasie ClassGameList, dodaj na początku klasy jeszcze jedną deklarację
Kod: | Private gameSheet As Worksheet |
teraz w tejże klasie pozmieniaj w kodach wszystkie arkTG64 na gameSheet
W tejże też klasie zmień deklarację w metodzie inicjującej na Kod: | Public Sub GameListInitialize(ByVal firstRow As Long, ByVal actSheet As Worksheet) |
i wewnątrz jej dopisz linię kodu: Kod: | Set gameSheet = actSheet |
Na koniec usuń w zdarzeniu arkusza TG64 cały kod
A dodaj nowy w zdarzeniu skoroszytu:
Kod: | Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim frmMecz As WprowadzanieMeczy
Dim poz
Dim arkuszeInne
Dim listaMeczy As ClassGameList
'tutaj wpisz arkusze które nie są arkuszami meczów
arkuszeInne = Array("info", "jakisTam_1", "jakisTam_2")
poz = Application.Match(Sh.Name, arkuszeInne, 0)
If IsError(poz) Then
If Not Intersect(Target(1), Sh.Columns("B:E")) Is Nothing Then
If IsNumeric(Sh.Range("B" & Target(1).Row).Value) Then
Cancel = True
Set listaMeczy = New ClassGameList
listaMeczy.GameListInitialize 2, Sh
Set frmMecz = New WprowadzanieMeczy
frmMecz.StartGameData Sh.Range("B" & Target(1).Row).Value, listaMeczy
frmMecz.Show
End If
End If
End If
End Sub |
i wszystko powinno działać |
_________________
Podejmę współpracę (pracę)
Programowanie C#, Android, iOS, VB.NET, VBA, ASP.NET Core, WPF, Xamarin, Power Platforms, XAML, MVC, LINQ, Entity Framework. Bazy danych SQL Server, Oracle, MySQL, Firebird
Wrocław i okolice …lub zdalnie. |
|
 | ID posta:
432934
|
|
|
 |
|
|
partner2001
Exceloholic

Wersja: Win Office 365
Posty: 245
|
Wysłany: 23-01-2024, 14:14
|
|
|
Po raz kolejny dzięki.
Jesteś WIELKI
Zmodyfikowałem kod i wstawiłem do mojego pliku.
Załączony przeze mnie plik TworzenieFormularza jest plikiem stworzonym dla celów tego tematu na tym forum a plik docelowy jest trochę inny tak jak już wierz zawierający duzo wiecej arkuszy i układ tabeli jest trochę inny bo po lewej stronie jest drabinka turniejowa a po prawej stronie drabinki tabela z wynikami.
Ale chyba działa.
Mam jeszcze jedno pytanie.
Czy można dodać jeszcze zestaw komórek arkusza po których nastąpi uruchomienie formularza - wiem, że jak kliknę na komórki z wierszy Nr meczu, Nr stołu, Zawodnik1 i Zawodnik2 to uruchomi się Formularz - ale chciałbym żeby również klikając w inne komórki arkusza uruchamiał się formularz z domyślnym nr meczu równym wartości tej komórki.
Np. Klikam w komórkę "D9" (której wartość = 1) - otwiera się formularz z domyślnie ustawionym Nr meczu 1, Klikam komórkę "G11" (której wartość = A) - otwiera się formularz z domyślnie ustawionym Nr meczu A; Klikam komórkę "D13" (której wartość = 2) - otwiera się formularz z domyślnie ustawionym Nr meczu 2; Klikam komórkę "J15" (której wartość = Q) - otwiera się formularz z domyślnie ustawionym Nr meczu Q; i tak dalej.
Tych komórek byłoby tyle ile jest meczy tj. 191.
Ja oczywiście nie chcę Ciebie obciążać wypisywaniem tych wszystkich adresów komórek.
Sam je wpiszę.
Co prawda mógłbym rozszerzyć zakres kolumn od D do Y i klikając PKM otworzyłby się formularz, ale nie przymnie on domyślnej wartości nr meczu z tej komórki.
Widok arkusza TG64.pdf
|
Pobierz Plik ściągnięto 48 raz(y) 133.11 KB |
|
_________________ Dziękuję za pomoc.
Pozdrawiam
Leszek |
|
 | ID posta:
432947
|
|
|
 |
|
|
Tadek
Excel Expert

Wersja: Win Office 2010
Pomógł: 2222 razy Posty: 6121
|
Wysłany: 24-01-2024, 09:00
|
|
|
Rozszerz zakres kolumn w tym fragmencie kodu:
Kod: | If Not Intersect(Target(1), Sh.Columns("B:E")) Is Nothing Then |
|
|
 | ID posta:
432971
|
|
|
 |
|
|
partner2001
Exceloholic

Wersja: Win Office 365
Posty: 245
|
Wysłany: 24-01-2024, 12:12
|
|
|
Ale nie chodzi mi o dodanie kolumny tylko dodatkowo określone komórki.
Jeszcze jedno.
Zauwarzyłem, że kliknięcie komórki w zadanym zakresie kolumn - JEŻELI NR MECZU TO NIE LICZBA TYLKO LITERA np. "A" , "B", "C1", "C2", "P1", "P2" "Finał" itd nie uruchamia formularza. Czemu? Czyżby Nr meczu musi być liczbą? |
_________________ Dziękuję za pomoc.
Pozdrawiam
Leszek |
|
 | ID posta:
432973
|
|
|
 |
|
|
master_mix
Excel Expert


Wersja: Win Office 365
Pomógł: 1293 razy Posty: 2637
|
Wysłany: 24-01-2024, 14:27
|
|
|
usuń ten warunek:
Kod: | If IsNumeric(Sh.Range("B" & Target(1).Row).Value) Then |
wraz z kończącym blok
Bo zakładałem że numer meczu to numer |
_________________
Podejmę współpracę (pracę)
Programowanie C#, Android, iOS, VB.NET, VBA, ASP.NET Core, WPF, Xamarin, Power Platforms, XAML, MVC, LINQ, Entity Framework. Bazy danych SQL Server, Oracle, MySQL, Firebird
Wrocław i okolice …lub zdalnie. |
|
 | ID posta:
432978
|
|
|
 |
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Dodaj temat do Ulubionych Wersja do druku
|
|
Strona uĹźywa plikĂłw cookies.
Kliknij tutaj, Ĺźeby dowiedzieÄ siÄ jaki jest cel uĹźywania cookies oraz jak zmieniÄ ustawienia cookie w przeglďż˝darce.
KorzystajÄ
c ze strony uĹźytkownik wyraĹźa zgodÄ na uĹźywanie plikĂłw cookies, zgodnie z bieĹźÄ
cymi ustawieniami przeglÄ
darki.
SprawdĹş, w jaki sposĂłb przetwarzamy dane osobowe
|