ID tematu: 70555
 |
User form - ulepszenia |
Autor |
Wiadomość |
janosiknh
Starszy Forumowicz

Wersja: Win Office 2010
Posty: 27
|
Wysłany: 31-03-2021, 08:47 User form - ulepszenia
|
|
|
Dzień dobry,
Na potrzeby usprawnienia sobie pracy stworzyłem z pomocą forumowiczów i yt stworzyłem sobie mały userform (plik w załączniku).
Póki co na moje potrzeby wystarcza, ale chciałbym go ciągle ulepszać aby automatyzować swoją pracę.
Zaznaczę od razu, że jestem bardzo początkującym użytkownikiem.
Aktualnie założenie jest takie, że tworzę zlecenie i mogę aktualizować dane założonych, mogę też wyszukiwać zlecenia i je edytować.
Dodatkowo makro, które napisał jeden z użytkowników forum pozwala mi "zaplanować transport" i archiwizować zlecenia, które już wyjechały.
Chciałbym usunąć pola txtbox klient, opiekun, konstruktor i zastąpić je comboboxami.
Jeżeli chodzi o opcję do wyboru w listach klient i opiekun będzie ich niewiele (maksymalnie 6) i będę w stanie sam to zrobić , to już w przypadku listy klientów jest ich co najmniej 400, i potrzebny by był tutaj combobox z podpowiedziami (na zasadzie: zaczynam wpisywać nazwę klienta i lista coraz bardziej się zawęża).
Przeszukałem forum i chyba znalazłem rozwiązanie (http://www.excelforum.pl/topics3/autouzupelnienie-listy-na-formatkach-vt2962.htm?highlight=zaw%EA%BFana) ale nie potrafię przerobić sposobu użytkownika Trebor tak aby działał w moim userform.
Nazwa klienta powinna być wyszukiwana w kolumnie A w arkuszu Dane.
Drugim usprawnieniem, które chciałbym wprowadzić to komunikat, ostrzegający o tym, że dostawa od któregokolwiek z dostawców jest później niż data planowanej wysyłki.
Daty dostaw znajdują się w kolumnach W-AD.
Datę transportu aktualnie planuję poprzez filtrowanie kolumny AI.
Data transportu jest uzależniona od rodzaju zlecenia jakie mamy wykonać.
Wydaje mi się, że najprostszym aktualnie rozwiązaniem byłoby to, że jeżeli data wysyłki w kolumnie AI jest wcześniejsza, niż którakolwiek z dat dostawy materiału w kolumnach W-AD tego samego wiersza, to excel wypełni cały wiersz na czerwono.
Przyszłościowo będzie to pewnie komunikat MsgBox, wyskakujący podczas Planowania transportu, ale póki co to o wiele za wysokie progi jak dla mnie.
arkusz testowy_1_2021_03_31.xlsm
|
Pobierz Plik ściągnięto 7 raz(y) 250.16 KB |
|
|
 | ID posta:
403002
|
|
|
 |
|
|
|
Tadek
Excel Expert

Wersja: Win Office 2007
Pomógł: 1985 razy Posty: 5662
|
Wysłany: 31-03-2021, 09:01
|
|
|
Cytat: | Chciałbym usunąć pola txtbox klient, opiekun, konstruktor i zastąpić je comboboxami.
Jeżeli chodzi o opcję do wyboru w listach klient i opiekun będzie ich niewiele (maksymalnie 6) i będę w stanie sam to zrobić , to już w przypadku listy klientów jest ich co najmniej 400
| W załączonym pliku brak tych danych.
Wstaw po kilkanaście przykładowych tych danych: klient, opiekun, konstruktor |
|
 | ID posta:
403003
|
|
|
 |
|
|
janosiknh
Starszy Forumowicz

Wersja: Win Office 2010
Posty: 27
|
Wysłany: 31-03-2021, 09:12
|
|
|
Jeżeli chodzi o opcję do wyboru w przypadku pola :
konstruktor - będzie to: Maciek, Daniel, Wojtek, Kamil, Piotr,
opiekun - będzie to : Marcin, Grzegorz, Miłosz, Kazimierz
Klient - tutaj lista będzie miała około 300 pozycji, i będą to nazwy firmy np:
SAS EFFIBAT
Faber GMBH
PZU Sp. z o.o itd itd |
|
 | ID posta:
403004
|
|
|
 |
|
|
apollo
ExcelSpec

Pomógł: 1317 razy Posty: 4544
|
Wysłany: 31-03-2021, 12:36 Re: User form - ulepszenia
|
|
|
janosiknh napisał/a: |
Chciałbym usunąć pola txtbox klient, opiekun, konstruktor i zastąpić je comboboxami.
Nazwa klienta powinna być wyszukiwana w kolumnie A w arkuszu Dane.
|
Połóż na Form ComboBox i zmień nazwę na cbKlient -> w module frmForm pod linią Option Explicit dodaj kod
Kod: |
Private klienci()
Private Sub UserForm_Initialize()
Dim lastRow As Long
' ładowanie Klientów.
With ThisWorkbook.Worksheets("Dane")
lastRow = .Cells(Rows.count, "A").End(xlUp).Row
If lastRow > 1 Then
If lastRow = 2 Then
ReDim klienci(1 To 1, 1 To 1)
klienci(1, 1) = .Range("A2").Value
Else
klienci = .Range("A2:A" & lastRow).Value
End If
cbKlient.MatchEntry = fmMatchEntryNone
cbKlient.List = klienci
End If
End With
' Ładowanie Opiekun, Konstruktor -> sam zrobisz bo nikt nie wie skąd ładować. Na przyszłość podaj dane w arkuszach.
End Sub
Private Sub cbKlient_Change()
Dim r As Long, count As Long, klient As String, lista()
If Len(cbKlient.Tag) Or cbKlient.ListIndex > -1 Then Exit Sub
cbKlient.Tag = "x"
If IsEmpty(cbKlient.Value) Then
cbKlient.List = klienci
cbKlient.ListIndex = -1
Else
klient = cbKlient.Value
cbKlient.Clear
For r = 1 To UBound(klienci)
If InStr(1, klienci(r, 1), klient, vbTextCompare) = 1 Then
count = count + 1
ReDim Preserve lista(1 To 1, 1 To count)
lista(1, count) = klienci(r, 1)
End If
Next r
If count Then
cbKlient.Column = lista
' cbKlient.DropDown
End If
End If
cbKlient.Tag = Empty
End Sub
|
Cytat: |
Wydaje mi się, że najprostszym aktualnie rozwiązaniem byłoby to, że jeżeli data wysyłki w kolumnie AI jest wcześniejsza, niż którakolwiek z dat dostawy materiału w kolumnach W-AD tego samego wiersza, to excel wypełni cały wiersz na czerwono.
|
Chyba chodzi o AJ a nie o AI.
Wybierz dane w kolumnie AJ, np. AJ3:AJ100 -> Conditioal Formating -> new Rule -> "Use a formula ..." -> formuła
-> Format -> Fill -> wybierz kolor czerwony -> OK -> OK -OK
[/quote] |
|
 | ID posta:
403010
|
|
|
 |
|
|
janosiknh
Starszy Forumowicz

Wersja: Win Office 2010
Posty: 27
|
Wysłany: 31-03-2021, 13:16 Re: User form - ulepszenia
|
|
|
Dziękuję za pomoc.
wkleiłem to jak pisałeś, po uruchomieniu nazwy klientów znajdują się na liście, ale przy próbie wpisania czegokolwiek wyskakuję błąd:
Compile error:
Variable not defined
excel podkreśla na żółto linię: Private Sub cbKlient_Change() |
|
 | ID posta:
403012
|
|
|
 |
|
|
umiejead
Excel Expert

Wersja: Win Office 2013
Pomógł: 797 razy Posty: 4311
|
Wysłany: 31-03-2021, 13:42
|
|
|
Info mało precyzyjne. Deweloper > Visual Basic > znajdź swój kod > uruchom (F5) > zobacz na jakiej linii stanął > skopiuj tą linię > wklej (albo SS).
. |
_________________ .
Jak poprawnie opisać problem: http://www.excelforum.pl/...ika-vt59262.htm
Chcesz precyzyjną odpowiedź - zadaj precyzyjne pytanie. |
|
 | ID posta:
403013
|
|
|
 |
|
|
janosiknh
Starszy Forumowicz

Wersja: Win Office 2010
Posty: 27
|
Wysłany: 31-03-2021, 13:46
|
|
|
Kod stanął na linii
cbKlient.List = klienci |
|
 | ID posta:
403014
|
|
|
 |
|
|
apollo
ExcelSpec

Pomógł: 1317 razy Posty: 4544
|
Wysłany: 31-03-2021, 13:56
|
|
|
janosiknh napisał/a: | Kod stanął na linii
cbKlient.List = klienci |
Załącz skoroszyt. Nie będę zgadywał. |
|
 | ID posta:
403015
|
|
|
 |
|
|
janosiknh
Starszy Forumowicz

Wersja: Win Office 2010
Posty: 27
|
Wysłany: 31-03-2021, 14:02
|
|
|
skoroszyt w załączniku
arkusz testowy_1_2021_03_31.xlsm
|
Pobierz Plik ściągnięto 6 raz(y) 257.88 KB |
|
|
 | ID posta:
403018
|
|
|
 |
|
|
apollo
ExcelSpec

Pomógł: 1317 razy Posty: 4544
|
Wysłany: 31-03-2021, 14:20
|
|
|
Napisałem:
Cytat: |
Połóż na Form ComboBox i zmień nazwę na cbKlient -> w module frmForm pod linią Option Explicit dodaj kod
Private klienci()
...
|
Gdzie masz Private klienci()???
------------
Wywal z module frmForm
Kod: |
Sub UruchomFrmForm()
frmForm.Show
End Sub
|
|
|
 | ID posta:
403020
|
|
|
 |
|
|
janosiknh
Starszy Forumowicz

Wersja: Win Office 2010
Posty: 27
|
Wysłany: 31-03-2021, 14:27
|
|
|
Masz rację.
W głównym pliku, w którym testowałem działanie na liście klientów, ta linijka wkleiła się poniżej Sub UruchomFrmForm().
Po przeniesieniu jej bezpośrednio pod Option Explicit wszystko działa jak należy.
Dziękuję bardzo za pomoc. |
|
 | ID posta:
403021
|
|
|
 |
|
|
|
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
|