› Sviluppare funzionalita su Microsoft Office con VBA › Domanda Si o No prima di macro
-
AutoreArticoli
-
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à
cio
ti sei dimenticato la macro
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 SubAltra Opzione
If MsgBox("Vuoi Cancellare?", vbCritical + vbYesNo + vbSystemModal) = vbNo Then Exit Sub poi qui metti la tua macro che cancella il fileAltra 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 SubCiao @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
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 SubCiao 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.
Si in pratica in b5 viene calcolato il numero della settimana corrispondente alla data richiesta dal cliente
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.
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 SubFunziona 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 IfHo 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 -
AutoreArticoli
