Sviluppare funzionalita su Microsoft Office con VBA CommandButton per salvataggio valori celle su altro foglio Excel

Login Registrati
Stai vedendo 19 articoli - dal 26 a 44 (di 44 totali)
  • Autore
    Articoli
  • #20413 Score: 0 | Risposta

    vecchio frac
    Senior Moderator
      249 pts

      Dandelion1987 ha scritto:

      Domanda, se volessi che il valore numerico della cella C11 del foglio "Versamento" fosse tramutata in negativo con questa macro, cosa dovrei cambiare?

      Risposta, ma tu come faresti se dovessi farlo a mano?

      #20415 Score: 0 | Risposta

      Ci aggiungo il segno negativo in genere, ma il fatto è che ho una Textbox che mi copia il valore del numero in positivo e vorrei rimensse così.

      Invece quanto uso la macro vorrei che lo scrivesse in negativo, ovviamente verrebbe messo su un'altro foglio e cella 🙂

       

      Colgo l'occasione per chiederti un'altra cosa.

      Con il codice da te suggerito prima di inviare la mail ho creato un'altro pulsante solo per aprire i movimenti contabili.

      Option Explicit
      
      Sub Apriexcel()
      
      Dim tb As Workbook
      Dim wb As Workbook
      Dim sh As Worksheet
      
          Set tb = ThisWorkbook
          Set wb = Workbooks.Add
          
          tb.Worksheets("Prima nota cassa").Copy before:=wb.Worksheets(1)
          tb.Worksheets("Bancomat e assegni").Copy after:=wb.Worksheets("Prima nota cassa")
          
          Application.DisplayAlerts = False
          For Each sh In wb.Worksheets
              If sh.Name <> "Prima nota cassa" And sh.Name <> "Bancomat e assegni" Then
                  sh.Delete
              End If
          Next
          Application.DisplayAlerts = True
          
      End Sub

      Tuttavia quando si apre la schermata nuova di excel non mi permette di chiuderla, devo per forza chiudere manualmente l'userform attiva prima che mi blocca.

      L'unica maniera è disattivarla con UserForm1.Hide?

      Non c'è un modo diverso per impedire che la useform mi blocchi la chiusura di altri file excel?

      Grazie mille!

      #20416 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        249 pts

        Dandelion1987 ha scritto:

        quando uso la macro vorrei che lo scrivesse in negativo, ovviamente verrebbe messo su un'altro foglio e cella

        Temo che non so se ti sei capito solo tu 😀 però farei così, se lo scopo è "se volessi che il valore numerico della cella C11 del foglio "Versamento" fosse tramutata in negativo":

            s = "VERSAMENTO CASSA"
            With Worksheets("Versamento")
                For Each ce In .Range("A1")
                    If ce.Offset(, 1) <> "" Then
                        s = s & ce & ce.Offset(, 1) & ""
                    End If
                Next
                .Range("C11").Value = - .Range("C11").Value
            End With
            s = Left(s, Len(s) - 0)

        dove per l'appunto il valore di C11 viene trasformato nel suo negativo. Spero di aver capito giusto.

        Dandelion1987 ha scritto:

        Non c'è un modo diverso per impedire che la useform mi blocchi la chiusura di altri file excel?

        Sì, devi aprire l'userform in modalità vbModeless, in questo modo Excel sottostante è disponibile all'interazione dell'utente:

        UserForm1.Show vbModeless
        #20576 Score: 0 | Risposta

        Grazie mille! Funziona tutto.

        Ora per finire il file mi mancano due cose:

        1) ComboBox con sistema find..

        Nella userform ho tre pagine, l'ultima chiamata "Versamento"

        All'interno di questa pagina ho creato una combobox  chiamata "cboCerca2".

        Vorrei che nella combobox apparisse una lista relativa al foglio "Prima nota cassa" Colonna "E" solo dei valori che riportano al proprio interno le parole "VERSAMENTO CASSA", in modo che mi trovi solo i versamenti.

        Poi quando clicco sopra il versamento desiderato  vorrei che nelle textbox adiacenti venissero riporati i valori appartenenti alla riga interessata:

        - "TextBox138" deve riportare il valore della data presente nella colonna "A"

        - "TextBox137" l'importo che appare nella colonna "D".

        Nel codice avevo già creato una cosa simile con i numeri fattura, ma non riesco a farlo funzionare anche per quello che serve a me:

        Private Sub cboCerca_Click()
        txtNfattura = cboCerca
        Dim r As Range
        'cerca il valore scelto nella combobox all'interno della seconda colonna della tabella
        Set r = Worksheets("Fatture").Columns(2).Find(cboCerca)
        cboTipo = r.Offset(0, -1)
        txtNfattura = r.Offset(0, 0)
        TextBox8 = r.Offset(0, 1)
        TextBox8 = Format(TextBox8, "#,###0.#0 €")
        
        End Sub
        Dim h As Long
        For h = 2 To 11
            With Me.cboCerca
                .AddItem Sheets("Fatture").Range("b" & h)
            End With
        Next h
        
        ------------------
        
        Private Sub btnInserisci2_Click()
        Dim numriga As Long
        
        TextBox8 = Format(TextBox8, "#,###0.#0 €")
        
        numriga = 2
        Do Until Sheets("Fatture").Cells(numriga, 2) = ""
            If Sheets("Fatture").Cells(numriga, 2) = cboCerca.Text Then Exit Do
            numriga = numriga + 1
        Loop
        
        cboCerca.Clear
        For h = 2 To 11
            With Me.cboCerca
                .AddItem Sheets("Fatture").Range("b" & h)
            End With
        Next h
        
        End Sub

        Sapresti darmi una mano sul codice? 🙂

        2) Sottrazione valori versamento dal conta cassa

        Vorrei capire quale codice VBA mi permette di sottrarre in automatico alla pressione di un commandbutton i valori del foglio "versamento" delle celle B4:B10 con quelli del foglio "conta cassa" celle B4:B10.

        Ti ringrazio in anticipo, so che non mi sono spiegare benissimo in quanto ho un pò di confusione pure io probabilmente.

        In allegato il file aggiornato completo.

         

         

        Allegati:
        You must be logged in to view attached files.
        #20584 Score: 0 | Risposta

        vecchio frac
        Senior Moderator
          249 pts

          @Dandelion stasera non ci riesco. Ricordami questo thread nei prossimi giorni se vedi che non ti rispondo 🙂

          #20722 Score: 0 | Risposta

          Buongiorno Vecchio Frac 🙂

          ho bisogno del tuo aiuto per risolvere i problemi del file a cui sto lavorando.

           

          Grazie mille!

          #20753 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            249 pts

            Dandelion1987 ha scritto:

            Vorrei che nella combobox apparisse una lista relativa al foglio "Prima nota cassa" Colonna "E" solo dei valori che riportano al proprio interno le parole "VERSAMENTO CASSA", in modo che mi trovi solo i versamenti.

            Per questa richiesta secondo me basta un ciclo che analizzi la colonna E e ricavi le voci che interessano. Nell'evento Userform_Initialize,prima della fine, imposta questo codice:

            Userform_Initialize:
            ...
            TextBox105 = Format(TextBox105, "#,###0.#0 €")
            TextBox133 = Format(TextBox133, "#,###0.#0 €")
            
            
            'inizializza cbocerca2
            'nella combobox appare una lista relativa al foglio "Prima nota cassa" Colonna "E"
            'solo dei valori che riportano al proprio interno le parole "VERSAMENTO CASSA",
            'in modo che mi trovi solo i versamenti.
            Dim ce As Range
            Dim s As String
                For Each ce In Worksheets("Prima nota cassa").Range("E3:E50000")
                    s = Trim(ce)
                    If s = "" Then Exit For
                    If s Like "VERSAMENTO CASSA*" Then
                        cboCerca2.AddItem s
                    End If
                Next
                    
            MultiPage1.Value = 0
            txtUtenza.SetFocus
            End Sub
            

            Tutto il lavoro mi sembra ben fatto, ma nel codice che vedo ci sono parecchie ottimizzazioni da fare 🙂

            Ora analizzo le altre richieste.

             

            #20754 Score: 0 | Risposta

            vecchio frac
            Senior Moderator
              249 pts

              Dandelion1987 ha scritto:

              Poi quando clicco sopra il versamento desiderato  vorrei che nelle textbox adiacenti venissero riporati i valori appartenenti alla riga interessata:

              - "TextBox138" deve riportare il valore della data presente nella colonna "A"

              - "TextBox137" l'importo che appare nella colonna "D".

              Intervieni sull'evento change della combobox per recuperare i valori corrispondenti alla scelta fatta (la riga del combobox selezionata ha indice ListIndex e quindi corrisponde alle righe del foglio +3 perchè i dati cominciano alla terza riga):

              Private Sub cboCerca2_Change()
                  'Poi quando clicco sopra il versamento desiderato  vorrei che nelle textbox adiacenti
                  'venissero riporati i valori appartenenti alla riga interessata:
                  '- "TextBox138" deve riportare il valore della data presente nella colonna "A"
                  '- "TextBox137" l'importo che appare nella colonna "D".
                  
                  Dim f As Range
                  Set f = Worksheets("Prima nota cassa").Cells(cboCerca2.ListIndex + 3, 5)
                  TextBox138 = f.Offset(, -4) 'data: colonna A
                  TextBox137 = f.Offset(, -1) 'importo: colonna D
              End Sub
              
              #20755 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                249 pts

                Dandelion1987 ha scritto:

                2) Sottrazione valori versamento dal conta cassa

                Fai la somma dei due range e sottraili tra loro. Puoi utilizzare per comodità la funzione Sum di Excel:

                differenza = worksheetfunction.sum( sheets("versamento").range("b4:b10")) - worksheetfunction.sum( sheets("conta cassa").range("b4:b10"))

                #20834 Score: 0 | Risposta

                Sei stato davvero molto gentile!

                Con questi codici da te consigliati vedo i dati che mi servono selezionado la voce versamento desiderata dalla combobox:

                Private Sub cboCerca2_Change()
                    Dim f As Range
                    Set f = Worksheets("Prima nota cassa").Cells(cboCerca2.ListIndex + 4, 5)
                    TextBox138 = f.Offset(, -4) 'data: colonna A
                    TextBox137 = f.Offset(, -1) 'importo: colonna D
                    TextBox137 = Format(TextBox137, "#,###0.#0 €")
                End Sub

                 

                `Dim ce As Range
                Dim s As String
                    For Each ce In Worksheets("Prima nota cassa").Range("E3:E50000")
                        s = Trim(ce)
                        If s = "" Then Exit For
                        If s Like "VERSAMENTO CASSA*" Then
                            cboCerca2.AddItem s
                        End If
                    Next
                        
                MultiPage1.Value = 0
                `

                Però non risco a capire in quale parte del codice inserire la funzione sum da te fornita.

                Inoltre volevo chiederti come posso fare per modificare i campi del foglio "Prima nota cassa" delle colonne A (data) e D (importo) in base a quello che inserisco nelle TextBox138, TextBox137 e alla riga selezionata dalla combobox, che al momento si limitano  a mostrarmi i valori delle celle corrispondenti.

                Ho provato a riprendere il mio codice già sviluppato, ma non riesco a farlo funzionare come dovrebbe.

                Ti allego il file aggiornato.

                Grazie mille per il tuo prezioso aiuto!

                Allegati:
                You must be logged in to view attached files.
                #20862 Score: 0 | Risposta

                Rettifico 🙂

                Sono riuscito a risolvere il problema relativo all'inserimento dei dati modificati tramite la combobox "cboCerca2" con il "CommandButton14":

                Private Sub CommandButton14_Click()
                Dim numriga As Long
                
                numriga = 2
                Do Until Sheets("Prima nota cassa").Cells(numriga, 5) = ""
                    If Sheets("Prima nota cassa").Cells(numriga, 5) = cboCerca2.Text Then Exit Do
                    numriga = numriga + 1
                Loop
                
                Foglio6.Cells(numriga, 1) = TextBox138.Text
                If Len(TextBox137.Text) <> 0 Then
                Foglio6.Cells(numriga, 4) = TextBox137.Text * 1
                Else
                Foglio6.Cells(numriga, 4) = ""
                End If
                
                TextBox137 = Format(TextBox137, "#,###0.#0 €")
                
                cboCerca2.Text = "Seleziona il versamento da modificare."
                
                TextBox138.Text = ""
                TextBox137.Text = ""
                
                cboCerca2.Clear
                Dim z As String
                    For Each ce In Worksheets("Prima nota cassa").Range("E4:E50000")
                        z = Trim(ce)
                        If z = "" Then Exit For
                        If z Like "*" Then
                            cboCerca2.AddItem z
                        End If
                    Next
                
                MsgBox ("Inserimento eseguito con successo!")
                
                TextBox91.SetFocus
                End Sub

                 

                Ora però mi manca capire come inserire il codice Sum da te suggerito:

                differenza = worksheetfunction.sum( sheets("versamento").range("b4:b10")) - worksheetfunction.sum( sheets("conta cassa").range("b4:b10"))

                 

                Io avrei bisogno di inserirlo qui:

                Private Sub btnRegistra_Click()
                Registra
                '-------------vorrei inserirlo qui o dentro la macro Registra----------------
                Pulisci
                
                TextBox134.Value = Sheets("Conta Cassa").Range("C15").Value
                TextBox134 = Format(TextBox134, "#,###0.#0 €")
                
                'continua codice...
                
                End Sub

                 

                Poi mi mancherebbe il discorso della mail già anticipato in un'altra discussione.

                Mi avevi suggerito questo codice che ho riadattato per le mie esigenze:

                Sub Inviaexcel()
                Dim tb As Workbook
                Dim wb As Workbook
                Dim sb As Workbook
                Dim sh As Worksheet
                
                    Set tb = ThisWorkbook
                    Set wb = Workbooks.Add
                    Set sb = Workbooks.Add
                    
                    tb.Worksheets("Prima nota cassa").Copy before:=wb.Worksheets(1)
                    tb.Worksheets("Bancomat e assegni").Copy after:=wb.Worksheets("Prima nota cassa")
                    tb.Worksheets("Conta cassa").Copy after:=wb.Worksheets("Bancomat e assegni")
                    
                    Application.DisplayAlerts = False
                    For Each sh In wb.Worksheets
                        If sh.Name <> "Prima nota cassa" And sh.Name <> "Bancomat e assegni" And sh.Name <> "Conta cassa" Then
                            sh.Delete
                        End If
                    Next
                    Application.DisplayAlerts = True
                
                Worksheets("Prima nota cassa").Select
                    
                End Sub
                

                 

                Però non so il codice vba per inviare il file excel tramite mail.

                Vorrei che nel codice ci fosse la possibilità di scegliere destinatario, oggetto, testo della mail e il nome del file excel generato 🙂

                Sia nell'oggetto della mail che nel nome del file mi servirebbe inserire in automatico la data del foglio "Ricevuta" nella casella C15.

                Ho già un codice dentro i moduli per l'invio del PDF che fa tutto questo, ma non riesco a modificarlo in modo che funzioni anche per l'invio di un file Excel tramite Outlook.

                Allego il file aggiornato completo.

                 

                Grazie mille!

                 

                Allegati:
                You must be logged in to view attached files.
                #21004 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  249 pts

                  Dandelion1987 ha scritto:

                  mi manca capire come inserire il codice Sum da te suggerito:

                  La riga di codice proposta funziona così com'è, devi solo dimensionare la variabile "differenza" (per esempio, "dim differenza as single").

                  Private Sub btnRegistra_Click()
                  dim differenza as single
                  
                  Registra
                  
                  differenza = worksheetfunction.sum( sheets("versamento").range("b4:b10")) - worksheetfunction.sum( sheets("conta cassa").range("b4:b10"))
                  
                  'ora decidi tu dove va il valore di "differenza" appena calcolato :)
                  
                  Pulisci
                  
                  TextBox134.Value = Sheets("Conta Cassa").Range("C15").Value
                  TextBox134 = Format(TextBox134, "#,###0.#0 €")
                  
                  'continua codice...
                  
                  End Sub

                  Dandelion1987 ha scritto:

                  non so il codice vba per inviare il file excel tramite mail.

                  Questa è un po' più lunghetta da spiegare e soprattutto non ho esempi qui a casa... ma in sostanza serve sapere se usi Outlook o un altro client di posta. Nel primo caso è abbastanza semplice, basta creare quei pochi oggetti per istanziare la classe Outllok Application, creare un oggetto MailItem, valorizzargli i vari campi (To, CC, Subject, Body) e quindi visualizzare o inviare (Display o Send).

                  Dandelion1987 ha scritto:

                  l'invio di un file Excel tramite Outlook.

                  Ecco non avevo letto bene 🙂 Magari domani dall'ufficio ti invio un esempio, però se fai una ricerchina in questo forum trovi esempi già fatti,se ne è parlato ancora!

                  #21022 Score: 0 | Risposta

                  Grazie mille intanto della mano 🙂

                  Ti confermo che usiamo outlook in ufficio.

                  Ho provato alcuni esempi su internet, anche con strutture un pò differenti, ma ogni volta mi dava errore.

                  Se puoi portarmi un esempio te ne sarei davvero grato perché ho proprio bisogno di essere seguito passo per passo.

                  Più che altro come ti dicevo avrei necessità che il codice mi permetta di convertire il nome del file in automatico con la parola "Prima nota cassa aggiornata al" e poi aggiungere la data corrente che può essere prelevata anche dal foglio "Ricevuta" cella "C15".

                  Sui modelli ho un codice che mi permette di fare questa cosa con il PDF, ma non funziona per formati xls, almeno io non riesco a farlo.

                  Adesso praticamente con il tuo codice riesco ad aprire un nuovo file excel che contiene solo i fogli selezionati, ma ho notato che ogni volta che faccio partire la macro mi escono progressivamente i nomi "Cartel1, Cartel2 ecc..

                  Quindi un'altro dubbio che mi era venuto è che su tutti i codici trovai su internet relativi all'invio tramite outlook tramite VBA dovevo scrivere il percorso dell'attachment.

                  Non c'è un modo per evitare questo?

                  Mi spiego, il mio obiettivo sarebbe poi condividere questo file anche con altri uffici con computer diversi.

                  Quindi sebbene utilizziamo tutti la stessa versione di Excel e Outlook i percorsi per allegare il file non saranno uguali.

                  Non me ne intendo molto di VBA quindi non so se sia possibile effettivamente trovare un'alternativa in modo che venga allegato sempre e comunque il file.

                  In attesa di tue istruzioni intanto ti ringrazio come sempre per la tua grande disponibilità.

                  Se sono riuscito a portare avanti questo progetto è sopratutto grazie al tuo aiuto e consigli.

                  Ps: Ho provato il codice ma non riesco a fare in modo che aggiorni le rispettive celle dalla B4 alla B10 nel foglio Conta Cassa.. se clicco Registra mi rimangono invariate le celle.

                  Private Sub btnRegistra_Click()
                  Dim differenza As Single
                  
                  Registra
                  
                  differenza = WorksheetFunction.Sum(Sheets("Conta cassa").Range("b4:b10")) - WorksheetFunction.Sum(Sheets("Versamento").Range("b4:b10"))
                  
                  Pulisci
                  
                  TextBox134.Value = Sheets("Conta Cassa").Range("C15").Value
                  TextBox134 = Format(TextBox134, "#,###0.#0 €")

                  Allego anche il file aggiornato per sicurezza.

                  Allegati:
                  You must be logged in to view attached files.
                  #21048 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    249 pts

                    Sono di corsa e non posso fermarmi... ma scrivo qui il codice che utilizzo in una mia procedura per creare e inviare una mail con allegati:

                    Public Sub pSendEmail(sTo As String, sSubject As String, sBody As String, Optional sAttachment As String)
                    Dim Email As Object
                    
                        Set Email = CreateObject("Outlook.Application").CreateItem(0)   'olMailItem
                        With Email
                            .To = sTo
                            .Subject = sSubject
                            .Body = sBody
                            If sAttachment <> "" Then .Attachments.Add sAttachment
                            '.Send    'inviare direttamente
                            .Display  'visualizzare senza inviare
                            .Save
                        End With
                        Set Email = Nothing
                    End Sub
                    
                    #21066 Score: 0 | Risposta

                    vecchio frac
                    Senior Moderator
                      249 pts

                      Non ti abbandono ma devo trovare il tempo... ho anche un paio di altre richieste in mail privata quindi credo che scoppierò 😛

                      #21075 Score: 0 | Risposta

                      Tranquillo non ho fretta, anzi ti ringrazio per l'aiuto 🙂

                      Ne approfitto per correggere qualche parte del codice avendolo ampliato molto dall'inizio.

                      Il bello che ogni volta che ti sembra finito o ti viene in mente di aggiungere qualcosa o ti accorgi di qualche piccolo errore di funzionamento.

                      Attendo allora tue indicazioni per proseguire con il file 🙂

                      Purtroppo la parte della mail e del calcolo SUM non mi va nonostate ieri mi sia messo due ore a provare.

                       

                      Grazie ancora!

                      #21249 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        249 pts

                        Io avrei bisogno di un supporto da parte tua perchè c'è qualcosa che non afferro...

                        Quando si preme il pulsante Registra di Esegui versamento si lancia anche la sub Registra che però mi sembra farraginosa e alcune istruzioni non hanno un senso pratico. Mi spieghi cosa dovrebbe accadere di preciso in questa routine? 

                        Dopo aver chiamato Registra vuoi calcolare la differenza tra le celle B4:B10 di Conta cassa e Versamento. Tra parentesi, i valori sono memorizzati come testo quindi la formula che ti ho passato fallisce. Meglio utilizzare il trucco di Evaluate: differenza = [sum('conta cassa'!b4:b10*1)] - [sum('versamento'!b4:b10*1)]

                        Questa differenza però dove vuoi che vada a finire? "se clicco Registra mi rimangono invariate le celle." : non ho capito, quali celle devono cambiare?

                        Poi mi parli di un nome di file da convertire in automatico. Ma quando deve accadere questo? su quale evento? Quando poi salvi un file per allegarlo a una mail puoi utilizzare la variabile di ambiente TEMP o (se per caso non è presente) la cartella radice dell'utente (USERPROFILE), da recuperare con Environ(). Salvi il file pdf colà, lo alleghi alla mail, spedisci la mail, elimini il file divenuto inutile.

                        Dici che non va la parte della mail: ottieni degli errori? quali? o non funziona proprio?

                        #21293 Score: 0 | Risposta

                        Certo ti spiego tutto 🙂

                        Allora per la parte relativa alla Sub Registra ho fatto in modo che si eseguano le seguenti operazioni:

                        - Macro Registra: Per inserire i dati del versamento nel foglio "Prima nota cassa" con segno negativo.

                        - differenza Sum: Ecco questa è la parte seguente che mi mancava, ovvero vorrei che venisse effettuata l'operazione di sottrazione della cella B4 del foglio "Conta cassa" meno la cella B4 del foglio "Versamento".

                        Poi questa operazione deve essere fatta da B4 a B10, però come hai detto tu essendo salvati come testo e non numero non funzionava.

                        Le celle vanno aggiornate essenzialmente dalla B4 alla B10 sempre del foglio Conta Cassa se possibile.

                        Poi tramite la solita formula:

                        TextBox.Value = Sheets("Foglio").Range("Cella").Value

                        Aggiorno i valori di tutte le TextBox del della Useform - Page - Conta Cassa 🙂

                        Quello che volevo ottenere era semplicemente un aggiornamento automatico dei valori di Conta Cassa a seguito di un versamento.

                        Per quanto riguarda la mail invece vorrei fare in questo modo se si può.

                        Ho creato nella Userform - Page "Conta Cassa" il commandbutton "btnInviaexcel

                        Vorrei collegare una macro che faccia esattamente le stesse cose di questa che avevo già nei modelli:

                        Sub Invia()
                            
                        ' --> User settings, change to suit
                            Const IsDisplay As Boolean = True           ' Change to False to .Send instead of .Display
                            Const IsSilent As Boolean = False           ' Change to True to Send without the confirmation MsgBox
                        ' <-- End of settings
                            
                            Dim IsCreated As Boolean
                            Dim i As Long
                            Dim PdfFile As String
                            Dim OutlApp As Object
                            Dim char As Variant
                            
                        '
                        ' Define PDF filename
                            PdfFile = "RICEVUTA DI " & ActiveSheet.Range("G19") & " " & Range("C15").Value '===============>> CELLA CONTENENTE IL MESE
                            
                        ' Check filename in C15
                            If Len(Trim(PdfFile)) = 0 Then
                                MsgBox "Nome del PDF non trovato", vbCritical, "Exit"
                                Range("C15").Select
                                Exit Sub
                            End If
                        ' Replace unallowed symbols by the underscore char
                            For Each char In Split("? "" / \ < > * | :")
                                PdfFile = Replace(PdfFile, char, ".")
                            Next
                        ' Add %TEMP% path to the file name and limit too long pathname
                            PdfFile = Left(Environ("TEMP") & "\" & PdfFile, 251) & ".pdf"
                            
                        ' --> FOR DEBUG ONLY, Check PdfFile
                            If Len(Dir(PdfFile)) > 0 Then
                                On Error Resume Next
                                Kill PdfFile
                                If Err Then
                                    MsgBox "Il file PDF è già in uso:" & vbLf _
                                    & PdfFile & vbLf _
                                    & "Chiudi tutte le finestre di Adobe e riprova", vbCritical, "Exit"
                                    Exit Sub
                                End If
                                On Error GoTo 0
                            End If
                        ' <--
                            
                        ' Export an active sheet as PDF
                            With ActiveSheet
                                .ExportAsFixedFormat Type:=xlTypePDF, _
                                Filename:=PdfFile, _
                                Quality:=xlQualityStandard, _
                                IncludeDocProperties:=True, _
                                IgnorePrintAreas:=False, _
                                From:=1, to:=1, _
                                OpenAfterPublish:=False
                            End With
                            
                        ' --> FOR DEBUG ONLY, Check PdfFile
                            If Len(Dir(PdfFile)) = 0 Then
                                MsgBox "Questo file PDF non è stato creato per motivi sconosciuti:" & vbLf _
                                & PdfFile, vbCritical, "Exit"
                                Exit Sub
                            End If
                        ' <--
                            
                        ' Use already open Outlook if possible
                            On Error Resume Next
                            Set OutlApp = GetObject(, "Outlook.Application")
                            If Err Then
                                Set OutlApp = CreateObject("Outlook.Application")
                                IsCreated = True
                            End If
                            On Error GoTo 0
                            
                        ' Prepare e-mail with PDF attachment
                            With OutlApp.CreateItem(0)
                                
                        ' Prepare e-mail
                                .Subject = "RICEVUTA DI " & ActiveSheet.Range("G19") & " - " & ActiveSheet.Range("H9") & " - " & ActiveSheet.Range("H8").Value
                                      
                                .Attachments.Add PdfFile
                                     
                        ' Try to send or just display the e-mail
                                On Error Resume Next
                                If IsDisplay Then .Display Else .Send
                                
                        ' Show error of .Send method
                                If Not IsDisplay Then
                        ' Return focus to Excel's window
                                    Application.Visible = True
                        ' Report on error or success
                                    If Err Then
                                        .Display
                                    Else
                                        If Not IsSilent Then
                                        End If
                                    End If
                                End If
                                On Error GoTo 0
                                
                            End With
                            
                        ' Delete PDF file
                            Kill PdfFile
                            
                        ' Release memory of the object variable
                            Set OutlApp = Nothing
                            
                        End Sub

                        Fa esattamente quello che vorrei, ma allega file in formato PDF.

                        Io vorrei fare la stessa identica cosa ma che mi alleghi il file in formato Excel.

                        Inoltre all'interno vorrei presenti solo i fogli: "Prima nota cassa", "Bancomat e assegni", "Conta cassa" che sono quelli di interesse del destinatario in azienda.

                        Per questa ultima parte avevamo risolto così:

                        Option Explicit
                        
                        Sub ApriExcel()
                        
                        Dim tb As Workbook
                        Dim wb As Workbook
                        Dim sh As Worksheet
                        
                            Set tb = ThisWorkbook
                            Set wb = Workbooks.Add
                            
                            tb.Worksheets("Prima nota cassa").Copy before:=wb.Worksheets(1)
                            tb.Worksheets("Bancomat e assegni").Copy after:=wb.Worksheets("Prima nota cassa")
                            tb.Worksheets("Conta cassa").Copy after:=wb.Worksheets("Bancomat e assegni")
                                
                            Application.DisplayAlerts = False
                            For Each sh In wb.Worksheets
                                If sh.Name <> "Prima nota cassa" And sh.Name <> "Bancomat e assegni" And sh.Name <> "Conta cassa" Then
                                    sh.Delete
                                End If
                            Next
                            Application.DisplayAlerts = True
                            
                        
                        End Sub
                        

                        Ma non saprei come integrarlo al codice dell'invio mail..

                        Ho proprio bisogno di una mano 🙁

                         

                        Grazie intanto per l'aiuto!

                        #22718 Score: 0 | Risposta

                        Faccio riemergere un attimo questa discussione che era rimasta sommersa in profondità con la speranza di qualche suggerimento 🙂

                        Allego intanto l'ultima versione del file completa.

                        Quello che vorrei fare è spiegato nel dettaglio appena sopra.

                        Mi rendo conto sia complicato, io stesso ho ripreso adesso il progetto in mano e alcune cose mi potrebbero sfuggire.

                        Vi chiedo di avere come sempre pazienza 🙂

                        Grazie mille!

                         

                        Ps. Modifico il messaggio solamente per aggiungere che gran parte del merito per la creazione del file in allegato è del Vecchio Frac. Grazie alle sue dritte ho potuto evolvere il progetto in qualcosa di più complesso e utile. Io non me ne intendo di codice VBA, mi limito ad osservare e capire.. ma senza della basi strutturate non potrei mai fare nulla. Per questo ci tenevo a ringraziare chi nei mesi passati mi ha dato una mano, il suo tempo e disponibilità.

                        Allegati:
                        You must be logged in to view attached files.
                      Login Registrati
                      Stai vedendo 19 articoli - dal 26 a 44 (di 44 totali)
                      Rispondi a: CommandButton per salvataggio valori celle su altro foglio Excel
                      Gli allegati sono permessi solo ad utenti REGISTRATI
                      Le tue informazioni: