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-20T17:45:50+00:00

    Ciao Francesco,

    Grazie mille, Norman! Risolto tutto.

    Sei veramente un grande!!!!!!!

    G-R-A-Z-I-EEEEEEEEE :-)

    Mi fa piacere che tu abbia risolto il problema e ti ringrazio per il cortese riscontro.

    Alla prossima.

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2022-07-20T17:31:40+00:00

    Grazie mille, Norman! Risolto tutto.

    Sei veramente un grande!!!!!!!

    G-R-A-Z-I-EEEEEEEEE :-)

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2022-07-20T13:02:28+00:00

    Sei ufficialmente un drago!!!! :-)

    GRAZIE MILLE!!!!

    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)?
    • 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...

    Grazie davvero per tutto il tuo supporto!

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2022-07-20T11:13:38+00:00

    Ciao Francesco,

    Fatto. Purtroppo restituisce il seguente errore: "Errore di compilazione: Sub o Function non definita"...

    Immagine

    Ho provato anche a togliere la protezione dal foglio, ma non sembra andare...

    A me il codice funziona senza problema 😊

    Quale riga di codice viene evidenziata quando si verifica questo messaggio di errore?

    Se la riga di codice incriminata fosse:

        **LRow = LastRow(SH, .Columns("A:A"))** 
    

    non è per caso che hai inavvertitamente cancellato la mia funzione LastRow?

       [![](https://learn-attachment.microsoft.com/api/attachments/468c02d6-4a27-4a87-b952-091b3a5fb190?platform=QnA"https://1drv.ms/x/s!AmTW9HzZG8cqkjVoWPh1o8M6GT3K?e=5pGIyX" title="https://1drv.ms/x/s!AmTW9HzZG8cqkjVoWPh1o8M6GT3K?e=5pGIyX" rel="ugc nofollow">Francesco20220720.xlsm che include il mio codice suggerito.  

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento