Sviluppare funzionalita su Microsoft Office con VBA Domanda Si o No prima di macro

Login Registrati
Stai vedendo 11 articoli - dal 1 a 11 (di 11 totali)
  • Autore
    Articoli
  • #47919 Score: 0 | Risposta

    Ale.1989
    Partecipante

      Ciao ragazzi, ho creato questa piccola macro per rimuovere una produzione dal mio file, vorrei aggiungere una msg box che mi chieda, una volta premuto il pulsante a cui è associata, vuoi eliminare la produzione ? con i classici bottoni si o no in caso di si deve eseguire la macro altrimenti uscire senza fare niente.

      Grazie a chi mi aiuterà

      #47920 Score: 0 | Risposta

      gianfranco55
      Partecipante
        91 pts

        cio

        ti sei dimenticato la macro

        #47921 Score: 0 | Risposta

        Luca73
        Partecipante
          58 pts

          Ciao 

          Ecco alcune possibili soluzioni

          Dim Scelta as String
          [...]
          Scelta = MsgBox("YES = CancellaFile" & vbCrLf & "NO =Non Cancellare file" & vbCrLf & "Cancel= Terza Scelta", vbYesNoCancel + vbQuestion, "Scegli")
                      Select Case Scelta
                          Case vbYes
                              Qui inserisci la macro per cancellare il file
                          Case vbNo
                              Exit Sub
                          Case vbCancel
                               Qui inserisci la macro per la terza opzione   
                      End Select
          [...]
          End Sub

           

          Altra Opzione

          If MsgBox("Vuoi Cancellare?", vbCritical + vbYesNo + vbSystemModal) = vbNo Then Exit Sub
          poi qui metti la tua macro che cancella il file

          Altra Opzione

          If MsgBox("SEI SICURO DI PROCEDERE? IL FILE Vera cancellato", vbCritical + vbYesNo + vbSystemModal) = vbYEs Then 
          qui metti la macro che cancella il file
          Else Exit Sub

           

          #47925 Score: 0 | Risposta

          LucaSR
          Partecipante
            15 pts

            Ciao @luca73 hai ragione ci sono diversi modi di procedere, ma avrei delle domande da porti:

            - perché usare VbCritical? È una domanda quindi VbQuestion 

            - VbSystemModal mai usato, già di per se la MsgBox ti obbliga a rispondere prima di poter riusare il foglio o la userForm. Forse obbliga anche lo OS?

            Tra le 3 preferisco l'ultima ma senza quel Else alla fine, superfluo se dopo c'è End Sub

            #47930 Score: 0 | Risposta

            Ale.1989
            Partecipante

              Scusatemi ragazzi ecco la macro

              Sub CancellaProduzione()
              With Sheets("PROVA CARICHI")
                  Set rng = .Range("B35:BA35").Find(What:=.Range("B5").Value, LookIn:=xlValues, LookAt:=xlWhole)
                  rng.Offset(1, 0) = rng.Offset(1, 0) - .Range("H2")
              End With
              
              With Sheets("PROVA CARICHI")
                  Set rng = .Range("B35:BA35").Find(What:=.Range("B5").Value, LookIn:=xlValues, LookAt:=xlWhole)
                  rng.Offset(5, 0) = rng.Offset(5, 0) - .Range("N2")
              End With
              End Sub
              
              #47933 Score: 0 | Risposta

              LucaSR
              Partecipante
                15 pts

                Ciao sei sicuro che dentro B5 ci sia sempre un valore e che questo sia sempre valorizzato nel range di ricerca, perché manderebbe in errore l'esecuzione della macro stessa.

                #47934 Score: 0 | Risposta

                Ale.1989
                Partecipante

                  Si in pratica in b5 viene calcolato il numero della settimana corrispondente alla data richiesta dal cliente

                  #47936 Score: 0 | Risposta

                  Luca73
                  Partecipante
                    58 pts

                    Ciao @lucasr

                    i tre esempi li ho presi da tre file miei che ho semplificato per lo scopo...Concordo quindi che mettere un "else" con dopo solo un exit sub ha poco senso,

                    Il vbSystemModal si differenzia dallo standard vbApplicationModal fa rimanere il pop-up del messaggio visibile anche se cambi file.

                    Riguardo al VB critical o Vb Question, io decido sulla base della "gravità" della domanda, è solo una questione di estetica pertanto se voglio attirare di più l'attenzione metto un vbCritical ma non cambia nulla solo l'icona che il messaggio mostra.

                     

                     

                    #47939 Score: 0 | Risposta

                    Luca73
                    Partecipante
                      58 pts

                      Ale.1989 ha scritto:

                      Scusatemi ragazzi ecco la macro

                      Ciao, prima di postare una soluzione, perche fai due ricerche con gli stessi parametri?

                      Una possibile soluzione:

                      Sub CancellaProduzione()
                      Dim rng As Range
                      
                      If MsgBox("Vuoi sostituire i dati?", vbQuestion + vbYesNo, "SCEGLI SE CANCELLARE LA PRODUZIONE") = vbYes Then
                          With Sheets("PROVA CARICHI")
                              Set rng = .Range("B35:BA35").Find(What:=.Range("B5").Value, LookIn:=xlValues, LookAt:=xlWhole)
                              rng.Offset(1, 0) = rng.Offset(1, 0) - .Range("H2")
                              rng.Offset(5, 0) = rng.Offset(5, 0) - .Range("N2")
                          End With
                      End If
                      End Sub
                      
                      #47948 Score: 0 | Risposta

                      Ale.1989
                      Partecipante

                        Funziona alla grande, per caso è possibile anche eseguire questa parte di macro sottraendo i valori invece di sommarli ? Adesso riesco a lavorare aggiungendo sempre produzione, ma in caso di annullamento dell'ordine vorrei che insieme alla parte di macro funzionante eseguisse anche questo...

                        Dim rng As Range, r As Range
                        Dim j As Integer
                        
                        Worksheets("Ordine Rame").Select
                        Range("L2").FormulaR1C1 = "=RC[1]+RC[2]"
                        Range("L2").AutoFill Destination:=Range("L2:L29"), Type:=xlFillDefault
                        Range("K2:K29").Value = Range("L2:L29").Value
                        Range("M2:M29").Value = Range("L2:L29").Value
                                
                        Set r = Range("B35:BA35").Find(What:=Range("E11").Value, LookIn:=xlValues, LookAt:=xlWhole)
                        If Not r Is Nothing Then
                            For j = 1 To Range("AM2").End(xlDown).Row - 1
                                Cells(r.Row + j, r.Column) = Cells(r.Row + j, r.Column) + Range("AM" & j + 1)
                            Next j
                        End If
                        #47950 Score: 0 | Risposta

                        Ale.1989
                        Partecipante

                          Ho risolto così

                          Sub CancellaProduzione()
                          Dim rng As Range
                          
                          If MsgBox("Vuoi Cancellare La Produzione ?", vbQuestion + vbYesNo, "CANCELLARE LA PRODUZIONE") = vbYes Then
                              With Sheets("PROVA CARICHI")
                                  Set rng = .Range("B35:BA35").Find(What:=.Range("B5").Value, LookIn:=xlValues, LookAt:=xlWhole)
                                  rng.Offset(1, 0) = rng.Offset(1, 0) - .Range("H2")
                                  rng.Offset(5, 0) = rng.Offset(5, 0) - .Range("N2")
                              End With
                          End If
                          
                          
                          Worksheets("Ordine Rame").Select
                          Range("L2").FormulaR1C1 = "=RC[1]+RC[2]"
                          Range("L2").AutoFill Destination:=Range("L2:L29"), Type:=xlFillDefault
                          Range("K2:K29").Value = Range("L2:L29").Value
                          Range("M2:M29").Value = Range("L2:L29").Value
                                  
                          Set r = Range("B35:AZ35").Find(What:=Range("E11").Value, LookIn:=xlValues, LookAt:=xlWhole)
                          If Not r Is Nothing Then
                              For j = 1 To Range("AM2").End(xlDown).Row - 1
                                  Cells(r.Row + j, r.Column) = Cells(r.Row + j, r.Column) - Range("AM" & j + 1)
                              Next j
                          End If
                          Worksheets("MASCHERA RICERCA").Select
                          End Sub
                          
                        Login Registrati
                        Stai vedendo 11 articoli - dal 1 a 11 (di 11 totali)
                        Rispondi a: Domanda Si o No prima di macro
                        Gli allegati sono permessi solo ad utenti REGISTRATI
                        Le tue informazioni: