napisał: Qbapl postów: 5
umieszczony: 15 października 2007 15:25
|
|
| Dzięki. Działa. Co prawda musiałem usunąć apostrofy ale już wszystko jest ok. Swoją drogą to jednak według mnie przy zwykłym FORrze ma się większą kontrolę na kodem niestety problem z szybkością |
|
|
napisał: jottad postów: 118
umieszczony: 15 października 2007 14:48
|
|
Spróbuj tak:
Private Sub cboxMaterialNumber_Change()
Dim Numer As Variant
Numer = Me.cboxMaterialNumber.Value
If IsNumeric(Numer) Then Numer = CDbl(Numer)
Szukaj Numer
End Sub |
|
|
napisał: Qbapl postów: 5
umieszczony: 15 października 2007 14:04
|
|
Witam, dzięki za pomoc niestety nadal nie działa u mnie tak jak powinno. Mam 2 procedury:
1. Pierwsza pobiera z polo combo wartość, która będzie wyszukiwana:
Private Sub cboxMaterialNumber_Change()
Dim Numer As Variant
Numer = (Me.cboxMaterialNumber.Value)
Szukaj (Numer)
End Sub
2. Wyszukuje w arkuszu w kolumnie A wiersz w którym występuje wartość pobrana z formatki
Sub Szukaj(Szukana As Variant)
Dim Wiersz As Variant
Wiersz = Application.Match(Szukana, Range("A1:A5000"), 0)
If IsError(Wiersz) Then MsgBox "0": Exit Sub
MsgBox (Wiersz)
End Sub
Przykładowe wyszukiwane wartości to:
70071401817
41380003578 A
DC999800170
DC999800220
41380003065
41380003107
Niestety funkcja nadal znajduje tylko te wartości,które jakieś "litery" lub w których występuje apostrof na początku |
|
|
napisał: jottad postów: 118
umieszczony: 15 października 2007 08:11
edytowany: 15 października 2007 08:46
|
|
Zastosuj typ Variant:
Sub Szukaj(Szukana As Variant)
Dim Wiersz As Variant
Wiersz = Application.Match(Szukana, Range("A1:A5000"), 0)
If IsError(Wiersz) Then MsgBox "0":Exit Sub
MsgBox (Wiersz)
End Sub
(nieco uprościłem i zmieniłem na Sub, bo i tak nie jest zwracana żadna wartość) |
|
|
napisał: Qbapl postów: 5
umieszczony: 14 października 2007 22:43
|
|
| Wielkie dzięki Trebor. Makro działa. Zauważyłem, że funkcja MATCH jest bardzo "czuła" na punkcie zgodności formatów szukanej wartość i przeszukiwanego zakresu. Mam jeszcze pytanko w jaki sposób zrobić to makro bardziej uniwersalne pod względem formatów, mam do przeszukiwania zakres gdzie wartości mają różne postacie np. 7800990900 i DC90992919. Jak przypisze zmiennej Szukana String to muszę we wszystkich komórkach w arkuszu wpisać apostrof (zmiana formatu na tekstowy nie pomaga niestety) bo inaczej nie znajdzie wartości. |
|
|
napisał: Trebor postów: 1209
umieszczony: 13 października 2007 21:27
|
|
Musisz zabezpieczyć funkcję na wypadek nieznalezienia np.
Function Szukaj(Szukana As Double)
Dim Wiersz As Double
On Error Resume Next
Wiersz = WorksheetFunction.Match(Szukana, Range("A1:A5000"), 1)
On Error GoTo 0
MsgBox (Wiersz)
End Function
Pozdrawiam |
|
|
napisał: Qbapl postów: 5
umieszczony: 13 października 2007 20:58
|
|
Witam,
oczywiście, samo function bez sub. Literówki powstały przy pisaniu posta (było trochę późno w nocy).
Przy próbie użycia tej funkcji otrzymuje komunikat:
Run-time error '1004':
Pobranie właściwości Match klasy WorksheetFunction nie jest możliwe
Jeszcze raz proszę o pomoc |
|
|
napisał: Trebor postów: 1209
umieszczony: 13 października 2007 08:13
|
|
| Cytat: Sub Function Szukaj(Szukana as Double)
Dim Wiersz as double
Wiersz = WorksheetFunction.Match(Szakana, Range("A1:A5000"), 1)
MsgBox (Wiersz)
End Sub
1. Sub czy function - podejmij męską decyzję
2. Szukana czy Szakana - jak wyżej
Pozdrawiam |
|
|
napisał: Qbapl postów: 5
umieszczony: 13 października 2007 00:04
|
|
Witam,
makra jakie tworzę w VBA (jestem początkujący w tej) służą głównie do wyciągania odpowiednich danych z różnych arkuszy. Bardzo często stosuje funkcję, która musi znaleźć w kolumnie odpowiednią wartość i podać dokładną pozycję dla tej wartości w arkuszu (nr wiersza). Do tej pory stosowałem w tym celu zwykłą pętlę FOR, metoda może mało elegancka ale jak dla mnie była wystarczając i do tej pory skuteczna. Jednak przy dużej ilość danych pojawia się problem zbyt długiego czasu oczekiwania na wynik. W celu poprawienia wydajności postanowiłem użyć metody MATCH (przeczytałem o niej na tym forum). Stworzyłem funkcję, która niestety nie działa (już w momencie kompilacji wywala błąd)
Sub Function Szukaj(Szukana as Double)
Dim Wiersz as double
Wiersz = WorksheetFunction.Match(Szakana, Range("A1:A5000"), 1)
MsgBox (Wiersz)
End Sub
Pewnie robie jaki prosty i banalny błąd ale helpie nie za wiele znalazłem na temat tej metody.
Proszę o pomoc w tym temacie
ps. Nie upieram się, że do wyszukiwania danej wartości w kolumnie muszę używać methody MATCH może to być jakiś inny sposób, który będzie wydajniejszy od FORa |
|
|
 wstecz 1 dalej  wszystkich stron: 1
|