Funzione "TROVA" di Excel in VBA

Anonimo
2015-11-25T07:48:36+00:00

Ho creato una userform in VBA con caratteristiche simili alla funzione "trova" (il classico ctrl+t) di Excel.

Quindi ho una userform con un textbox, una listbox e un pulsante che avvia la ricerca.

Il problema è che inserendo delle lettere nel textbox, dopo aver avviato la ricerca, mi dà dei risultati solo se trova corrispondenze all'inizio delle celle (credo sia perché uso il metodo "left").

Vorrei che la listbox mi dia come risultato tutte le corrispondenze del range scelto (maiuscole o minuscole che siano) e nell'eventualità non ci siano corrispondenze mi appaia un msgbox proprio come la funzione "trova --> trova tutti".

Forse potrei usare il metodo "split" avendo come delimiter lo spazio tra le varie parole ma non riesco ad adattarlo al codice.

Un saluto a tutta la community.

Il codice che ho inserito è questo:

Private Sub CommandButton1_Click()

     Dim v As Variant

     Dim lng As Long

     Dim lCont As Long

     lCont = 0

     With Me.ListBox1

         v = .List

         .RowSource = ""

         For lng = 0 To UBound(v)

             If Left(v(lng, 0), Len(TextBox1)) = Me.TextBox1.Text Then

                 .AddItem

                 ListBox1.List(lCont, 0) = v(lng, 0)

                 lCont = lCont + 1

             End If

         Next

     End With

 End Sub

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

2 risposte

Ordina per: Più utili
  1. Anonimo
    2015-11-25T08:51:54+00:00

    Vedi la funzione InStr() nella guida del vb di Excel (o del caro vecchio VB6).

    Posto anche un semplice esempio:

    Public Sub m()

        Dim s As String

        s = "Pippo pluto Paperino Qui quo qua"

        MsgBox InStr(s, "Pluto")

        MsgBox InStr(UCase(s), UCase("Pluto"))

    End Sub

    La perima MsgBox restituisce 0 (False) in quanto non esiste Pluto nella stringa.

    La seconda restituisce la posizione di Pluto in quanto trasformo stringa e testo cercato tutto in maiuscolo.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2015-12-03T11:32:50+00:00

    Trovato risposta che cercavo a questo link

    http://www.maurogsc.eu/esempiforum14/esempiforum14.aspx

    posto anche il codice:

    Option Explicit

    Private sh As Worksheet

    Private Sub UserForm_Initialize()

        Set sh = ThisWorkbook.Worksheets("Foglio1")

        Call mCaricaListBox("Initialize")

    End Sub

    Private Sub mCaricaListBox(ByVal s As String)

        Dim lRiga As Long

        Dim lng As Long

        With sh

            lRiga = .Range("A" & .Rows.Count).End(xlUp).Row

        End With

        With Me.ListBox1

            If s = "Initialize" Then

                For lng = 1 To lRiga

                    .AddItem (sh.Range("A" & lng).Value)

                Next

            ElseIf s = "CommandButton" Then

                .Clear

                For lng = 1 To lRiga

                    If InStr(sh.Range("A" & lng).Value, Me.TextBox1.Text) Then

                        .AddItem sh.Range("A" & lng).Value

                    End If

                Next

            End If

        End With

    End Sub

    Private Sub CommandButton1_Click()

        Call mCaricaListBox("CommandButton")

    End Sub

    Private Sub UserForm_Terminate()

        Set sh = Nothing

    End Sub

    grazie!

    La risposta è stata utile?

    0 commenti Nessun commento