+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Do while con Instr per condizione di testo parziale

  1. #1
    maui.maui non è in linea Novello
    Post
    39

    Do while con Instr per condizione di testo parziale

    salve
    in genere i cicli si fanno con do while A < 30 loop

    Io dovrei farlo confrontando una parte di testo in cella che potrebbe essere "Aiut", "Aiutino", "Aiuto", "dammi un Aiuto presto", "un Aiuto non si nega a nessuno" etc stringa che se non trovata, fa un offset della cella verso l'alto, sino a trovarla

    Visto che la cella non scala mai, e quando non remmato non pone nemmeno il msgbox Dove sbaglio?

    codice:
    Do While (InStr(Range("B:B")(ActiveCell.Row).Value, "Auit")) > 0
                        ' MsgBox "happy"
                        ActiveCell.Offset(-1, 0).Select
                        Loop
    Come si interrompono i loop evitando di stroncare il processo a volte i vari esc break non fnzionano

    Grazie

  2. #2
    Ferrari_and non è in linea Scolaretto
    Post
    236
    Per cambiare cella attiva se non ricordo male il comando era activate il select la seleziona.

    Mentre per le uscite anticipare dai cicli in vb6 esisteva EXIT DO ma va gestito da codice ed in ogni caso si deve agire sulla condizione di ricerca se hai un loop infinito non hai considerato bene la condizione di uscita o i vari casi es. sei arrivato alla prima cella senza trovare il valore cercato.

  3. #3
    Sgrubak non è in linea Scolaretto
    Luogo
    Torrazza Piemonte
    Post
    388
    Un loop infinito è mal strutturato... Ti serve sempre una "via di uscita" di emergenza.
    A questo proposito prova a impostare un ciclo For con la variabile che parte dall'ultima riga e decresce fino alla riga che ti interessa.
    In oltre lo spostamento della selezione è inutile. Passa la variabile che decresce al metodo Offset direttamente (ovviamente con le dovute correzioni) al posto del tuo -1, prendi il Value e lo passi alla funzione InStr e quando la trovi predisponi un bell Exit For per uscire dal ciclo prima che termini di scorrere fino alla prima riga (se è quello che ti serve).

  4. #4
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,772
    Blogs
    5
    Stiamo parlando di VBA per Excel non di VB6 ... sposto nella sezione corretta.

    P.S. E comunque hai scritto "Auit" e non "Aiut"
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  5. #5
    maui.maui non è in linea Novello
    Post
    39
    Grazie a tutti per le risposte in effetti il ciclo for mette al riparo da loops infiniti ed andrebbe implementato.
    Grazie per aver spostato il thread nella sezione apposita
    e dell'aiutino

  6. #6
    L'avatar di Zer0Kelvin
    Zer0Kelvin non è in linea Scolaretto
    Luogo
    Teramo - provincia
    Post
    298
    in genere i cicli si fanno con do while A < 30 loop
    Chi lo dice?
    I cicli si fanno col do, in genere, quando non si conosce a priori il n° di iterazioni.
    Select non è un buon modo di puntare ad una cella, meglio usare Cells(riga, colonna), indicizzando uno dei due parametri, a seconda dei casi; oppure Range( "B" & riga), come nel tuo caso.
    Come suggerisce Sgrubak è meglio utilizzare For Next impostando la condizione di uscita con Exit For.
    __________________________
    [Excel 2010]
    -Condividere la conoscenza aumenta la ricchezza di tutti. (Z0°K)
    -Dai ad un uomo un e pesce lo avrai sfamato per un giorno; insegnagli a pescare e lo avrai sfamato per sempre. (Confucio)
    -Il sonno della ragione genera mostri. (Francisco Goya)
    -Il sapere non si propaga spontaneamente, l'ignoranza lo fa. (Z0°K)

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi