if e then



  • if & then
    di mandoz (utente non iscritto) data: 23/09/2012 21:26:37

    ciao a tutti. Sono qui per chiedere il vs aiuto. Ho un piccolo problema con excell. Ipotizzando la cella A1 vuota, B1 C1 D1 ...piene. Questa è la richiesta: se A1 non è vuota le celle B1 C1 D1 devono diventare vuote. Ovviamente devo poter ripetere la formula sulle righe 2 3 4 ...
    GRAZIE



  • di HarryBosch data: 24/09/2012 01:22:36

    Ciao mandoz
    come assumono i valori le celle B1 C1 D1? derivano anch'essi da una formula?
    Perché allora potresti risolvere modificando la formula stessa; la formula in B1 =formula diventerebbe:
    =SE($A1="";formula;"")
    da trascinare a destra fino a D1 e poi in basso.

    -Oppure l'inserimento in B1 C1 D1 è "manuale" e vorresti impedirne la scrittura se la cella A1 è piena?
    -Oppure ancora, hai già una lunga serie di dati inseriti e vorresti velocemente cancellare il contenuto di B1 C1 D1 qualora A1 fosse piena?


  • if & then 2
    di mandoz (utente non iscritto) data: 24/09/2012 23:33:14

    ciao HarryBosch,
    grazie per il tuo aiuto. Chiarisco: i valori alfanumerici in B1 C1 D1 sono inseriti manualmente.
    Successivamente inserisco i valori in A1 e solo allora B1 C1 D1 devono divenire vuote.
    GRAZIE ancora.



  • di HarryBosch data: 24/09/2012 23:54:01

    bene, allora se i valori in A li inserisci successivamente bisogna creare una macro con l'evento:
    Worksheet_Change
    prova il codice sotto: lo devi inserire nel modulo del Foglio dove inserisci i valori nella colonna A
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Intersect(Target, Range("A:A")) Is Nothing Then
            Exit Sub
        Else
            If Target.Value <> "" Then
                Range(Cells(Target.Row, 2), Cells(Target.Row, 4)).ClearContents
            End If
        End If
    End Sub
    


  • if & then
    di mandoz (utente non iscritto) data: 25/09/2012 23:10:41

    ciao HarryBosch,

    macro con evento! Concetto troppo evoluto per me. Ho inserito il tuo codice ma inserendo
    valori in A1, B1 C1 D1 rimangono invariate. Dove posso aver sbagliato.



  • di xxx (utente non iscritto) data: 26/09/2012 00:51:46

    ciao

    intanto saluto harry,
    ti posto una modifica alla macro di harry, sempre da inserire nel foglio
    questa si comporta diversamente in quanto controlla tutte le celle in colonna da A1 a Dxxx
    ripristinando a nullo le celle se in a:a trova un valore o un dato

    ciao da xxx

     
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Intersect(Target, Range("A:D")) Is Nothing Then Exit Sub
    riga = Target.Row
            If Cells(riga, 1) <> "" Then
                Range(Cells(riga, 2), Cells(riga, 4)).ClearContents
            End If
    End Sub
    



  • di HarryBosch data: 26/09/2012 08:04:21

    Ciao ragazzi
    e grazie xxx: direi che la modifica apportata è ancora più funzionale a quanto chiedeva mandoz.

    @ mandoz:
    ho visto l'allegato: il codice comunque non funzionava perchè non devi inserirlo in un modulo normale, ma nel vba devi cliccare sul Foglio dove ti interessa che agisca il codice, nel tuo caso nel Foglio1(PLANNING_2).
    Ti riallego il file con il codice al posto giusto



  • di Vecchio Frac data: 26/09/2012 08:24:46

    Ciao a tutti!
    Per essere precisi non è una "macro con eventi" (le variabili dichiarate WithEvents a livello di modulo di classe sono un'altra cosa), ma una semplice gestione degli eventi che il Excel fornisce per gli oggetti come il foglio e la cartella di lavoro. Non dovrebbe essere un "concetto troppo evoluto" perchè non è inavvicinabile: è solo un modo di pensare a quel che si fa maualmente, in linguaggio VBA (e anzi, non parliamo più di "macro": il termine è un retaggio storico dei primi anni Novanta).
    Il codice andava bene anche in un modulo ma dichiarato Public, non Private, per questioni di visibilità della routine.
    Certo anch'io preferisco scrivere per ogni foglio il codice pertinente; se c'è codice comune a tutta l'area allora lo scrivo in un modulo pubblico.
    Quando intercettate l'evento Change o SelectionChange ricordate Application.EnableEvents = False (all'inizio, e True all'uscita della Sub) per evitare la ricorsione (che a un certo punto termina, ma si rallenta un po' l'esecuzione).

    Se la discussione è risolta, prego mandoz di marcarla in tal senso :)





  • di HarryBosch data: 26/09/2012 08:36:38

    @ Vecchi Frac
    infatti mi ero accorto tardi di aver detto una "baggianata"!!
    ma ormai avevo inviato....



  • di Vecchio Frac data: 26/09/2012 09:38:46

    @Vanni
    strettamente parlando non hai detto alcuna baggianata: nel contesto, quel codice scritto così in un modulo non funzionava :)
    In altri forum più tecnici si leggono cose ben peggiori. E beninteso, tutti le spariamo grosse ogni tanto, lo scopo del forum è la discussione, la condivisione e la crescita collettiva, non l'insegnamento a manna dal cielo =)




  • if & then
    di mandoz (utente non iscritto) data: 26/09/2012 23:01:42

    ciao a tutti,

    grazie per il celere e competente aiuto. permettetemi l'ultima domanda > conoscete un testo da consultare (anche online) per cominciare a smanettare con vba.... partendo da zero.

    grazie



  • di Vecchio Frac data: 27/09/2012 08:21:48

    Per cominciare dai un'occhiata alle risorse di questo Forum.
    Vai nella Home, dopo la sezione dello Storico discussioni, sopra il contatore Shiny Stat, ci sono le indicazoni che ti interessano, cliccasui link della frase: "Excel vba propone una completa infrastruttura documentale: Corso Base Excel VBA, Approfondimenti, Tutorial, Articoli e Downloads su Excel VBA".