napisał: Blaszka_P postów: 112
umieszczony: 4 lipca 2011 20:56
edytowany: 8 lipca 2011 19:41
|
|
Witam
Troszkę poprawiłem i zmieniłem for na For Each
Działa poprawnie może troszkę szybciej
Sub szukaj_Click()
Dim i As Long, licznik As Long, tabl(1 To 15)
ListBox1.Column = tabl 'ilość kolumn zgodnie wymiarem tablicy
Dim ile As Integer
Dim wart1 As String
Dim NextRow As Long
Dim a As Long
ListBox1.Clear
With Sheets("spis")
.Range("AF1:AF10000").Value = ClearContents ' czyści komórki z numerami M
a = .Cells(1, 1).Value ' ilość przeszykiwanych wierszy w spisie
licznik = 0
i = 9 ' od którego wiersza ma zacząć sprawdzać arkusz
For Each wart In Range("G9:G" & a)
ile = Len(Numer) ' podaję ilość znaków wpisanych do Textbox
wart1 = Mid(wart, 1, ile) ' zwraca wartośc z komórki, czaczyna od 1 do ile
If UCase(wart1) = UCase(Numer) Then
NextRow = .Cells(Rows.count, 32).End(xlUp).Row + 1
.Cells(NextRow, 32).Value = Sheets("spis").Cells(i, 2)
ListBox1.AddItem
ListBox1.List(licznik, 0) = .Cells(i, 2)
ListBox1.List(licznik, 1) = .Cells(i, 3)
ListBox1.List(licznik, 2) = .Cells(i, 4)
ListBox1.List(licznik, 3) = .Cells(i, 5)
ListBox1.List(licznik, 4) = .Cells(i, 6)
ListBox1.List(licznik, 5) = .Cells(i, 7)
ListBox1.List(licznik, 6) = .Cells(i, 8)
ListBox1.List(licznik, 7) = .Cells(i, 9)
ListBox1.List(licznik, 8) = .Cells(i, 10)
ListBox1.List(licznik, 9) = .Cells(i, 11)
ListBox1.List(licznik, 10) = Format(.Cells(i, 12), "dd-mm-yyyy")
ListBox1.List(licznik, 11) = Format(.Cells(i, 13), "dd-mm-yyyy")
ListBox1.List(licznik, 12) = .Cells(i, 14)
ListBox1.List(licznik, 13) = .Cells(i, 15)
ListBox1.List(licznik, 14) = .Cells(i, 16)
licznik = licznik + 1 ' licznik znalezionych modułów
End If
i = i + 1
Next
End With
info2 = "Znaleziono - " & licznik & " szt. modułów"
End Sub |
|
napisał: Blaszka_P postów: 112
umieszczony: 3 lipca 2011 10:33
edytowany: 3 lipca 2011 10:51
|
|
Dziękuję za cenne wskazówki
Jeżeli chodzi o if VW_Nr And zaczyna Then to jest OptionButton i CheckBox tym wybieram opcję "zaczyna sie od" ,jeżeli "VW_Nr" orza "zaznacz" jest zaznzczony równocześnie ,to wtedy wyszukuje mi text w komórce zaczynający się od wpisanego textu w TextBox(Numer)
w innym wypadku, czyli jak jest zaznaczoby tylko "OptionButton VW_Nr" text podany w TextBox(Numer) np 1K0 971 818
Mój UserForm ma kilka opcji wyszukiwania ,ale tylko jeden TextBox(Numer)
do wpisywania szukanej wartości w arkuszu. Kod ,który wstawiłem na forum , to tylko mały wyćinek.
ile = Len(Numer) - podaję mi liczbę znaków wpisanych do TextBox (Numer) "1k0 971" (7 znaków)
wart = Sheets("spis").Cells(i, 7).Value - jest to text w komórce "1K0 971 818"
wart1 = Mid(wart, 1, ile) - podaje text od 1 do ile , czyli np. "1K0 971"
Jeżeli chodzi o If UCase(wart1) = UCase(Numer) Then są to raz wartości numeryczne i raz textowe
Jeżeli chodzi o deklarację zmiennych to zawsze zapominam, to samo tychy się .Cells(1, 1).Value
Za wszystkie cenne wskazówki dziękuję i postaram się je stosować w praktyce ,
tak jak już wspominałem jestem początkujący w programowaniu VBA
Pozdrawiam |
|
napisał: Trebor postów: 1209
umieszczony: 2 lipca 2011 20:49
|
|
W sekcji deklaracji umieściłeś ListBox1.Column = tabl. Dobrym obyczajem jest tego nie czynić. Nie jest to błąd, ale ..........., poza tym ta tablica jest pusta. Czemu to ma służyć?
Zamiast Sheets("spis").Range("AF1:AF10000").Value = "" raczej ClearContents będzie szybciej.
Tutaj If VW_Nr And zaczyna Then raczej nie zgadnę o co chodzi
Jeżeli już jest With Sheets("spis") to następna linia powinna być raczej a = .Cells(1, 1).Value
Brak deklaracji dla numer. Pewnie do miało być to samo co Mnumer. Do zmiennej numer nie jest nic przypisywane, więc po co to ile = Len(Numer).
Wart i Wart1 bez deklaracji
Jeśli Wart1 i Numer są wartościami numerycznymi to UCase(wart1) = UCase(Numer) nie ma żadnego sensu.
NextRow - brak deklaracji
Range("AF65536") - a co będzie gdy zmienisz excela i będziesz miał ponad milion wierszy?
Dopisywanie wartości do Listboxa wydaje się łatwe do przerobienia na pętlę, ale to tylko moje widzimisię.
Na samej górze modułu jako pierwsze wpisz: Option Explicit w ten sposób unikniesz problemów braku deklaracji. Będą one przez VBE wymuszane. Możesz to zrobić na stałe w Tools - Option zafajczyć Require Variable Declaration. Każdy nowy moduł z automatu będzie miał Option Explicit.
Hej |
|
napisał: Blaszka_P postów: 112
umieszczony: 2 lipca 2011 20:02
edytowany: 2 lipca 2011 20:08
|
|
Tak proszę , dla mnie to wszystko dopiero początki, wiem że robię dużo nie potrzebnych kroków ale dopiero zaczynam |
|
napisał: Trebor postów: 1209
umieszczony: 2 lipca 2011 19:27
|
|
Czy aby jesteś pewien, że chcesz abym się czepiał poprawności kodu?
Może lepiej pozostać przy obecnym jeśli działa?
Hej |
|
napisał: Blaszka_P postów: 112
umieszczony: 2 lipca 2011 18:45
edytowany: 2 lipca 2011 20:13
|
|
Zrobiłem coś takiego, działa jak zamierzałem, ale prosiłbym o sprawdzenie poprawności
Sub szukaj_Click()
Dim a As Long
Dim w(), v As Byte, i As Long, licznik As Long, tabl(1 To 15)
ListBox1.Column = tabl 'ilość kolumn zgodnie wymiarem tablicy
Dim ile As Integer
Dim Mnumer As Integer
ListBox1.Clear
Sheets("spis").Range("AF1:AF10000").Value = "" ' czyści komórki z numerami M
If VW_Nr And zaczyna Then
With Sheets("spis")
a = Sheets("spis").Cells(1, 1).Value ' pilść przeszykiwanych wierszy w spisie
licznik = 0
For i = 1 To a
ile = Len(Numer)
wart = Sheets("spis").Cells(i, 7).Value
wart1 = Mid(wart, 1, ile)
If UCase(wart1) = UCase(Numer) Then
' wpisuje do komórki kolejne numery M
NextRow = Sheets("spis").Range("AF65536").End(xlUp).Row + 1
Sheets("spis").Cells(NextRow, 32).Value = Sheets("spis").Cells(i, 2)
ListBox1.AddItem
ListBox1.List(licznik, 0) = .Cells(i, 2)
ListBox1.List(licznik, 1) = .Cells(i, 3)
ListBox1.List(licznik, 2) = .Cells(i, 4)
ListBox1.List(licznik, 3) = .Cells(i, 5)
ListBox1.List(licznik, 4) = .Cells(i, 6)
ListBox1.List(licznik, 5) = .Cells(i, 7)
ListBox1.List(licznik, 6) = .Cells(i, 8)
ListBox1.List(licznik, 7) = .Cells(i, 9)
ListBox1.List(licznik, 8) = .Cells(i, 10)
ListBox1.List(licznik, 9) = .Cells(i, 11)
ListBox1.List(licznik, 10) = Format(.Cells(i, 12), "dd-mm-yyyy")
ListBox1.List(licznik, 11) = Format(.Cells(i, 13), "dd-mm-yyyy")
ListBox1.List(licznik, 12) = .Cells(i, 14)
ListBox1.List(licznik, 13) = .Cells(i, 15)
ListBox1.List(licznik, 14) = .Cells(i, 16)
licznik = licznik + 1 ' licznik znalezionych modułów
End If
Next i
End With
info2 = "Znaleziono - " & licznik & " szt. modułów"
End If |
|
napisał: Blaszka_P postów: 112
umieszczony: 2 lipca 2011 15:34
edytowany: 2 lipca 2011 20:15
|
|
Witam
Mam mały problem z tym zagadnieniem , chodzi mi o to żeby makro wyszukiwało wartość podaną w ComboBox (Numer), wszystko działa poprawnie jeżeli Numer zgadza się z zawartością danej komórki, ale chciałbym zrobić opcję wyszukiwania textu "zaczyna się od.Czy jest możliwość umieszczenia tego jako dodatkową opcję "CheckBox1"- zaczyna się od
Mam coś takiego
Sub szukaj_Click()
Dim a As Long
Dim w(), v As Byte, i As Long, licznik As Long, tabl(1 To 15)
ListBox1.Column = tabl 'ilość kolumn zgodnie wymiarem tablicy
Dim Mnumer As Integer
ListBox1.Clear
Sheets("spis").Range("AF1:AF10000").Value = "" ' czyści komórki z numerami M
If VW_Nr Then
With Sheets("spis")
a = Sheets("spis").Cells(1, 1).Value ' ilość przeszykiwanych wierszy w spisie
licznik = 0
For i = 1 To a
UCase(Sheets("spis").Cells(i, 7).Value) = UCase(Numer)
' wpisuje do komórki kolejne numery M
NextRow = Sheets("spis").Range("AF65536").End(xlUp).Row + 1
Sheets("spis").Cells(NextRow, 32).Value = Sheets("spis").Cells(i, 2)
ListBox1.AddItem
ListBox1.List(licznik, 0) = .Cells(i, 2)
ListBox1.List(licznik, 1) = .Cells(i, 3)
ListBox1.List(licznik, 2) = .Cells(i, 4)
ListBox1.List(licznik, 3) = .Cells(i, 5)
ListBox1.List(licznik, 4) = .Cells(i, 6)
ListBox1.List(licznik, 5) = .Cells(i, 7)
ListBox1.List(licznik, 6) = .Cells(i, 8)
ListBox1.List(licznik, 7) = .Cells(i, 9)
ListBox1.List(licznik, 8) = .Cells(i, 10)
ListBox1.List(licznik, 9) = .Cells(i, 11)
ListBox1.List(licznik, 10) = Format(.Cells(i, 12), "dd-mm-yyyy")
ListBox1.List(licznik, 11) = Format(.Cells(i, 13), "dd-mm-yyyy")
ListBox1.List(licznik, 12) = .Cells(i, 14)
ListBox1.List(licznik, 13) = .Cells(i, 15)
ListBox1.List(licznik, 14) = .Cells(i, 16)
licznik = licznik + 1 ' licznik znalezionych modułów
End If
Next i
End With
info2 = "Znaleziono - " & licznik & " szt. modułów"
End If
Z góry dziękuję za pomoc
Pozdrawiam |
|
wstecz 1 dalej wszystkich stron: 1
|
|