Condividi tramite

Macro Excel 2010

Anonimo
2016-12-14T15:22:21+00:00

Sto cercando da tempo una soluzione al mio problema, ma ancora non sono riuscito a trovarla.

Lavoro con file excel con estensione .xlb ed ho bisogno di creare delle "copie a valore" degli stessi prive delle macro.

Al momento ho risolto con doppi salvataggi passando prima dall'estensione .xlsx per poi tornare a .xlb.

Tuttavia, siccome i file sono abbastanza grandi e su cartelle di rete, il tutto è un pò lento.

Perciò avrei bisogno di una macro che mi permette di cancellare tutto il codice nel file copia creato con SaveCopyAs.

Ringrazio anticipatamente quanti potranno aiutarmi.

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

3 risposte

Ordina per: Più utili
  1. Anonimo
    2016-12-15T14:21:41+00:00

    Ciao Angelobox,

    Tuttavia, evidentemente il mio livello di conoscenza del VBA non è abbastanza elevato.

    Infatti quando inserisco lo script mi segnala errore già dai DIM (Tipo definito dall'utente non definito) e se faccio saltare i DIM, mi segnala : l'accesso a livello di programmazione al Progetto Visual Basic non è attendibile.

    Prova come segue.

    • Alt+F11 per aprire l'editor di VBA
    • Scheda Strumenti
    • Fai clic su Riferimenti

    • Trova e spunta il riferimento Microsoft Visual Basic For Applications Extensibility 5.3

    • OK
    • Alt+IMper inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice:

    '=========>>

    Option Explicit

    '--------->>

    Private Function PercorsoFornitoDaUtente() As String

        Dim FD As FileDialog

        Dim sFilename As String

        Set FD = Application.FileDialog(msoFileDialogFilePicker)

        With FD

            .AllowMultiSelect = False

            .Title = "Seleziona il file da aprire e salvare come tipo xlsx."

            .Filters.Clear

            .Filters.Add "Excel", "*.xlsb"

            If .Show = True Then

                sFilename = Dir(.SelectedItems(1))

            End If

        End With

        PercorsoFornitoDaUtente = sFilename

    End Function

    '--------->>

    Public Sub Tester()

    '\ Aggiungi un riferimento alla library:

    '\ Microsoft Visual Basic For Applications Extensibility 5.3

        Dim WB As Workbook

        Dim VBProj As VBIDE.VBProject

        Dim VBComp As VBIDE.VBComponent

        Dim CodeMod As VBIDE.CodeModule

        Dim sFilename As String, sName As String

        sFilename = PercorsoFornitoDaUtente

        If sFilename = vbNullString Then

            Call MsgBox( _

                 Prompt:="Non hai selezionato un file!", _

                 Buttons:=vbCritical, _

                 Title:="REPORT")

            Exit Sub

        End If

        Set WB = Workbooks.Open(sFilename)

        Set VBProj = WB.VBProject

        For Each VBComp In VBProj.VBComponents

            If VBComp.Type = vbext_ct_Document Then

                Set CodeMod = VBComp.CodeModule

                With CodeMod

                    .DeleteLines 1, .CountOfLines

                End With

            Else

                VBProj.VBComponents.Remove VBComp

            End If

        Next VBComp

        On Error GoTo XIT

        Application.DisplayAlerts = False

        With WB

            sName = Split(.Name, ".")(0) & ".xlsx"

            .SaveAs Filename:=sName, FileFormat:=51

            .Close SaveChanges:=False

        End With

    XIT:

        Application.DisplayAlerts = True

    End Sub

    '<<=========

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel
    • Salva il file con l’estensionexlsm
    • Alt+F8 per aprire  la finestra di gestione delle macro
    • Seleziona Tester | Esegui

    Questo codice:

    • Apre una finestra di dialogo per consentire la selezione del file di interesse
    • Apre il file
    • Rimuove tutto l'eventuale codice
    • Salva il file  come un nuovo file del tipo XLSX, utilizzando il nome originale
    • Chiude il file originale xlsb senza alterarlo.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-12-15T12:33:59+00:00

    Grazie per la risposta tempestiva.

    Tuttavia, evidentemente il mio livello di conoscenza del VBA non è abbastanza elevato.

    Infatti quando inserisco lo script mi segnala errore già dai DIM (Tipo definito dall'utente non definito) e se faccio saltare i DIM, mi segnala : l'accesso a livello di programmazione al Progetto Visual Basic non è attendibile.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-12-14T16:21:14+00:00

    Ciao Angelobox,

    Benvenuto alla Community!

    Sto cercando da tempo una soluzione al mio problema, ma ancora non sono riuscito a trovarla.

    Lavoro con file excel con estensione .xlb ed ho bisogno di creare delle "copie a valore" degli stessi prive delle macro.

    Al momento ho risolto con doppi salvataggi passando prima dall'estensione .xlsx per poi tornare a .xlb.

    Tuttavia, siccome i file sono abbastanza grandi e su cartelle di rete, il tutto è un pò lento.

    Perciò avrei bisogno di una macro che mi permette di cancellare tutto il codice nel file copia creato con SaveCopyAs..

    Prova qualcosa del genere:

    '=========>>

    Option Explicit

    '--------->>

    Public Sub Tester()

    \  Aggiungi un riferimento alla library:

    '\ Microsoft Visual Basic For Applications Extensibility 5.3

        Dim WB As Workbook

        Dim VBProj As VBIDE.VBProject

        Dim VBComp As VBIDE.VBComponent

        Dim CodeMod As VBIDE.CodeModule

        Dim sName As String

        Set WB = ActiveWorkbook

        Set VBProj = WB.VBProject

        For Each VBComp In VBProj.VBComponents

            If VBComp.Type = vbext_ct_Document Then

                Set CodeMod = VBComp.CodeModule

                With CodeMod

                    .DeleteLines 1, .CountOfLines

                End With

            Else

                VBProj.VBComponents.Remove VBComp

            End If

        Next VBComp

        On Error GoTo XIT

        Application.DisplayAlerts = False

        With WB

            sName = Split(.Name, ".")(0) & ".xlsx"

            .SaveAs Filename:=sName, FileFormat:=51

            .Close SaveChanges:=False

        End With

    XIT:

        Application.DisplayAlerts = True

    End Sub

    '<<=========

    Nota che questo codice deve essere inserito in un diverso file - magari il tuo Personal.xlsb.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento