[VB]Szukanie w InputBox

Witam,

Znalazłem w sieci taki kod:

Private Sub Command1_Click()

Dim target_name As String

Dim r As Integer


    target_name = InputBox("PODAJ NAZWĘ", "NAZWA", "")

    If Len(target_name) = 1 Then Exit Sub


    target_name = LCase$(target_name)

    For r = 1 To MSHFlexGrid1.Rows - 1

        If LCase$(MSHFlexGrid1.TextMatrix(r, 7)) = target_name Then


            MSHFlexGrid1.Row = r

            MSHFlexGrid1.RowSel = r

            MSHFlexGrid1.Col = 0

            MSHFlexGrid1.ColSel = MSHFlexGrid1.Cols - 1


            MSHFlexGrid1.TopRow = r

            Exit Sub

        End If

    Next r


    Beep

    End Sub

kod działa poprawnie ale znajduje tylko pierwszy wpis spełniający warunek z InputBoxa, chciałbym aby za jego pomocą w kolumnie 7 znalazło mi resztę danych spełniających warunek. W jaki sposób zmienić kod, czy ma ktoś jakieś pomysły??

grzeniux , zapoznaj się, proszę, z tym tematem, a następnie - korzystając z przycisku zmien.gif

Pozdrawiam,

Dimatheus

To tylko przez kolorowanie albo utworzenie nowej tabeli z wybranych elementów.

Private Sub Command1_Click()

Dim target_name As String

Dim r As Integer

    target_name = InputBox("PODAJ NAZWĘ", "NAZWA", "")

    If Len(target_name) <= 1 Then Exit Sub

    target_name = LCase$(target_name)

    MSHFlexGrid1.Col = 2

    For r = 1 To MSHFlexGrid1.Rows - 1

    i = InStr(LCase(MSHFlexGrid1.TextMatrix(r, 7)), target_name)

    If i Then

    MSHFlexGrid1.Row = r

    MSHFlexGrid1.CellBackColor = RGB(250, 128, 128)

    MSHFlexGrid1.RowExpanded = True

    End If

    Next r

End Sub

i dodatkowy klawisz dla odznaczania

Private Sub Command2_Click()

MSHFlexGrid1.Col = 7

For r = 1 To MSHFlexGrid1.Rows - 1

MSHFlexGrid1.Row = r

If MSHFlexGrid1.CellBackColor = RGB(250, 128, 128) Then

MSHFlexGrid1.CellBackColor = RGB(255, 255, 255)

MSHFlexGrid1.RowExpanded = False

End If

Next r

End Sub

i raczej nie używał bym okienka inputbox bo jest modalne czyli nie można nic więcej robić przed jego zamknięciem. Wolał bym użyć okienka tekstowego. W moim przykładzie użyłem jeszcze instrukcji:instr(przeszukiwany tekst, wyszukiwany tekst) aby nie trzeba było wpisywać całego tekstu do wyszukiwania, a tylko jego część. Instrukcja MSHFlexGrid1.RowExpanded = True to rozwijanie pasma jeśli istnieje. Drugi sposób przeglądania: Po pierwszym naciśnięciu klawisza command3 zaznaczony jest pierwszy wiersz z szukanym elementem. Po ponownym naciśnięciu klawisza command3 zaznaczany jest następny wiersz w którym występuje ten element itd. Aby metoda była skuteczna zmienna licznik musi być globalna i zadeklarowana. Wchodzimy do General i wpisujemy: Dim licznik As Long

Private Sub Command3_Click()

target_name = Text1.Text

    If Len(target_name) <= 1 Then Exit Sub

For r = licznik To MSHFlexGrid1.Rows - 1

licznik = licznik + 1

 i = InStr(LCase(MSHFlexGrid1.TextMatrix(r, 7)), target_name)

    If i Then

                  MSHFlexGrid1.Row = r

            MSHFlexGrid1.RowSel = r

            MSHFlexGrid1.Col = 0

            MSHFlexGrid1.ColSel = MSHFlexGrid1.Cols - 1


            MSHFlexGrid1.TopRow = r

            Exit Sub

        End If

        Next r

        If licznik > MSHFlexGrid1.Rows - 1 Then licznik = 0

End Sub

Jesteś genialny :slight_smile: wszystko chodzi jak należy :slight_smile: a jeszcze pytanie w którym miejscu należy zmodyfikować kod aby mshflexgrid zazmaczał mi w kolorze co drugi wiersz.

Dim wiersz As Long

Dim kol As Long

With Me.MSHFlexGrid1

  For wiersz = 1 To 1 ' .Rows - 1

    For kol = 0 To .Cols - 1

        .Row = wiersz

        .Col = kol

        .CellBackColor = vbYellow

        '.CellForeColor = vbGreen

        .CellFontBold = True

    Next

  Next

End With
Dim wiersz As Long

Dim kol As Long

With Me.MSHFlexGrid1

  For wiersz = 1 To .Rows - 1

If Int(wiersz / 2) = wiersz / 2 Then

    For kol = 1 To .Cols - 1

        .Row = wiersz

        .Col = kol

        .CellBackColor = vbYellow

        .CellForeColor = vbGreen

        .CellFontBold = True

    Next

End If

  Next

  End With

“Compile error”,

“for without next”

coś nie tak jest z kodem.

A powiedz mi jeśli możesz, jeśli w mshflexgrid mam wyświetlane więcej niż jedna tabela?? Mam na myśli wyświetlanie relacji tabel, w jaki sposób powinienem się odnosić do drugiej i trzeciej tabeli które są wyświetlane??

(Kod poprawione i sprawdzony.)

To trochę bardziej skomplikowana sprawa bo trzeba się odwoływać do bazy danych poprzez interfejs DataEnvironment.

Dla trzech tabel w bazie danych Access i wyszukaniu elementu z tabeli3 bierzemy przyporządkowane mu id3 a następnie należy wyszukać według tego id3 w tabeli drugiej przyporządkowane mu id2 i kolejno w tabeli pierwszej znajdujemy id1 przyporządkowane id2 z tabeli drugiej. mając ide1 z tabeli pierwszej wyszukujemy wiersz według tego id1 w tabeli MSHFlexGrid1 i rozwijamy go.

Źle sformułowałem pytanie, chodziło mi bardziej dodatkowe elementy takie jak wyżej mi podawałes wyszukiwanie, kolorowanie ewentualnie usuwanie całego wiersza. Jak w kodzie powinienem się odwołać do tabeli drugiej i trzeciej?

Też nie bardzo rozumiem o co ci chodzi i o jakich tabelach piszesz. Najprostsza odpowiedź: tak jak do tabeli pierwszej tylko inna nazwa tej tabeli.

Mshflexgrid wyświetla mi 3 tabele(tabele z accessa) w których utworzone są relacje, jak powinienem sformułować kod żeby w mshflexgrid kolorowało(wyszukiwało oraz usuwało) mi również drugą i trzecią tabele tak jak robi to z pierwszą tabelą którą wyświetla msflexgrid ?

Tak na zdrowy rozum. Skąd mam wiedzieć jak sformułować kod w drugiej i trzeciej tabeli żeby było tak jak w pierwszej tabeli jeżeli żadnej z tych tabel nie widziałem na oczy.

Tu jeszcze parę przykładów i dochodź sam jak zrobić u siebie:bazy

i to wszystko w czym mogłem ci pomóc.

Oki, i tak wielkie dzięki bardzo dużo mi pomogłes.

Pozdrawiam

Minęło trochę czasu i ciekawe jak sobie dałeś radę z tą swoją bazą i prezentacją w tabeli MSHFlexGrid przy wykorzystaniu DataEnvironment. Po przebadaniu tychże doszedłem do wniosku, że przy bardziej zaawansowanych projektach lepsze rezultaty można uzyskać wykorzystując możliwości samej bazy Access.

Spróbowałem też poćwiczyć i przetestować niektóre możliwości jakie daje DataEnvironment, a o to rezultaty:

bazy

Gdybyś chciał niektóre elementy wykorzystać, a były by problemy to pytaj bo jeśli się nie ma dokładnego opisu wszystkich funkcji programu to trudno do tego dojść samodzielnie, nawet jeśli się ma jakiś tam wzorcowy przykład.

Hej,

Trochę odpoczywałem od VB i przez pewien czas nie zaglądałem tutaj, jeśli chodzi o bazę udało mi się zrobić to co potrzebowałem.

Chyba znowu zacznę się tym troszkę bawić podoba mi się to chociaż nie jest to proste i łatwe, przy pisaniu bazy miałem sporo siedzenia i główkowania :slight_smile: Jeśli mogę spytać gdzie nauczyłeś się tego wszystkiego ??? Co ewentualnie byś mi polecał w zdobyciu wiedzy odnośnie VB?

Jeśli chodzi o plik załączony wygląda to całkiem ciekawie :slight_smile: w razie czego na pewno będę pytał :slight_smile: