Creare due



  • Creare due
    di Francesco (utente non iscritto) data: 02/08/2014 19:33:43

    Ciao a tutti. Ho da poco iniziato ad usare VBA per Excel con un programma che prevede una quantità incredibile di cicli IF. Poiché una delle cose più utili per evitare tutti questi cilci, se ho capito bene, parrebbe essere la programmazione ad oggetti, di cui, però, non so assoluitamente nulla, mi domandavo se qualcuno potrebbe svilupparmi un semplice programmino per capire come si fa:
    immaginaiamo che se nela cella A1 digito il numero "1", la macro restituisce nella cella A4 la somma di dei valori in A2 e A3, mentre se in A1 digito "2" allora in A4 ci metto il prodotto di A2*A3, e infine se in A1 digito "3" in A4 restituisce il quoziente A2/A3.

    Grazie a tutti!!

    P.S. Una macro così scema, con le mie conoscenze, la farei così (giusto per capire come sto messo):
     
    Sub Prova()
    Dim Selezione, A, B As Integer
    Dim Risultato As Double
    Selezione = Cells(1, 1)
    A = Cells(2, 1)
    B = Cells(3, 1)
    If Selezione = 1 Then
        Risultato = A + B
        Cells(4, 1) = Risultato
    Else
        If Selezione = 2 Then
            Risultato = A * B
            Cells(4, 1) = Risultato
        Else
            If Selezione = 3 Then
                Risultato = A / B
                Cells(4, 1) = Risultato
            Else
                Cells(4, 1) = "Nessuna selezione valida"
            End If
        End If
    End If
    End Sub
    



  • di pisolo (utente non iscritto) data: 02/08/2014 20:06:21

    Poui provare con:
     
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect(Target, Range("A1")) Is Nothing Then
            Select Case Range("A1").Value
                Case 1
                    Cells(4, 1) = Cells(2, 1) + Cells(3, 1)
                Case 2
                    Cells(4, 1) = Cells(2, 1) * Cells(3, 1)
                Case 3
                    Cells(4, 1) = Cells(2, 1) / Cells(3, 1)
                Case Else
                    Cells(4, 1) = "Nessuna selezione valida"
            End Select
        End If
    End Sub
    



  • di Francesco (utente non iscritto) data: 03/08/2014 01:26:22

    Ok, me la studio e cerco di capire cosa gli stai facendo fare. Grazie, per adesso.



  • di lepat (utente non iscritto) data: 03/08/2014 09:31:24

    Comunque in questo caso la "programmazione ad oggetti" non ti può aiutare, o usi gli IF o Select Case



  • di pisolo (utente non iscritto) data: 03/08/2014 11:54:35

    vedi se l'allegato può esserti utile.

    Excel 2003



  • di Vecchio Frac data: 06/08/2014 09:08:51

    Una versione alternativa ^_^
    Peccato che Switch valuti tutte le espressioni... se una è in errore, fallisce l'intera procedura.
    Ma è una cosa carina da provare.
     
    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Range
    
        If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
        Application.EnableEvents = False
            
        Set r = Range("a2:a3")
        On Error GoTo gest_err
        With Application
            r(3) = Switch(r(0) = 1, .Sum(r), _
                                 r(0) = 2, .Product(r), _
                                 r(0) = 3, r(1) / r(2), _
                                 r(0) >= 0, "Nessuna selezione valida")
        End With
        
        Application.EnableEvents = True
        Exit Sub
        
    gest_err:
        If Err.Number = 11 Then
            r(3) = "Divisione per zero non ammessa"
        Else
            r(3) = "#Errore"
        End If
        Application.EnableEvents = True
    End Sub