Avvio macro in Excel

  • Avvio macro di Valentina
    Ciao a tutti!
    non riesco a scrivere il codice giusto per questa situazione. ho in a1 una formula che rilascia come risultato o una stringa (variabile) o valore vuoto(“ “).
    vorrei far partire in automatico una macro (macro1) ogni volta che a1 rilascia una stringa. qualcuno può aiutarmi? complimenti per il sito! - valentina

    di Roberto
    Ciao valentina
    prova questa routine

    private sub worksheet_change(byval target as range)
    foglio1.select
    if range("a1").value <> "" then
    call macro1
    end if
    end sub

    di Apoben64
    Ciao valentina e benvenuta nel forum !
    in aggiunta la post di roberto , guarda se ti può essere utile il post "avviare una macro selezionando una cella " di jimmy.
    facci sapere!

    Per roberto & apoben64 di Valentina


    grazie per risposte superveloci.
    la routine di roberto è tale per cui la cella a1, per il solo fatto di contenere una formula, viene “vista” come non vuota anche quando rilascia un valore vuoto. ciò causa l’avvio della macro in ogni caso. fate la prova ponendo in a1 una formula del tipo:
    =se(d1=1;”pippo”;” “) e vedrete che macro1 parte già all’inserimento della formula, indipendentemente dal valore di d1.
    c’è un’altra cosa che non riesco a capire. se macro1 consiste, ad es., nel far apparire la scritta “prova” in f1, per quale motivo una volta che è stata eseguita, sia pure nel modo appena detto, viene preclusa la possibilità di cancellare la scritta “prova” da f1 ?

    di Big ronnie
    Ciao valentina, sicuramente non ti elimina la scritta prova, perchè in d1 hai il valore 1 e quindi soddisfi la macro worksheets_change che si genera ogni volta che cambia qualcosa nel foglio.inserendo in d1 qualcosa di diverso da 1 funziona tutto correttamente

    Per big ronnie di Valentina
    Il fatto è che la macro parte comunque, come dicevo, inserendo o meno l' 1 in d1.
    il fatto di non poter cancellare la scritta una volta avviata la macro è una nota a margine che però mi lascia perplessa.

    Ancora per big ronnie di Valentina


    sono ancora qui a fare prove. vedi, se in a1 non ci fosse la formula che ho detto, tutto funzionerebbe correttamente come dici tu: inserendo in a1 un numero o una lettera qualsiasi si avvia la macro e dopo avrei anche la possibilità di cancellare la scritta provocata dalla macro.
    purtroppo, però, la cosa non è così semplice perchè in realtà in a1 ho una formula, del tipo descritto nel post precedente. bene, l’inserimente di tale formula in a1, è già sufficiente, a quanto pare, per rendere la cella a1 “non vuota”, e di conseguenza far partire la macro. nelle mie intenzioni la macro dovrebbe avviarsi soltanto quando la formula in a1 rilascia come risultato una stringa qualsiasi; quando, al contrario, rilascia valore vuoto, la macro non dovrebbe avviarsi.
    spero di aver chiarito i termini del problema. grazie in ogni caso. - valentina

    di Apoben64
    Ciao valentina, personalmete ritengo che il tuo quesito sia semplice, la strada indicata da big ronnie è quella giusta ma un esempio sarebbe determinante.
    se vuoi puoi contattarmi utilizzando la sezione contatti.
    in questo modo avrai il mio indirizzo email e mandarmi una copia del file che stai utilizzando.
    un saluto luca.

    Per apoben64 di Valentina
    Ciao luca!

    l’esempio è presto fatto:

    1. in a1 c’è la seguente formula: =se(d1=1;”pippo”;” “)
    in tal modo, ogni volta che scrivo 1 in d1, compare la stringa “pippo” in a1. qualunque altra cosa scriva in d1, compare valore vuoto in a1. naturalmente sto semplificando, perchè, in realtà, a determinati valori di d1 corrispondono determinate stringhe (tutte diverse) in a1, mentre ad altri determinati valori in d1 corrisponde valore vuoto in a1.
    2. la macro 1 fa sì che in f1 venga posta la scritta “prova” (questa è una macro qualsiasi).
    3. la macro1 deve:
    • avviarsi se in a1 compare una stringa qualunque;
    • non avviarsi se in a1 c’è valore vuoto.

    attualmente ho problemi con la posta elettronica ma mi riprometto, qualora questo esempio non sia sufficientemente chiarificatore, di contattarti in futuro.
    ho già verificato le indicazioni di big ronnie (ed approfitto per ringraziarlo) ma nel mio caso funzionano perfettamente solo se in a1 non c’è alcuna formula. grazie di cuore a tutti!
    -- valentina

    di Jimmy
    Ciao valentina!
    in effetti, per il solo fatto di contenere una formula, a1 non è mai una cella vuota e quindi la macro si avvia comunque. a mio avviso, la strada da seguire potrebbe essere la seguente.
    innanzitutto memorizzare all'interno di una variabile il risultato rilasciato dalla formula in a1. successivamente, utilizzando specifiche funzioni vba, controllare se il valore memorizzato nella variabile è una stringa. in caso affermativo (true), dare istruzioni affinchè venga avviata la macro.
    spero che il suggerimento ti sia di qualche utilità.

    di Big ronnie
    Ciao valentina, copia questo codice nell'editor vba di worksheets("foglio1") ed inserisci la formula =se(d1=1;"pippo";"") in worksheets("foglio1") cella a1.a me funziona perfettamente.
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("a1") <> "" Then Macro1
    End Sub
    Sub Macro1()
    Worksheets(1).Range("f1") = "prova"
    End Sub
    

    di Jummy
    Ciao big ronnie!
    non so se valentina ha provato il tuo codice, ma io l'ho fatto ed il risultato è che appena lo eseguo parte la macro1 e scrive correttamente "prova" in f1 anche se nulla è stato digitato d1. questo significa che il codice interpreta la formula in a1 come un oggetto che la rende non vuota. in tale situazione, facendo persistere la condizione per generare macro1 impedisce, tra l'altro, di cancellare la scritta "prova". il caso comincia ad interessarmi.

    Errore di battitura di Jimmy
    Chiedo scusa per un errore di battitura. ripeto il messaggio.

    ciao big ronnie!
    non so se valentina ha provato il tuo codice, ma io l'ho fatto ed il risultato è che appena lo eseguo parte la macro1 e scrive correttamente "prova" in f1 anche se nulla è stato digitato d1. questo significa che il codice interpreta la formula in a1 come un oggetto che la rende non vuota. tale situazione, facendo persistere la condizione per generare macro1 impedisce, tra l'altro, di cancellare la scritta "prova". il caso comincia ad interessarmi.

    di Big ronnie
    Ciao jimmy,credo che quella che tu esegui è la macro1 che non è altro che un comando di scrivere la parola prova in f1.il fatto che non ti da la possibilità di cancellarla sarà forse xchè hai inserito macro1 nella macro worksheet_change? per jimmy e valentina.provate ad inserire la macro worksheets_change in foglio1(editor), macro1 in un modulo di codice,la formula in a1(del foglio1) e non eseguite nessun codice ma lavorate solo su d1(del foglio1) inserendo il num.1 e togliendolo ed il gioco e fatto.

    Ringraziamento a big ronnie di Valentina
    Ciao ronnie!
    ho seguito con scrupolo i tuoi suggerimenti e...funziona!!! un grazie di cuore credo anche a nome di jimmy.