2015-07-08 5 views
5

Ho cercato di risolvere questo problema per alcuni giorni e non riesco a capirlo. Ho cercato più siti Web (anche qui più volte), ho visto che molte persone hanno fatto questa domanda ma le soluzioni non funzionano per me.VBA trova l'ultima occorrenza di una stringa

Voglio trovare l'ultima occorrenza di una stringa in un intervallo e memorizzare l'indirizzo in una variabile e visualizzare un messaggio che mi indica dove si trova.

Finora ho questo

Private Sub CmdBtnClockIt_Click() 
    Dim job As String 
    Dim searchTerm as Range 

    job = CmbBoxJob.Value 
    searchTerm = Range("A1:A999").find(what:=job, searchorder:=xlByColumns, searchdirection:=xlPrevious).Column 
    MsgBox "last cell is " & searchTerm.Address 
End Sub 

Tutti mi sembra di ottenere è uno "qualificatore non valido" o "oggetto variabile o con la variabile di blocco non impostata"

Ogni aiuto è apprezzato

+5

searchTerm è una gamma e deve essere impostato e non solo assegnato. 'Set searchTerm = ..... etc ....' – NickSlash

+2

Come menzionato @NickSlash, è necessario utilizzare Set per restituire un intervallo. Inoltre, si sta utilizzando la proprietà .Column alla fine, che restituirebbe il numero di colonna anziché un intervallo. Devi lasciare la colonna. – Jane

+0

Perché hai una ricercaRispondi a una colonna? Sai già che sarà "1" (che è la colonna A). Basta rimuovere quella parte del codice (il .column). Quindi metti "Set" prima di "searchTerm - Range (..." e sarai pronto per partire – BruceWayne

risposta

5

Il primo problema è che searchTerm è definito come un oggetto Range. È necessario impostare le assegnazioni di oggetto utilizzando lo Set keyword. Così l'assegnazione diventa Set searchTerm = Range("A1:A999")...

In secondo luogo, vi ha colpito messaggi di errore se il searchTerm non viene trovato, perché searchTerm sarà assegnato un valore di Nothing. Possiamo evitare questo problema utilizzando una semplice condizione per verificare se è stato trovato il job.

Quindi la vostra aggiornato Sub potrebbe essere simile a questa:

Private Sub CmdBtnClockIt_Click() 
    Dim job As String 
    Dim searchTerm As Range 

    job = CmbBoxJob.Value 
    Set searchTerm = Range("A1:A999").Find(what:=job, searchorder:=xlByColumns, searchdirection:=xlPrevious) 
    If searchTerm Is Nothing Then 
    MsgBox "Text was not found" 
    Else 
    MsgBox "Last cell is " & searchTerm.Address 
    End If 
End Sub 
+0

Questo ha aiutato un po ', continua a tornare "Il testo non è stato trovato" Quindi searchTerm non viene impostato – AshWood

+0

@AshWood: prova un breakpoint o "job MsgBox" dopo la riga 'job = CmbBoxJob.Value'. Il valore è quello che ti aspetti? O 'CmbBoxJob.Value' non ha il termine di ricerca, o il valore non è mai stato trovato nell'intervallo specificato. – grovesNL

+0

Grazie, ho risolto il problema! La tua risposta mi ha aiutato molto – AshWood

1

Che ne dite:

Sub dural() 
    Dim job As String 
    Dim searchTerm As Range 
    job = "Happiness" 
    Set searchTerm = Range("A1:A999").Find(what:=job, after:=Range("A1"), searchorder:=xlByColumns, searchdirection:=xlPrevious) 
    MsgBox "last cell is " & searchTerm.Address 
End Sub 

enter image description here

Avviso Ho utilizzato Set.

+0

Questo mi dà anche un errore di "variabile oggetto o variabile di blocco non impostata" – AshWood

+0

Per il mio codice e dati questo significa che non c'è * Felicità * nella colonna ** A ** –

+0

Grazie, la tua risposta mi ha aiutato a orientarmi nella giusta direzione – AshWood