Condividi tramite

Macro per cancellare foglio e copiare contenuto da differenti files

Anonimo
2022-07-19T13:03:28+00:00

Ciao a tutt*.

Chiedo una mano a voi super esperti per finalizzare una vba.

Spiego prima cosa dovrebbe succedere, e poi condivido quanto ho già scritto (ma non sono sicuro che sia giusto).

  • Ho 2 files: "Aggregato" (dal quale far partire le macro) e "Inviati"
  • Il file "Aggregato" è composto da due fogli:
    • Confronto
    • Report
  • Il file "Inviati" ha un unico foglio (Foglio 1)
  • La macro presente sul file "Aggregato" dovrebbe effettuare le seguenti operazioni:
    • Cancellare tutto il contenuto del foglio "Confronto"
    • Cancellare il contenuto del foglio Report nelle sole colonne A-F, da riga 2 fino all'ultima riga compilata
    • Aprire un file .txt presente in una determinata cartella
    • Copiare il contenuto del file .txt nella colonna A del foglio "Confronto"
    • Chiudere il foglio .txt (chiudendo anche i due pop-up che si creano: la richiesta di salvare il file e di mantenere il contenuto degli appunti)
    • Aprire il foglio "Inviati"
    • Copiare il contenuto del foglio "Foglio 1" nelle sole colonne A-F, da riga 2 fino all'ultima riga compilata
    • Selezionare il file "Aggregato", foglio "Report" e incollare il contenuto appena copiato nelle colonne A-F, da riga 2 fino all'ultima riga necessaria
    • Confermare che è avvenuto tutto correttamente.

Per il momento ho scritto questo codice, ma credo che ci sia qualcosa che non va:

Sub Step_2()

' CANCELLA CONTENUTO PRECEDENTE

    Sheets("Confronto").Select 

    Cells.Select 

    Selection.ClearContents 

'

' IMPORTA FILE TXT

'

Workbooks.OpenText Filename:="C:\File.txt", Origin:= \_ 

    xlWindows, StartRow:=6, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, \_ 

    9), Array(10, 9), Array(21, 9), Array(36, 1)), TrailingMinusNumbers:=True 

ActiveCell.Columns("A:A").EntireColumn.Select 

Selection.Copy 

Windows("Aggregato.xlsm").Activate 

Sheets("Confronto").Select 

ActiveCell.Columns("A:A").EntireColumn.Select 

ActiveSheet.Paste 

Windows("File.txt").Activate 

ActiveWindow.Close 

'

' COPIA-INCOLLA DA FILE DI LEASYS

'

Workbooks.Open Filename:="C:\Inviati.xlsx" 

ActiveCell.Offset(1, 0).Range("A1").Select 

Range(Selection, Selection.End(xlToRight)).Select 

Range(Selection, Selection.End(xlDown)).Select 

Selection.Copy 

Windows("Aggregato.xlsm").Activate 

Sheets("Report").Select 

ActiveCell.Range("A1").Select 

ActiveSheet.Paste 

Windows("Inviati.xlsx").Activate 

ActiveWindow.Close 

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

Risposta accettata dall'autore della domanda

Anonimo
2022-07-20T16:09:37+00:00

Ciao Francesco,

Solo un'ultima domanda e una curiosità.

  • La domanda: quando parte la macro "Step_2", correttamente toglie la protezione al foglio e la rimette. Quando la rimette, però, non è più possibile usare i filtri sulla riga 1. C'è un modo per selezionare alcune opzioni quando si reinserisce la password (ecco uno screenshot)? Immagine

Sostituisci la procedura Step_2 con la seguente versione, in cui la modifica è evidenziata in verde

'========>>

Option Explicit

'-------->>

Public Sub Step_2()

Dim WB\_Inviati As Workbook, WB\_Testo As Workbook 

Dim SH\_Report As Worksheet, SH\_Confronto As Worksheet 

Dim SH\_Inviati As Worksheet 

Dim Rng\_Inviati As Range 

Dim sPath As String, sSeparatore As String 

Const sPercorso As String = **"C\CARTELLA\" '                    '<<=== Modifica** 

Const sFoglio\_Report As String = **"Report"** 

Const sFoglio\_Confronto As String = **"Confronto"** 

Const sFoglio\_Inviati As String = **"Foglio1"** 

Const sFile\_Inviati As String = **"Inviati"** 

Const sFile\_Testo As String = **"ElencoCartelle.txt"** 

Const sPassword As String = **"Password"                          '<<=== Modifica** 

sSeparatore = Application.PathSeparator 

If Right(sPercorso, 1) = sSeparatore Then 

    sPath = sPercorso 

Else 

    sPath = sPercorso & sSeparatore 

End If 

With ThisWorkbook 

    Set SH\_Report = .Sheets(sFoglio\_Report) 

    Set SH\_Confronto = .Sheets(sFoglio\_Confronto) 

End With 

On Error GoTo XIT 

Application.ScreenUpdating = False 

SH\_Confronto.UsedRange.ClearContents 

SH\_Report.Unprotect Password:=sPassword 

'\\ IMPORTA FILE TXT 

Workbooks.OpenText Filename:=sPath & sFile\_Testo, \_ 

    Origin:=xlWindows, StartRow:=6, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 9), Array(10, 9), Array(21, 9), Array(36, 1)), TrailingMinusNumbers:=True 

Set WB\_Testo = ActiveWorkbook 

With WB\_Testo 

    .Sheets(1).Columns("A:A").Copy Destination:=SH\_Confronto.Range("A1") 

    .Close SaveChanges:=False 

End With 

'\\ COPIA-INCOLLA DA FILE DI LEASYS 

Set WB\_Inviati = Workbooks.Open(Filename:=sPath & sFile\_Inviati) 

Set SH\_Inviati = WB\_Inviati.Sheets(sFoglio\_Inviati) 

Set Rng\_Inviati = SH\_Inviati.Range("A1").CurrentRegion 

Rng\_Inviati.Copy Destination:=SH\_Report.Range("A1") 

WB\_Inviati.Close SaveChanges:=False 

Call MsgBox(Prompt:="Fatto", Buttons:=vbInformation, Title:="REPORT") 

XIT:

Application.ScreenUpdating = True 

SH\_Report.Protect Password:=sPassword**, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True** 

End Sub

'<<========

  • La curiosità: vorrei aggiungere nell'oggetto dell'email (COLONNA J del file "Aggregato") la data (Colonna C del file "Aggregato"). Come posso fare? Ci ho provato più volte ma restituisce sempre il formato tipo 44599...

Nella procedura Step_3, sostituisci l'istruzione:

            .Subject = arrIn(i, 10)

con:

            .Subject = arrIn(i, 10) **& Space(1) & "Data: " & Format(arrIn(i, 3), "dd/mm/yyyy")** 

Nota bene:

Vista la prima richiesta di cui sopra, nella funzione LastRow del modulo di codice Modulo 1, sarà necessario sostituire l'istruzione

      SH.Protect Password:=sPassword, UserInterfaceOnly:=True

con:
SH.Protect Password:=sPassword, UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True

===

Regards,

Norman

Immagine

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

16 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2022-07-19T18:50:00+00:00

    Posso usare anche Google Drive?

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2022-07-19T18:14:17+00:00

    Ciao Francesco,

    Ciao Norman. Grazie per la risposta e per aver cancellato il duplicato (non so cosa sia successo!)

    Gli errori sono vari. Ad esempio, talvolta il copia-incolla non funziona in maniera corretta, andando ad incollare non partendo dalla cella A2 ma in giro per il foglio :-) Oppure, in alcuni casi, la macro "step 3" si interrompe bruscamente andando in debug.

    I file esempio sono scaricabili a questo link. Qualsiasi suggerimento di modificare i codici sono ben accetti! :-)

    Aggiungo anche una richiesta (se possibile). Nella macro denominata "step 3", il sistema invia automaticamente delle email. Attualmente, per evitare che la macro si interrompa, il foglio "Aggregato" fa un check evidendiando come "NON PRESENTE" alcune stringhe. L'operatore le cancella manualmente prima di lanciare la macro per far partire le email. C'è un modo per automatizzare questo passaggio?

    Grazie davvero per il tuo/vostro aiuto :-)

    Purtroppo, non riesco ad accedere ai tuoi file di sharepoint. Ti chiedo quindi gentilmente di caricare i tre file su OneDrive o DropBox.

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2022-07-19T17:58:42+00:00

    Ciao Norman. Grazie per la risposta e per aver cancellato il duplicato (non so cosa sia successo!)

    Gli errori sono vari. Ad esempio, talvolta il copia-incolla non funziona in maniera corretta, andando ad incollare non partendo dalla cella A2 ma in giro per il foglio :-) Oppure, in alcuni casi, la macro "step 3" si interrompe bruscamente andando in debug.

    I file esempio sono scaricabili a questo link. Qualsiasi suggerimento di modificare i codici sono ben accetti! :-)

    Aggiungo anche una richiesta (se possibile). Nella macro denominata "step 3", il sistema invia automaticamente delle email. Attualmente, per evitare che la macro si interrompa, il foglio "Aggregato" fa un check evidendiando come "NON PRESENTE" alcune stringhe. L'operatore le cancella manualmente prima di lanciare la macro per far partire le email. C'è un modo per automatizzare questo passaggio?

    Grazie davvero per il tuo/vostro aiuto :-)

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2022-07-19T13:50:54+00:00

    Ciao Francesco,

    Chiedo una mano a voi super esperti per finalizzare una vba.

    Spiego prima cosa dovrebbe succedere, e poi condivido quanto ho già scritto (ma non sono sicuro che sia giusto).

    • Ho 2 files: "Aggregato" (dal quale far partire le macro) e "Inviati"
    • Il file "Aggregato" è composto da due fogli:
      • Confronto
      • Report
    • Il file "Inviati" ha un unico foglio (Foglio 1)
    • La macro presente sul file "Aggregato" dovrebbe effettuare le seguenti operazioni:
      • Cancellare tutto il contenuto del foglio "Confronto"
      • Cancellare il contenuto del foglio Report nelle sole colonne A-F, da riga 2 fino all'ultima riga compilata
      • Aprire un file .txt presente in una determinata cartella
      • Copiare il contenuto del file .txt nella colonna A del foglio "Confronto"
      • Chiudere il foglio .txt (chiudendo anche i due pop-up che si creano: la richiesta di salvare il file e di mantenere il contenuto degli appunti)
      • Aprire il foglio "Inviati"
      • Copiare il contenuto del foglio "Foglio 1" nelle sole colonne A-F, da riga 2 fino all'ultima riga compilata
      • Selezionare il file "Aggregato", foglio "Report" e incollare il contenuto appena copiato nelle colonne A-F, da riga 2 fino all'ultima riga necessaria
      • Confermare che è avvenuto tutto correttamente.

    Per il momento ho scritto questo codice, ma credo che ci sia qualcosa che non va:

    Sub Step_2()

    ' CANCELLA CONTENUTO PRECEDENTE

    Sheets("Confronto").Select

    Cells.Select

    Selection.ClearContents

    '

    ' IMPORTA FILE TXT

    '

    Workbooks.OpenText Filename:="C:\File.txt", Origin:= _

    xlWindows, StartRow:=6, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, _

    9), Array(10, 9), Array(21, 9), Array(36, 1)), TrailingMinusNumbers:=True

    ActiveCell.Columns("A:A").EntireColumn.Select

    Selection.Copy

    Windows("Aggregato.xlsm").Activate

    Sheets("Confronto").Select

    ActiveCell.Columns("A:A").EntireColumn.Select

    ActiveSheet.Paste

    Windows("File.txt").Activate

    ActiveWindow.Close

    '

    ' COPIA-INCOLLA DA FILE DI LEASYS

    '

    Workbooks.Open Filename:="C:\Inviati.xlsx"

    ActiveCell.Offset(1, 0).Range("A1").Select

    Range(Selection, Selection.End(xlToRight)).Select

    Range(Selection, Selection.End(xlDown)).Select

    Selection.Copy

    Windows("Aggregato.xlsm").Activate

    Sheets("Report").Select

    ActiveCell.Range("A1").Select

    ActiveSheet.Paste

    Windows("Inviati.xlsx").Activate

    ActiveWindow.Close

    End Sub

    Sebbene ci siano numerose modifiche che farei per rendere il tuo codice più veloce, più efficiente e più robusto, ti chiederei gentilmente di spiegare in dettaglio cosa è che non funziona con il tuo codice esistente - a questo proposito potrei prevedere diversi modi in cui il tuo codice potrebbe non funzionare come previsto! 😊

    Inoltre, sarebbe digrande aiuto se dovessi caricare esempii dei due file Excel e del file di testo, privi di dati sensibili:

    Per caricare il file su Microsoft OneDrive, vedi:

       Condividere file e cartelle di OneDrive

    Per caricare il file su DropBox, vedi:

    Come faccio a condividere file e cartelle in Dropbox?

    Postscriptum:

    Mi sono permesso di cancellare il tuo altro post in quanto era una duplicazione di questo post.

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento