Office, Excel, VB, Nome non univoco

Anonimo
2018-05-02T19:04:15+00:00

Buonasera a Voi tutti,

                                  Il mio problema: vorrei replicare il codice qui sotto esposto anche per le scale B, C, D, per poter visualizzare un MsgBox

                                   per ogni scala, ma il VB se incollo lo stesso codice mi dice nome non univoco e in effetti è così, cosa mi consigliate di fare

                                   per ovviare a questo mio errore? . Un grazie anticipato, e anche un quasi buonanotte

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rng As Range

    If Target.Rows.Count <> 1 Then Exit Sub

    Set rng = Me.Range("C10:C92")

    If Not Intersect(Target, rng) Is Nothing Then

        If Target.Text = "Spese Scala A" Then

            MsgBox "Prestare Attenzione"

        End If

    End If

Set rng = Nothing

End Sub

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

12 risposte

Ordina per: Più utili
  1. Anonimo
    2018-05-04T11:37:33+00:00

    Ciao Casanmaner,

    Nonostante che il codice pubblicato da Sergio abbia compreso l'istruzione 

            If Target.Rows.Count <> 1 Then Exit Sub

    non mi pareva che fosse consigliabile qui.

    Più particolarmente, nel mio codice, ho voluto gestire la possibilità che 

    più di un valore potesse essere copiato o inserito simultaneamente nella colonna di interesse. Utilizzando il comando di Sergio, l'immissione simultanea dell'espressione  Spese Scala A (ad esempio) in due o più celle sarebbe ignorata. Pertanto, non essendo a conoscenza delle modalità di immissione dei dati previste da Sergio, ho preferito peccare di eccesso di prudenza! :-)

    Sebbene tu sia ovviamente pienamente consapevole di tali complessità, mi pare possibile che Sergio non lo sia!

    Quindi, col mio codice, qualora un blocco di celle fosse incollato in colonna C, si potrebbe vedere un avviso del genere:

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2018-05-04T05:58:50+00:00

    Forse vuoi la possibilità di inserire un messaggio differnte per ogni tipo di spesa?

    Eventualmente prova a vedere se il codice che segue, corretto anche in base al consiglio di Norman, esegue quanto è nelle tue intenzioni:

    Private Sub Worksheet_Change(ByVal Target As Range)

        Dim rng As Range

        If Target.Rows.Count <> 1 Then Exit Sub

        Set rng = Intersect(Target, Me.Range("C10:C92"))

        If Not rng Is Nothing Then

          Select Case rng.Value

             Case "Spese Scala A"

                MsgBox "Prestare attenzione per le spese scala A"

             Case "Spese Scala B"

                MsgBox "Prestare attenzione per le spese scala B"

             Case "Spese Scala C"

                MsgBox "Prestare attenzione per le spese scala C"

             Case "Spese Scala D"

                MsgBox "Prestare attenzione per le spese scala D"

             Case "Addebiti Individuali"

                MsgBox "Prestare attenzione per gli addebiti individuali"

          End Select

        End If

        Set rng = Nothing

    End Sub

    Nota che aggiungendo Case successivi potresti aggiungere situazioni ulteriori.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2018-05-03T22:51:02+00:00

    Ciao Sergio,

    Ho provato il Vostro codice e funziona bene, ma visualizza la stesso MsgBox

    per tutte le scale mentre vorrei che si potesse visualizzarne uno diverso per scala

    OK!

    o un altro dato inserito ( per esempio Addebiti Individuali ).

    Ho letto bene il tuo codice, ma per me è già troppo complicato e non riesco a capirlo

    Non sono sicuro di aver capito! Se tu volessi che l'utente fosse avertito qualora qualsiasi dei testi Spese Scala A, Spese Scala B, Spese Scala C, Spese Scala D o Addebiti Individuali fosse inserito nell intervallo C1:C92, potresti prova il seguente adattamento del mio codice:

    '=========>>

    Option Explicit

    '--------->>

    Private Sub Worksheet_Change(ByVal Target As Range)

        Dim rng As Range, rCell As Range

        Dim arrTesto As Variant

        Dim Res As Variant

        Dim arrMsg() As Variant

        Dim iCtr As Long

        Const sTesto As String = _

              "Spese Scala A," _

              & "Spese Scala B," _

              & "Spese Scala C," _

              & "Spese Scala D," _

              & "Addebiti Individuali"

        arrTesto = Split(sTesto, ",")

        Set rng = Intersect(Me.Range("C10:C92"), Target)

        If Not rng Is Nothing Then

            For Each rCell In rng.Cells

                With rCell

                    Res = Application.Match(.Value, arrTesto, 0)

                    If Not IsError(Res) Then

                        iCtr = iCtr + 1

                        ReDim Preserve arrMsg(1 To iCtr)

                        arrMsg(iCtr) = .Address(False, False) & ": " _

                                       & arrTesto(Res - 1)

                    End If

                End With

            Next rCell

            If Not rng Is Nothing Then

                Application.CutCopyMode = False

                Call MsgBox( _

                     Prompt:="Prestare Attenzione:" _

                             & vbNewLine _

                             & Join(arrMsg, vbNewLine), _

                     Buttons:=vbInformation, _

                     Title:="REPORT")

            End If

        End If

    End Sub

    '<<=========

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2018-05-03T15:25:44+00:00

    Buonasera Norman,

    Ho provato il Vostro codice e funziona bene, ma visualizza la stesso MsgBox

    per tutte le scale mentre vorrei che si potesse visualizzarne uno diverso per scala o un altro dato inserito ( per esempio Addebiti Individuali ).

    Ho letto bene il tuo codice, ma per me è già troppo complicato e non riesco a capirlo, ringrazio tutti a Vi saluto.

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2018-05-03T08:59:38+00:00

    Un Ciao a tutti Voi, ma Voi dormite alla notte? visto la rapidità delle vostre risposte, grazie.

    Ho letto le vostre risposte e penso do aver fatto un errore nell'esposizione del mio problema; la mia intenzione è di visualizzare MsgBox differenti per ogni scala, o un altro dato ( per esempio Addebiti Individuali ) in modo di dare un aiuto per esempio come una nota ma in automatico. si può fare?

    Adesso però provo le vostre soluzioni e poi mi rifaccio vivo. Saluti

    La risposta è stata utile?

    0 commenti Nessun commento