Excel e gli applicativi Microsoft Office WORD 365 – Macro autorun.

Login Registrati
Stai vedendo 21 articoli - dal 1 a 21 (di 21 totali)
  • Autore
    Articoli
  • #51190 Score: 0 | Risposta

    EmmePi
    Partecipante

      Buongiorno a tutti.

      Sono nuovo in questo forum. Spero possiate aiutarmi nel mio "accademico" problemino.

      Vorrei poter attivare una macro in automatico appena apro un certo documento word, ma solo per quel documento, es: pippo.doc

      Ovviamente per tutti gli altri documenti non deve valere questa macro, ma le altre che ho e che attivo manualmente quando mi servono.

      Esiste un modo? Ho provato ma le macro o si mischiano o finiscono in comune o, addirittura, a volte spariscono   

       

      Grazie.

      #51196 Score: 1 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        Cosi' a naso se conosci il nome del documento, quando parte fai un controllo su ActiveDocument.Name.

        Il codice andra' in ThisDocument di Normal.dotx perche' ovviamente il controllo va fatto su ogni documento avviato in Word.

        Edit: ho appena provato e si', funziona   

        #51205 Score: 0 | Risposta

        EmmePi
        Partecipante

          Uhmmm, posso chiederti la gentilezza di allegare quel documento word?

          Così lo esamino e faccio delle prove. Grazie.

          #51209 Score: 0 | Risposta

          EmmePi
          Partecipante

            Diciamo che il mio documento con macro autorun lo chiamerò [VerificaMKV]

            Potresti inviarmi questo documento con la macro che per esempio scrive Ciao, ho eseguito automaticamente ciò che desideri.

            Poi svelerò anche a cosa mi serve, pubblicando la mia macro. In sostanza da un file .bat devo far leggere i file .mkv in una directory, e lanciare un programmino che verifica se tali file non siano corrotti.

            Ora lancio il bat che crea un file .doc (Lista.doc) contenente il nome dei file .mkv e apre questo doc. 

            La macro che ho realizzato e che lancio a mano aggiunge il nome del programmino esterno ed i parametri, salva un secondo file .bat e lo esegue.

            Penso che dovrò modificare la macro facendo generare all'interno del documento con macro-autorun la lista dei file della directory corrente, salvare il .bat ed eseguirlo.

             

            #51212 Score: 0 | Risposta

            vecchio frac
            Senior Moderator
              272 pts

              Ma non e' difficile e poi anche se allegassi il file non vedresti niente perche' il codice non e' nel documento ma in ThisDocument di Normal.

              Apri un'istanza di Winword (quindi un documento vuoto), apri l'editor di codice e dalla finestra progetti (Ctrl-R) seleziona Normal --> ThisDocument.

              Qui inserisci il codice che permette, ad ogni evento Open di un documento, di controllare quale sia il documento aperto. Se il nome documento comincia con "Z" per esempio, verra' eseguito il codice nel blocco If.

              Option Explicit
              
              Private Sub Document_Open()
                  If ActiveDocument.Name Like "Z*" Then
                      'qui dentro scrivo il codice da eseguire ogni volta che
                      'apro un documento che soddisfa la condizioine precedente
                      '...
                  End If
              End Sub
              
              #51230 Score: 0 | Risposta

              EmmePi
              Partecipante

                Niente da fare, sarò io de coccio....

                Il mio file doc è: [VerificaMKV].docx

                Creato nuovo, aperto editor e selezionato thisdocument in normal dot

                Questo il codice immesso:

                Codice

                Salvo. apro il file word [VerificaMKV].docx e non mi scrive nulla sul foglio bianco...

                 

                EDIT: mi rispondo da solo. Word non "digerisce il file che inizia con la parentesi quadra [

                se uso quella tonda invece si...

                #51231 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  272 pts

                  Ma no, studiati meglio come funziona Like    e guarda il mio codice.

                  #51250 Score: 0 | Risposta

                  EmmePi
                  Partecipante

                    Si, ora riesco anche con la [

                    Funziona tutto, sono riuscito anche a modificare facendo in modo che con un solo .bat mi finzioni da qualsiasi directory richiamando la directory di lavoro dove ho messo il programmino, dove scrive il file doc con la macro autorun ecc...

                    Mi basta ora solo mettere il file bat nella directory dove sono i file da verificare.

                    Una ultimissima cosa mi manca all'appello... c'è un modo per utilizzare la codifica dei caratteri in automatico?

                    Di default c'è "windows" e manda in errore molti nome file tipo le accentate ed altri caratteri. Ho visto che il più "compatibile" è MS-DOS, ma dovendolo selezionare a mano va a farsi benedire l'automazione totale...

                    Anzi probabilmente con la spunta su altra codifica e scegliendo Europa occidentale (DOS) è anche meglio.

                     

                    Codifica caratteri

                    Nella macro "automatica" creata posso impostare anche altri parametri in automatico (che ovviamente valgano solo per questo documento) tipo il font e la grandezza font?

                    EDIT: la parte riguardante le impostazioni di partenza, dimensione foglio, orientamento, font ecc ci sto arrivando. Ma per la scelta automatica della codifica da utilizzare sono in alto mare...

                    #51251 Score: 0 | Risposta

                    vecchio frac
                    Senior Moderator
                      272 pts

                      E' concettualmente sbagliato impostare il confronto come nome file Like "[VerificaMKV]*" perche' questo significa solo "considera un nome di file che comincia per V (maiuscola) oppure per e, per r, per i, per f (eccetera) seguito da qualsiasi altro carattere. Quindi un file chiamato per esempio "K2345" soddisfera' la condizione.

                      Soluzione: togli le quadre... nome file Like "VerificaMKV*" aprira' solamente i file che cominciano con "VerificaMKV".

                      Sul fatto che ti compare la finestra di conversione file e' perche' probabilmente il file che stai aprendo non e' del tutto un file doc (magari e' stato creato con altre applicazioni open source). Puoi mostrare il contenuto del file bat o almeno dell'istruzione che apre il documento? Perche' con Open ci sono tanti parametri, tra cui Format ed Encoding, che forse fanno al caso tuo.

                       

                      #51252 Score: 0 | Risposta

                      EmmePi
                      Partecipante

                        Si poi avevo "depurato" i nomi dalle [

                        Funziona tutto, ma ora mi sto intestardendo sul quei due problemi: scegliere la codifica DOS in automatico e pare anche il tipo e dimensione carattere che non me lo digerisce mentre l'impostazione del foglio (dimensioni/orientamento) si.

                        Questa è la macro:

                        `Option Explicit
                        
                        Private Sub Document_Open()
                            If ActiveDocument.Name Like "VerificaMKV*" Then
                                Selection.TypeParagraph
                                Selection.Font.Name = "Aptos"
                                Selection.Font.Size = 3
                            
                                With Selection.PageSetup
                                    .LineNumbering.Active = False
                                    .Orientation = wdOrientLandscape
                                    .TopMargin = CentimetersToPoints(0.5)
                                    .BottomMargin = CentimetersToPoints(0.5)
                                    .LeftMargin = CentimetersToPoints(1.25)
                                    .RightMargin = CentimetersToPoints(1.3)
                                    .Gutter = CentimetersToPoints(0)
                                    .HeaderDistance = CentimetersToPoints(1.25)
                                    .FooterDistance = CentimetersToPoints(1.25)
                                    .PageWidth = CentimetersToPoints(43.17)
                                    .PageHeight = CentimetersToPoints(55.87)
                                    .FirstPageTray = wdPrinterDefaultBin
                                    .OtherPagesTray = wdPrinterDefaultBin
                                    .SectionStart = wdSectionNewPage
                                    .OddAndEvenPagesHeaderFooter = False
                                    .DifferentFirstPageHeaderFooter = False
                                    .VerticalAlignment = wdAlignVerticalTop
                                    .SuppressEndnotes = False
                                    .MirrorMargins = False
                                    .TwoPagesOnOne = False
                                    .BookFoldPrinting = False
                                    .BookFoldRevPrinting = False
                                    .BookFoldPrintingSheets = 1
                                    .GutterPos = wdGutterPosLeft
                                End With
                                    
                                Dim messaggio As String
                                Dim Righe As Long
                                Dim X As Long
                        
                                    Righe = ActiveDocument.ComputeStatistics(wdStatisticLines)
                                            Selection.HomeKey Unit:=wdStory
                        
                                    For X = 1 To Righe
                                        Selection.HomeKey Unit:=wdLine
                                        Selection.TypeText Text:="D:\VerificaMKV\Verifica.exe --no-warn  """
                                        Selection.EndKey Unit:=wdLine
                                        Selection.TypeText Text:=""""
                                        Selection.MoveDown Unit:=wdLine, Count:=1
                                    Next X
                                        Selection.EndKey Unit:=wdStory
                                        Selection.TypeParagraph
                                        Selection.TypeText Text:="pause"
                                               
                               ' ActiveDocument.SaveAs ActiveDocument.Path & "\" & "[Verifica].bat", FileFormat:=2
                               ' ActiveDocument.Close
                               ' Application.Quit
                        
                            End If
                        End Sub
                        `

                        le 3 righe:

                        Selection.TypeParagraph
                        Selection.Font.Name = "Aptos"
                        Selection.Font.Size = 3

                        credevo riuscissero ad impostare il documento con quel carattere/dimensione ma non lo fa...

                        Le impostazione delle dimensioni documento le ho ricavate registrando una macro, probabilmente molti parametri potrei toglierli. A me occorre solo che apre in landscape un foglio con dimensioni massime e margini minimi. Questo perchè la directory potrebbe contenere moltissimi file e anche il path del nome potrebbe esser lungo. Per questo cerco di impostare anche un carattere minino di dimensioni...

                        E per quanto riguarda il tipo codifica del carattere MS-DOS non trovo nulla in rete, ma continuo a cercare.

                        Questo è il file .bat, semplicissimo:

                         

                        dir *.mkv /W/B > "D:\VerificaMKV\VerificaMKV.doc"

                        "D:\VerificaMKV\VerificaMKV.doc"

                        "D:\VerificaMKV\Verifica.bat"

                        #51253 Score: 0 | Risposta

                        EmmePi
                        Partecipante

                          Una cosa l'ho risolta, con il debug F8 vedendo cosa faceva la macro ho capito che dovevo selezionare tutto il testo e "formattarlo" col nuovo carattere:

                          Option Explicit
                          
                          Private Sub Document_Open()
                              If ActiveDocument.Name Like "VerificaMKV*" Then
                              
                                  Dim messaggio As String
                                  Dim Righe As Long
                                  Dim X As Long
                                  
                          ' Qui setto i parametri del foglio word: Dimensioni e margini
                          
                                  With Selection.PageSetup
                                      .LineNumbering.Active = False
                                      .Orientation = wdOrientLandscape
                                      .TopMargin = CentimetersToPoints(0.5)
                                      .BottomMargin = CentimetersToPoints(0.5)
                                      .LeftMargin = CentimetersToPoints(1.25)
                                      .RightMargin = CentimetersToPoints(1.3)
                                      .Gutter = CentimetersToPoints(0)
                                      .HeaderDistance = CentimetersToPoints(1.25)
                                      .FooterDistance = CentimetersToPoints(1.25)
                                      .PageWidth = CentimetersToPoints(43.17)
                                      .PageHeight = CentimetersToPoints(55.87)
                                      .FirstPageTray = wdPrinterDefaultBin
                                      .OtherPagesTray = wdPrinterDefaultBin
                                      .SectionStart = wdSectionNewPage
                                      .OddAndEvenPagesHeaderFooter = False
                                      .DifferentFirstPageHeaderFooter = False
                                      .VerticalAlignment = wdAlignVerticalTop
                                      .SuppressEndnotes = False
                                      .MirrorMargins = False
                                      .TwoPagesOnOne = False
                                      .BookFoldPrinting = False
                                      .BookFoldRevPrinting = False
                                      .BookFoldPrintingSheets = 1
                                      .GutterPos = wdGutterPosLeft
                                      
                                  End With
                                  
                          ' Ora seleziono tutto il testo e lo formatto con il carattere/dimensione scelto
                          
                                  
                                      Selection.WholeStory
                                      Selection.Font.Name = "Aptos"
                                      Selection.Font.Size = 3
                                      
                          ' Questa è la parte dove aggiungo ad ogni nome file la chiamata alla utility di verifica compresi i parametri
                          
                                      Righe = ActiveDocument.ComputeStatistics(wdStatisticLines)
                                              Selection.HomeKey Unit:=wdStory
                          
                                      For X = 1 To Righe
                                          Selection.HomeKey Unit:=wdLine
                                          Selection.TypeText Text:="D:\VerificaMKV\Verifica.exe --no-warn  """
                                          Selection.EndKey Unit:=wdLine
                                          Selection.TypeText Text:=""""
                                          Selection.MoveDown Unit:=wdLine, Count:=1
                                      Next X
                                          Selection.EndKey Unit:=wdStory
                                          Selection.TypeParagraph
                                          Selection.TypeText Text:="pause"
                          
                          ' Questa è la finalizzazione dove salvo un file bat che esegue la verifica per tutti i file
                                                 
                                  ActiveDocument.SaveAs ActiveDocument.Path & "\" & "[Verifica].bat", FileFormat:=2
                                  ActiveDocument.Close
                                  Application.Quit
                          
                              End If
                              
                          End Sub
                          

                          Manca solo il settaggio della codifica da utilizzare per caricare il file MS-DOS. Forse si potrebbe scegliere come default nelle opzioni word ma influenzerebbero poi tutti i documenti word e non solo questo come voglio io...

                           

                          #51254 Score: 0 | Risposta

                          vecchio frac
                          Senior Moderator
                            272 pts

                            EmmePi ha scritto:

                            dir *.mkv /W/B > "D:\VerificaMKV\VerificaMKV.doc"

                            Quindi tu redirigi l'output di una shell in un semplice file di testo... ecco perche' Word non lo riconosce come file suo. Prova a chiamarlo rtf o txt e secondo me qualcosa cambia.

                            Quanto al resto, ricordati che c'e' anche ActiveDocument.Content ma ricordiamoci che e' un semplice file di testo aperto in Word. Per dire che magari per quel che devi fare non occorre scomodare Word ma non so molto dei tuoi scopi quindi non azzardo niente.

                            #51255 Score: 0 | Risposta

                            EmmePi
                            Partecipante

                              Word serve per automatizzare il tutto aggiungendo tutto il resto al nome file.

                              Hai qualche idea di come fare a settare il set di caratteri MS-DOS?

                              #51256 Score: 0 | Risposta

                              vecchio frac
                              Senior Moderator
                                272 pts

                                La gestione della codifica avviene prima dell'apertura del documento e non penso che sia facilmente intercettabile (perche' non piloti l'apertura, tu semplicemente fai doppio click sul file .doc che non e' Word ma testo)

                                Scusa ma io cambierei approccio. Se quello che ti serve e' la lista dei file mkv in una data directory, e' meglio un pezzo di codice come questo.

                                Sub dirlist()
                                Const parentFolder As String = "C:\Users\...\TEST\"
                                Dim results As String
                                
                                    'mostra informazioni estese sui files contenuti in directory, sottodirectory,
                                    'senza informazioni di riepilogo, escludendo i nomi delle sottodirectory
                                    results = CreateObject("WScript.Shell").Exec("CMD /C DIR """ & parentFolder & "*.xls*"" /S /B /A:-D").StdOut.ReadAll
                                    Debug.Print results
                                
                                    'inserisce i risultati in colonna A:
                                    Dim v As Variant
                                    v = Split(results, vbNewLine)
                                    Range("A1").Resize(UBound(v), 1).Value = WorksheetFunction.Transpose(v)
                                
                                End Sub
                                

                                Il codice e' per Excel ma e' facilmente adattabile, dove il cuore e' la riga di results che puoi personalizzare come ti serve, e che conviene leggere direttamente in memoria (le righe terminano con un NewLine), per poi depositarlo in un documento vuoto da formattare come si vuole.

                                #51283 Score: 0 | Risposta

                                EmmePi
                                Partecipante

                                  Cambiare ora è assurdo, funziona tutto ottimamente. C'è solo quel problema che se qualche nome file ha caratteri particolari, word non li digerisce. In effetti apree il word con la macro automatica e si presenta la finestra:

                                  Codifica testo word

                                  Spunto MS-DOS e va avanti alla grande fino alla fine.

                                  Però vorrei evitare questo eventuale passaggio!

                                  Ho trovato in rete questa istruzione, ma non riesco a collocarla e/o farla funzionare...

                                  ActiveDocument.TextEncoding = MmsoEncodingTurkish

                                  Ovviamente dovrei trovare quella corrispondente a MS-DOS, se funzionasse...

                                  #51285 Score: 0 | Risposta

                                  EmmePi
                                  Partecipante

                                    Attualmente, con la nuova istruzione, è così:

                                    Option Explicit
                                    
                                    Private Sub Document_Open()
                                        If ActiveDocument.Name Like "VerificaMKV*" Then
                                        
                                            Dim Righe As Long
                                            Dim X As Long
                                    
                                    ' Questo dovrebbe essere il codice per settare la codifica del tipo carattere.
                                            ActiveDocument.TextEncoding = msoEncodingTurkish 
                                           
                                    ' Qui setto i parametri del foglio word: Dimensioni e margini
                                    
                                            With Selection.PageSetup
                                                .LineNumbering.Active = False
                                                .Orientation = wdOrientLandscape
                                                .TopMargin = CentimetersToPoints(0.5)
                                                .BottomMargin = CentimetersToPoints(0.5)
                                                .LeftMargin = CentimetersToPoints(1.25)
                                                .RightMargin = CentimetersToPoints(1.3)
                                                .Gutter = CentimetersToPoints(0)
                                                .HeaderDistance = CentimetersToPoints(1.25)
                                                .FooterDistance = CentimetersToPoints(1.25)
                                                .PageWidth = CentimetersToPoints(43.17)
                                                .PageHeight = CentimetersToPoints(55.87)
                                                .FirstPageTray = wdPrinterDefaultBin
                                                .OtherPagesTray = wdPrinterDefaultBin
                                                .SectionStart = wdSectionNewPage
                                                .OddAndEvenPagesHeaderFooter = False
                                                .DifferentFirstPageHeaderFooter = False
                                                .VerticalAlignment = wdAlignVerticalTop
                                                .SuppressEndnotes = False
                                                .MirrorMargins = False
                                                .TwoPagesOnOne = False
                                                .BookFoldPrinting = False
                                                .BookFoldRevPrinting = False
                                                .BookFoldPrintingSheets = 1
                                                .GutterPos = wdGutterPosLeft
                                                
                                            End With
                                            
                                    ' Ora seleziono tutto il testo e lo formatto con il carattere/dimensione scelto
                                    
                                                Selection.WholeStory
                                                Selection.Font.Name = "Aptos"
                                                Selection.Font.Size = 3
                                                
                                    ' Questa è la parte dove aggiungo ad ogni nome file la chiamata alla utility di verifica compresi i parametri
                                    
                                                Righe = ActiveDocument.ComputeStatistics(wdStatisticLines)
                                                        Selection.HomeKey Unit:=wdStory
                                    
                                                For X = 1 To Righe
                                                    Selection.HomeKey Unit:=wdLine
                                                    Selection.TypeText Text:="D:\VerificaMKV\Verifica.exe --no-warn  """
                                                    Selection.EndKey Unit:=wdLine
                                                    Selection.TypeText Text:=""""
                                                    Selection.MoveDown Unit:=wdLine, Count:=1
                                                Next X
                                                    Selection.EndKey Unit:=wdStory
                                                    Selection.TypeParagraph
                                                    Selection.TypeText Text:="pause"
                                    
                                    ' Questa è la finalizzazione dove salvo un file bat che esegue la verifica per tutti i file
                                                           
                                            ActiveDocument.SaveAs ActiveDocument.Path & "\" & "Verifica.bat", FileFormat:=2
                                            ActiveDocument.Close
                                            Application.Quit
                                    
                                        End If
                                        
                                    End Sub

                                    Quando parte esce comunque la finestra di scelta codifica....

                                    #51293 Score: 0 | Risposta

                                    EmmePi
                                    Partecipante

                                      Per pura sfida personale, sto cercando anche questa modalità che hai citato anche se mi apre ad altri svariati problemi, non conoscendo quasi nulla di VBA...

                                      Ho modificato quella macro per far leggere la directory e scrivermi i nomi file nel foglio word, eccola:

                                      Sub dirlist()
                                      
                                      Const parentFolder As String = "D:\VerificaMKV\"
                                      
                                      Dim results As String
                                      
                                          results = CreateObject("WScript.Shell").Exec("CMD /C DIR """ & parentFolder & "*.mkv"" /W /B").StdOut.ReadAll
                                          Selection.TypeText results
                                      
                                      End Sub

                                      Il problema è che funziona nella directory dove si trova il documento word.

                                      Stavo cercando il modo di dire alla variabile parentFolder di prendere il path della directory dove sono attualmente.

                                      Quondi userei un file .bat che mi copio nella directory dove ci sono i file da esaminare che contiene il comando:

                                      "D:\VerificaMKV\VerificaMKV.doc"

                                      Nel file VerificaMKV.doc c'è la macro che legge la directory, che però dovrebbe essere quella da cui eseguo il file .bat

                                      Poi ovviamente la inserirei nella macro automatica riservata a solo questo documento. Infine penso che però questo non bypasserebbe il problema della codifica del testo...

                                      #51294 Score: 0 | Risposta

                                      vecchio frac
                                      Senior Moderator
                                        272 pts

                                        EmmePi ha scritto:

                                        Il problema è che funziona nella directory dove si trova il documento word.

                                        Non capisco questa frase. Il comando di shell che inizia con CMD /C ... restituisce il contenuto di parentFolder, da qualunque posizioni lanci il codice.

                                        EmmePi ha scritto:

                                        Stavo cercando il modo di dire alla variabile parentFolder di prendere il path della directory dove sono attualmente.

                                        CurDir?

                                        Comunque lo scopo di tutta questa operazione qual e'? Perche' alla fine tu hai esposto un problema di codifica del testo ma mi sembra che hai un problema diverso e forse facilmente risolvibile in altro modo (tu lanci un file Word ed esegui una macro all'apertura solo per ottenere un elenco di file contenuti in una directory... allora forse Word non ti serve nemmeno)

                                        #51302 Score: 0 | Risposta

                                        EmmePi
                                        Partecipante

                                          Ok, cerco di riassumere ciò che mi occorre.

                                          - Mi serve di esaminare file video .mkv per vedere che non abbiano problemi. Per questo esiste un programmino freeware in linea di comando che si chiama mkvalidator.exe e che ho rinominato Verifica.exe

                                          - La linea di comando in genere per un file è: Verifica.exe  --no-warn "nomefile.mkv"

                                          - I file, che possono essere da qualche unità fino ad un centinaio ed oltre, si trovano in una directory, che però non è sempre la stessa. Quindi o mi copio tutti i file necessari per la verifica nella directory dove sono i video da verificare, o questi file li metto in una sola directory e mi copio un solo file .bat dove sono i video.

                                          - Word ovviamente è necessario per aggiungere il testo ai nome file che mi ricavo da un comando dir, aggiungendo davanti la stringa Verifica.exe  --no-warn " + il nomefile.mkv + "

                                          Ho creato la macro che ti ho postato e che funziona in tutto e per tutto dal batch dos:

                                          dir *.mkv /W/B > "D:\VerificaMKV\VerificaMKV.doc"

                                          "D:\VerificaMKV\VerificaMKV.doc"

                                          "D:\VerificaMKV\Verifica.bat"

                                          - La prima riga legge i life .mkv nella directory e li scrive nel documento word che contiene la macro automatica (grazie ancora per l'aiuto nell'automazione per il documento specifico)

                                          - La seconda riga esegue il file word con la macro automatica che predispone tutti i nomi file aggiungendo il nome programma ed i parametri: Verifica.exe  --no-warn "nomefile.mkv" e scrive il secondo file .bat che contiene tot righe, una per ogli video da verificare.

                                          - La terza ed ultima riga esegue il .bat per fare la verifica dei file.

                                          Il problema si pone quando i nome dei file hanno le accentate e qualche altro carattere "strano". Quando sono presenti questi carattere in uno dei nomi all'apertura di VerificaMKV.doc mi presenta la finestra di dialigo:

                                          Spuntando "MS-DOS" la macro va avanti tranquillamente e tutto funziona. Ovviamente funziona tutto senza intervento se i caratteri accentati o strani non sono presenti.

                                          Io volevo appunto evitare in quei casi abbastanza frequenti di dover scegliere "a manetta" la codifica testo MS-DOS.

                                          Ovvio che solo un "surplus" che non inficia minimamente la funzionalità della macro e che fa perdere solo qualche secondo di tempo... Ma da informatico di lunga data, anche se inesperto di codice VBA , mi viene la "tigna" per un problema che dovrebbe per forza avere una soluzione...

                                          Poi l'altro STEP, ovvero quello di inserire nella macro anche il popolamento dei nome file, lo porto avanti in parallelo.

                                          #51320 Score: 0 | Risposta

                                          EmmePi
                                          Partecipante

                                            AGGIORNAMENTO   

                                            Ho risolto (quasi) il problema aggirando l'ostacolo. Con la macro automatica in pratica leggo i file in una directory (non era curdir), li scrivo sul documento, sostituisco i caratteri importati "male", aggiungo il collegamento del programmino di verifica ed i parametri, scrivo il file verifica.bat e fino a quì tutto benissimo. Il file .bat contiene tutte le righe per verificare i file in una determinata directory... solo che non riesco da VBA ad eseguirlo!   

                                            Questa la macro completa: 

                                            `Option Explicit
                                            
                                            Private Sub Document_Open()
                                            
                                                If ActiveDocument.Name Like "_VerificaMKV*" Then
                                                   
                                                    Dim Righe As Long
                                                    Dim X As Long
                                                    Dim Results As String
                                                    Dim ParentFolder As String
                                                    
                                             ' Qui setto i parametri del foglio word: Dimensioni e margini
                                            
                                                    With Selection.PageSetup
                                                        .LineNumbering.Active = False
                                                        .Orientation = wdOrientLandscape
                                                        .TopMargin = CentimetersToPoints(0.5)
                                                        .BottomMargin = CentimetersToPoints(0.5)
                                                        .LeftMargin = CentimetersToPoints(1.25)
                                                        .RightMargin = CentimetersToPoints(1.3)
                                                        .Gutter = CentimetersToPoints(0)
                                                        .HeaderDistance = CentimetersToPoints(1.25)
                                                        .FooterDistance = CentimetersToPoints(1.25)
                                                        .PageWidth = CentimetersToPoints(43.17)
                                                        .PageHeight = CentimetersToPoints(55.87)
                                                        .FirstPageTray = wdPrinterDefaultBin
                                                        .OtherPagesTray = wdPrinterDefaultBin
                                                        .SectionStart = wdSectionNewPage
                                                        .OddAndEvenPagesHeaderFooter = False
                                                        .DifferentFirstPageHeaderFooter = False
                                                        .VerticalAlignment = wdAlignVerticalTop
                                                        .SuppressEndnotes = False
                                                        .MirrorMargins = False
                                                        .TwoPagesOnOne = False
                                                        .BookFoldPrinting = False
                                                        .BookFoldRevPrinting = False
                                                        .BookFoldPrintingSheets = 1
                                                        .GutterPos = wdGutterPosLeft
                                                    Selection.Style = ActiveDocument.Styles("Nessuna spaziatura")
                                                                    
                                                    End With
                                                    
                                             ' Popolo il documento con la lista dei file
                                                    ParentFolder = ActiveDocument.Path & Application.PathSeparator
                                                    Results = CreateObject("WScript.Shell").Exec("CMD /C DIR """ & ParentFolder & "*.mkv"" /W /B").StdOut.ReadAll
                                                    Selection.TypeText Results
                                                
                                            ' Sostituisce tutti i caratteri con la corretta codifica MS-DOS
                                                
                                                With ActiveDocument.Content.Find
                                                     .Execute FindText:="…", ReplaceWith:="à", Replace:=wdReplaceAll
                                                     .Execute FindText:="···", ReplaceWith:="À", Replace:=wdReplaceAll
                                                     .Execute FindText:="·", ReplaceWith:="À", Replace:=wdReplaceAll
                                                     .Execute FindText:="Š", ReplaceWith:="è", Replace:=wdReplaceAll
                                                     .Execute FindText:="ÔÔÔ", ReplaceWith:="È", Replace:=wdReplaceAll
                                                     .Execute FindText:="Ô", ReplaceWith:="È", Replace:=wdReplaceAll
                                                     .Execute FindText:="", ReplaceWith:="ì", Replace:=wdReplaceAll
                                                     .Execute FindText:="ÞÞÞ", ReplaceWith:="Ì", Replace:=wdReplaceAll
                                                     .Execute FindText:="Þ", ReplaceWith:="Ì", Replace:=wdReplaceAll
                                                     .Execute FindText:="•", ReplaceWith:="ò", Replace:=wdReplaceAll
                                                     .Execute FindText:="ããã", ReplaceWith:="Ò", Replace:=wdReplaceAll
                                                     .Execute FindText:="ã", ReplaceWith:="Ò", Replace:=wdReplaceAll
                                                     .Execute FindText:=Chr(151), ReplaceWith:="ù", Replace:=wdReplaceAll
                                                     .Execute FindText:="ëëë", ReplaceWith:="Ù", Replace:=wdReplaceAll
                                                     .Execute FindText:="ë", ReplaceWith:="Ù", Replace:=wdReplaceAll
                                                     .Execute FindText:="", ReplaceWith:="ü", Replace:=wdReplaceAll
                                            '        .Execute FindText:="ššš", ReplaceWith:="Ü", Replace:=wdReplaceAll
                                            '        .Execute FindText:="š", ReplaceWith:="Ü", Replace:=wdReplaceAll
                                                     .Execute FindText:="‚", ReplaceWith:="é", Replace:=wdReplaceAll
                                                     .Execute FindText:="œ", ReplaceWith:="£", Replace:=wdReplaceAll
                                                     .Execute FindText:="‡", ReplaceWith:="ç", Replace:=wdReplaceAll
                                                     .Execute FindText:="ø", ReplaceWith:="°", Replace:=wdReplaceAll
                                                     .Execute FindText:="õ", ReplaceWith:="§", Replace:=wdReplaceAll
                                                End With
                                            
                                            ' Ora seleziono tutto il testo e lo formatto con il carattere/dimensione scelto
                                            
                                                        Selection.WholeStory
                                                        Selection.Font.Name = "Arial"
                                                        Selection.Font.Size = 3
                                                        
                                            ' Questa è la parte dove aggiungo ad ogni nome file la chiamata alla utility di verifica compresi i parametri
                                            
                                                        Righe = ActiveDocument.ComputeStatistics(wdStatisticLines)
                                                            Selection.HomeKey Unit:=wdStory
                                            
                                                        For X = 1 To Righe
                                                            Selection.HomeKey Unit:=wdLine
                                                            Selection.TypeText Text:="C:\_DATI_\Verifica.exe --no-warn  """ & ParentFolder
                                                            Selection.EndKey Unit:=wdLine
                                                            Selection.TypeText Text:=""""
                                                            Selection.MoveDown Unit:=wdLine, Count:=1
                                                        Next X
                                                            Selection.EndKey Unit:=wdStory
                                                            Selection.TypeParagraph
                                                            Selection.TypeText Text:="pause"
                                            
                                            ' Questa è la finalizzazione dove salvo un file bat che esegue la verifica per tutti i file
                                                                   
                                                    ActiveDocument.SaveAs "C:\_DATI_\Verifica.bat", FileFormat:=2
                                                    Shell ("C:\_DATI_\Verifica.bat")
                                                    ActiveDocument.Close
                                                    Application.Quit
                                            
                                                End If
                                                
                                            End Sub`

                                            Non chiedermi come mai nel codice dove sostituisco i caratteri ci sono a volte due occorrenze per lo stesso carattere. Ho visto che una lettera se importata a fine nome file prima del punto .mkv viene riportata con 3 caratteri strani es. ÞÞÞ mentre se è all'interno della stringa del nomefile ne importa uno solo Þ
                                            Inoltre la "è" minuscola la traduce sempre in maiuscolo È e la Ü maiuscola non c'è modo di tradurla...

                                            Per eseguire il file Verifica.bat ho provato l'istruzione:  Shell ("C:\_DATI_\Verifica.bat")

                                            Ma non va bene, francamente sono ad un punto morto in dirittura di arrivo.

                                            #51321 Score: 0 | Risposta

                                            EmmePi
                                            Partecipante

                                              EUREKA!

                                              Trovato in rete il codice giusto, era leggermente differente:

                                              Shell "cmd /k C:\_DATI_\Verifica.bat"

                                              Ora funziona tutto a dovere.   

                                               

                                               

                                            Login Registrati
                                            Stai vedendo 21 articoli - dal 1 a 21 (di 21 totali)
                                            Rispondi a: WORD 365 – Macro autorun.
                                            Gli allegati sono permessi solo ad utenti REGISTRATI
                                            Le tue informazioni: