Vedo che l' estetica e' curata, il contenuto ancora da inventare... Io invece in genere faccio l' opposto, ed evito di creare dei fogli elettronici che hanno l' aspetto di un modulo cartaceo, separando cioe' nettamente la parte di input ed elaborazione dalla parte presentazione; altrimenti l' utente si chiedera' dov'e' la matita e la carta copiativa.
1) quando clicco il pulsante "Home" della parte "RITIRO" il file deve copiare i dati del cliente dall'intestazione in alto (1,2,3,4,5) e incollarli nelle celle della descrizione del ritiro;
al contempo, se il cliente aveva già inserito i suoi dati nella parte "CONSEGNA", deve cancellare dalla parte "CONSEGNA" (in pratica non può avere ritiro e consegna nella stessa azienda, quindi come riferimento basta che veda se il nome della ditta è uguale in rit e cons).
Questa parte la puoi ottenere con una macro autoregistrata; non sara' ottimizzata ma funzionera'.
Associerai poi la macro alla tua icona
Stessa cosa ma al contrario per il tasto Home della Consegna
Non capisco in dettaglio le cose da fare, ma immagino che anche qui bastera' una macro autoregistrata.
Se possibile cliccando il pulsante Home una prima volta dovrebbe copiarli, ripremendolo cancellarli.
Immagino che la richiesta coinvolga le due macro di prima, che supponiamo si chiamino Macro1 e Macro2.
Anche qui procedi con due macro autoregistrate, in cui inserisci le istruzioni per cancellare le celle che ti interessa. Supponiamo che si chiamino Macro3 e Macro4.
Adesso vai in testa a Macro1 e inserisci queste istruzioni:
- Codice: Seleziona tutto
Sub Macro1()
'LE PROSSIME RIGHE SONO DA AGGIUNGERE:
If Range("E45").value <> "" then '<<< Vedi Testo
Call Macro3
Exit Sub
End If
'FINE DELLE RIGHE AGGIUNTE
'etc etc
Che la cella da controllare sia E45 e' la mia migliore interpretazione di quanto scritto nel tuo messaggio, non escludo che sia errata; correggi come da situazione reale.
Analoga modifica la farai in testa a Macro2
2) il pulsante "Mail" se cliccato dovrebbe allegare il modello a una mail e compilare in automatico il campo A, l'oggetto, e inserire un testo (es. Oggetto: richiesta ritiro; Testo: richiesta ritiro del cliente xxxx, per 11 plt da Treviso a Milano -prendendo i dati dal file-)
Prendiamo una delle tane Sub InvioEmail che sono state pubblicate, ad esempio
viewtopic.php?f=26&t=83835&start=20#p479791e la adattiamo al tuo caso, ottenendo:
- Codice: Seleziona tutto
Sub Invioemail()
Dim OutApp As Object
Dim OutMail As Object
Dim EmailAddr As String
Dim Subj As String
Dim BodyText As String
' (a)
Set OutApp = CreateObject("Outlook.Application")
'compilazione di un testo standard di accompagnamento
BDT = "Richiesta ritiro del cliente " & Range("CellaColNomeDelCliente") '<<<
BDT = BDT & vbCrLf & Range("CellaConAltreInfo") '<<<
BDT = BDT & vbCrLf & "Cordiali saluti" & vbCrLf '<<<
BDT = BDT & "Pippo" '<<<
'' (b)
''Nominat = Sheets("Scheda").Range("C5").Value
ActiveWorkbook.Save
OutFile = ActiveWorkbook.FullName
EmailAddr = ""
Subj = "Richiesta ritiro"
'
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = EmailAddr
.CC = ""
.BCC = ""
.Subject = Subj
.Attachments.Add OutFile
.Body = BDT
.Display 'or use .send
'.send
End With
' (c)
Set OutMail = Nothing
'
' (d)
Set OutApp = Nothing
'' Application.Wait (Now + TimeValue("0:00:04"))
'' Application.SendKeys "%a"
'' Application.Wait (Now + TimeValue("0:00:04"))
'
''Rename Image files
''Name "C:\ESITI\" & Nominat & "_ScrSh.jpg" As "C:\ESITITX\ " & Nominat & "_ScrSh.jpg"
End Sub
Da associare all'icona
Le righe marcate <<< vanno personalizzate con i tuoi dati.
Le righe che cominciano con due apostrofi erano presenti nella macro di esempio ma possono essere eliminate in questa versione.
3)Se provo a stampare o salvare il foglio, deve uscirmi un avviso se non ho compilato le celle importanti (decido io quali)
Di questa avevo anche trovato una macro esistente nel forum che non trovo più, se sapete dov'è inviatemi il link senza riscrivere il codice!
Inserisci nel modulo "ThisWorkbook" del vba una Sub Workbook_BeforePrint e una Sub Workbook_BeforeSave che contengano queste istruzioni:
- Codice: Seleziona tutto
If Application.WorksheetFunction.CountA(Range("A1, B2, C3")) < 3 Then
MsgBox ("Compilare prima le celle A1-B2-C3; operazione abortita")
Cancel = True
End If
Invece di "A1, B2, C3" userai le celle che vanno compilate, e invece del <3 il numero di celle.
Non conosco i dettagli di compatibilita'/incompatibilita' tra i vari calendari, quindi mi astengo.
Ciao