vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest wtorek, 14 maja 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Wyszukiwanie textu w komórce " zaczyna się od"


otwartyotwarty rozpoczął: Blaszka_P postów: 7



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


Sortuj posty: z