Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 75464 Skopiuj do schowka Formularz uzupełniający bazę o brakujące dane
Autor Wiadomość
partner2001 
Exceloholic


Wersja: Win Office 365
Posty: 217
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 42 raz(y) 111.26 KB

_________________
Dziękuję za pomoc.
Pozdrawiam
Leszek
ID posta: 432852 Skopiuj do schowka
 
 
Tadek 
Excel Expert


Wersja: Win Office 2010
Pomógł: 2210 razy
Posty: 6103
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 31 raz(y) 121.49 KB

ID posta: 432869 Skopiuj do schowka
 
 
partner2001 
Exceloholic


Wersja: Win Office 365
Posty: 217
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 Skopiuj do schowka
 
 
master_mix 
Excel Expert



Wersja: Win Office 365
Pomógł: 1292 razy
Posty: 2625
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 36 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 Skopiuj do schowka
 
 
partner2001 
Exceloholic


Wersja: Win Office 365
Posty: 217
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 Skopiuj do schowka
 
 
master_mix 
Excel Expert



Wersja: Win Office 365
Pomógł: 1292 razy
Posty: 2625
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 Skopiuj do schowka
 
 
partner2001 
Exceloholic


Wersja: Win Office 365
Posty: 217
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 Skopiuj do schowka
 
 
master_mix 
Excel Expert



Wersja: Win Office 365
Pomógł: 1292 razy
Posty: 2625
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 :mrgreen:
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 40 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 Skopiuj do schowka
 
 
partner2001 
Exceloholic


Wersja: Win Office 365
Posty: 217
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 Skopiuj do schowka
 
 
partner2001 
Exceloholic


Wersja: Win Office 365
Posty: 217
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 Skopiuj do schowka
 
 
master_mix 
Excel Expert



Wersja: Win Office 365
Pomógł: 1292 razy
Posty: 2625
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 Skopiuj do schowka
 
 
partner2001 
Exceloholic


Wersja: Win Office 365
Posty: 217
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 26 raz(y) 133.11 KB

_________________
Dziękuję za pomoc.
Pozdrawiam
Leszek
ID posta: 432947 Skopiuj do schowka
 
 
Tadek 
Excel Expert


Wersja: Win Office 2010
Pomógł: 2210 razy
Posty: 6103
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 Skopiuj do schowka
 
 
partner2001 
Exceloholic


Wersja: Win Office 365
Posty: 217
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 Skopiuj do schowka
 
 
master_mix 
Excel Expert



Wersja: Win Office 365
Pomógł: 1292 razy
Posty: 2625
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
Kod:
End If

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 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
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

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.wip.pl

Archiwum

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