Macro (informatica): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m ha spostato Macro a Macro (informatica): esistono voci omonime, la voce "Macro" potrebbe diventare una pagina disambigua
Funzionalità collegamenti suggeriti: 2 collegamenti inseriti.
 
(93 versioni intermedie di 54 utenti non mostrate)
Riga 1:
{{F|programmazione|ottobre 2012}}
{{nota disambigua|la fotografia macro|[[Macrofotografia]]}}
In [[informatica]], il termine '''macro''' sta ad indicare una [[subroutine|procedura]], ovvero un "insieme" o "blocco" di [[istruzione (informatica)|comandi]] o [[istruzione (informatica)|istruzioni]], tipicamente ricorrente durante l'[[Esecuzione (informatica)|esecuzione]] di un [[programma (informatica)|programma]]. Una macro è concettualmenteConcettualmente molto simile ad una [[funzione (informatica)|funzione]], ovvero può essere richiamata da eventi ed essere parametrizzata., Lapermettendo macro[[riuso puòdi anchecodice]], essereun definitaanalogo comeconcetto unin insiemeambito [[sistemista|sistemistico]] è quello di comandi[[script|shell script]].
{{nota disambigua|il personaggio di ''[[One Piece]]''|[[Personaggi di One Piece#Macro|Personaggi di One Piece]]}}
In [[informatica]], il termine '''macro''' sta ad indicare una [[procedura]] ricorrente durante l'esecuzione di un [[programma (informatica)|programma]]. Una macro è concettualmente molto simile ad una [[funzione (informatica)|funzione]], può essere richiamata da eventi ed essere parametrizzata. La macro può anche essere definita come un insieme di comandi.
 
LeConsente macro consentonodunque di ottenereeseguire una serie o blocco di operazioni/istruzioni con l'invio di un solo comando., riutilizzabili ed utili ad "automatizzare" su richiesta compiti più complessi delle singole istruzioni; Alcunialcuni programmi hanno all'interno la capacità di creare/registrare ed eseguire macro,; in alternativa esistono [[software]] di automazione che consentono di realizzare macro a livello superiore, e quindi per tutti i programmi che non le prevedono. Il concetto originario di macro non prevede l'uso diIn un [[linguaggiofoglio di programmazionecalcolo]], trattandosialcune di una sempliceoperazioni registrazionetipiche di una seriemacro disono comandiinserimento/eliminazione giàdi disponibilerighe/colonne, all'internoformattazione del [[software]].testo/numero Evolvendosie nella forma attualecolore, lecopia-incolla macrodi hanno acquisito unvalori, linguaggioesecuzione di programmazionefunzioni (es:come [[Visualle Basic|VBA]])somme, con tantoimpostazioni di [[strutturastampa condizionale|strutturee condizionali]]salvataggio (If... Then... Else...),del ''[[subroutinefile]], dialogo con l'utilizzatore attraverso finestre per l'introduzione di dati, raggiungendo un'efficienza molto maggiore, ma anche maggiore complessità nella loro stesura.
 
Il concetto originario di "macro" non prevede l'uso di un [[linguaggio di programmazione]], trattandosi di una semplice registrazione di una serie di comandi già disponibile all'interno del [[software]]; evolvendosi nella forma attuale, le macro hanno acquisito un linguaggio di programmazione (es. [[Visual Basic|VBA]]), con tanto di [[Selezione (informatica)|strutture condizionali]] (If... Then... Else...), [[subroutine]], dialogo con l'utilizzatore attraverso finestre per l'introduzione di dati, raggiungendo un'efficienza molto maggiore, ma anche maggiore complessità nella loro stesura.
In un [[foglio di calcolo]], alcune operazioni tipiche di una macro sono inserimento/eliminazione di righe/colonne, formattazione del testo/numero e colore, copia-incolla di valori, esecuzione di funzioni come le somme, impostazioni di stampa e salvataggio del ''file''.
 
== Livelli di esecuzioneDescrizione ==
=== Livelli di esecuzione ===
La macro può essere salvata a livello di singolo foglio di lavoro, tutte le cartelle di lavoro aperte, qualsiasi file Excel/open office. In quest'ultimo caso, la macro deve essere salvata nella cartella di avvio del programma (XLStart/PERSONAL.XLS, ovvero Open Office/Avvio).
 
Se la macro è salvata nel codice del singolo foglio di lavoro è una ''private subroutine'', non visibile nell'elenco di macro presente nel file, ed è un tipo di macro ad evento, eseguita ogni volta che si apre il foglio di lavoro cui è associata.
 
Se ad esempio si desidera avere un indice dinamico dei fogli di lavoro presenti in un ''file'' Excel, dovrà essere associata a un foglio di lavoro di nome "Index" una macro che crea un indice dei fogli di lavoro: in pratica, per avere un indice dinamico si utilizza una macro ''ad evento'', salvata nel foglio di lavoro, che crea un comune indice statico.
 
=== Eseguire una macroEsecuzione su una selezione corrente di celle ===
Il codice di una macro non necessariamente si riferisce a una determinata riga, colonna o intervallo di celle, e può essere tale da venire eseguito sulla selezione corrente, che viene effettuata prima di laciarelanciare la macro. Se ad esempio l'utente desidera eseguire la macro sulla colonna N, la riga 1 o l'invervallo di celle "A2:N20", è sufficiente che evidenzi col ''mouse'' queste aree del foglio, prima di lanciare la macro, che sarà appunto eseguita sull'ultima selezione corrente di celle.
 
Per ottenere istruzioni di questo tipo con il registratore di macro, è sufficiente selezionare le aree di interesse ''prima'' di iniziare la registrazione di macro, e subito dopo lanciare la registrazione. Il registratore genera codice del tipo: "Selection.Copy", "selection.Autofilter", "Selection.Delete".
 
Per selezionare l'ultima cella attiva sopra, sotto, a destra o sinistra di quella corrente, si utilizzano le proprietà del metodo "End": "xlUp", "xldown", "xlToRight", "xlToLeft". Per selezionare le celle di un intervallo di dimensione variabile si utilizzautilizzano l'istruzione:questi riferimenti con istruzioni del tipo:
 
:<pre>Range(Selection, Selection.End(xlDown)).Select</pre>.
 
QuetaQuesta istruzione indica gli estremi dell'intervallo da selezionare, da una parte la cella selezionata dal cursore e dall'altra l'ultima cella attiva (con valori o formule) fra quelle al di sotto della selezione corrente. Per selezionare l'ultima cella attiva sopra, a destra o sinistra di quella corrente, si utilizzano le proprietà del metodo "End": "xlUp", "xlToRight", "xlToLeft". Per ottenere la selezione di più colonne, è sufficiente selezionare un intervallo di celle, anziché una singola cella, prima di lanciare la macro.
 
Se l'area da selezionare dipende da altri intervalli di celle, si utilizza una variante del tipo:
 
:<pre>Range(Selection, Range("A1:B65536B" & (Range("A1").End(xlDown).Row))).Select</pre>.
 
che seleziona l'intervallo iniziale e l'intervallo da A1 alla colonna B in corrispondenza della riga dove si trova l'ultima cella non vuota sotto A1.
 
Per selezionare le celle sottostanti una colonna (es. la colonna 1) oggetto di filtro dati:<br/>
== Anonimizzazione delle macro ==
<pre>ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Select</pre>
La macro può essere resa indipendente dal nome del file e dei fogli di lavoro, sostituendo a questi istruzioni del tipo: ''ActiveSheet.Select"'' o ''"ActiveSheet.Add"''. Diversamente, se la macro è eseguita su un foglio di lavoro o file con nome diverso da quello registrato nel codice, l'esecuzione restituisce un messaggio di errore.
 
=== Annidamento di macro ===
È possibile "annidare" le macro, in modo che una macro ne esegua un'altra registrata in precedenza. Il registratore, sia di Excel che di Open Office, tiene conto dei passaggi del ''mouse'' nei menu, fra i quali in "macro / registra nuova macro".
 
=== Estensione della macro a tutti i fogli di lavoro ===
Sia in Excel che in Open Office Calc tutti i servizi di sistema possono essere eseguiti per singolo foglio di lavoro.
 
I servizi di sistema sono quelli richiamabili all'esterno del foglio di lavoro, come quelli dei menu "File", "Modifica", "Dati", "Strumenti". Il programma consente di selezionare più fogli di lavoro (CTRL + Sheet), ma esegue questi servizi solo per il foglio corrente, non permette di stampare, mettere dei filtri o "Modifica /sostituisci con" su una selezione di fogli di lavoro.
 
Per fare ciò, occorre una macro che contenga i comandi da eseguire, e una seconda macro che la richiama tramite il costrutto "For Each..Next" (oppure "For N=1 To WorkSheets.Count", seguito da "Sheets(N). Activate!" oppure "Application.GoTo ActiveWorkbook.Sheets(N).Range("A1:C20")" e l'istruzione che si desidera eseguire su un ciclo di fogli), eseguendola su tutti i fogli di lavoro del ''file'' corrente. Il codice è di questo tipo:
 
<pre>
Sub For_Each()
 
Dim mySheets As Worksheet 'mySheets è un foglio di lavoro e WorkSheet il file corrente
 
For Each mySheets In Worksheets
 
mySheets.Select
Riga 57 ⟶ 60:
</pre>
 
oppure , in modo molto più compatto:
<pre>
Sub Esecuzione_Macro_File_Excel()
ActiveWorkbook.Application.Run "PERSONAL.XLS!Macro 1" 'Esegue la Macro per tutti i fogli del file corrente
End Sub
</pre>
 
Con le seguenti istruzioni si possono disabilitare i messaggi di errore, continuare l'esecuzione della macro, minimizzare la gestione grafica di Excel che in alcuni casi potrebbe rallentare i tempi di esecuzione della macro (al prezzo di non visualizzare e controllare a terminale le celle oggetto di elaborazione):
== Estensione della macro a file diversi da quello di registrazione ==
 
<pre>
[[ca: Sub Macro]]()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False
AllowUdfs = False 'disabilita le User Defined Function eventualmente presenti nella cartella
Application.Calculation = xlAutomatic 'imposta il calcolo formule da Automatico a Manuale
On Error Resume Next
[...]
</pre>
 
Il codice viene poi concluso con le istruzioni "opposte", che ripristinano le impostazioni predefinite:
 
:<pre>
[...]
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
</pre>
 
=== Estensione della macro a file diversi da quello di registrazione ===
Tramite il percorso "File/Apri"o "File/cerca" la macro può eseguire operazioni su file che non sono aperti al momento del lancio della macro. La macro trova il file, lo apre ed esegue i comandi registrati.
 
=== Macro su date ===
Per eseguire un filtro, formula o procedura su una cella di tipo "Data", senza modificarne il formato europeo, occorre che i dati siano separati dal segno "*".
 
Diversamente, la macro porta la data nel formato americano del tipo "mm/g/aaaa", con i mesi che precedono i giorni. Ciò crea problemi nell'esecuzione di tutta una serie di funzioni, a partire dall'estrazione del mese o dell'anno contenuti nella data.
 
=== Macro ada evento ===
SI parla di macro ad evento quando la macro viene eseguita dopo aver compiuto certe azioni sul foglio di calcolo, come cliccare un bottone, aprire un certo foglio o file Excel.
 
Se la macro è associata all'apertura di un foglio di calcolo, deve iniziare come "Private Subroutine" ed essere copiata nel codice della pagina (etichetta del foglio di lavoro, tasto destro del ''mouse'', ''Visualizza codice sorgente'').
 
Utilizzando la barra per VBA, la macro si trova nella cartella moduli della pagina in oggetto. Facendo riferimento alla [[programmazione a oggetti]], la macro a evento è trattata come un metodo dell'oggetto foglio di calcolo.
 
Una macro simile serve ad esempio a creare indice ''dinamico'' dei fogli presenti in un certo ''file'': aprendo il foglio "Indice", se altri fogli sono stati rinominati o eliminati, la macro aggiornerà il contenuto di conseguenza.
 
=== Anonimizzazione delle macro ===
La macro può essere resa indipendenteutile dal nomesignificato del file e dei fogli di lavoro, sostituendo a questi istruzioni del tipo: ''ActiveSheet.Select"'' o ''"ActiveSheet.Add"''. Diversamente, se la macro è eseguita su un foglio di lavoro o file con nome diverso da quello registrato nel codice, l'esecuzione restituisce un messaggio di errore.
 
== Software ==
Per quanto detto in precedenza, macro e tabelle pivot sono strumenti di largo utilizzo nei fogli di calcolo, implementati da programmi quali [[Excel]] e [[Open Office Calc]].
 
Tutti i programmi della ''suite'' office e Open Office hanno un motore interno per la registrazione ed esecuzione di macro.
 
L'integrazione fra programmi dello stesso pacchetto avviene anche sotto l'aspetto delle macro: è possibile, ad esempio, registrare una macro in Microsoft Access che opera con dei file Excel, e restituisce un output testuale su Word.
 
Esistono, inoltre, editor di macro, programmi dedicati che lavorano con file di decine di programmi appartenenti a pacchetti proprietari e open-source differenti: ad esempio, [[AutoHotkey]], [[AutoIt]], [[iMacros]], [[Macro Mate]] e [[AutoMate]].
 
=== Microsoft ExcelOffice ===
[[Microsoft Office]] consente l'esecuzione di macro all'interno di un singolo file o aprendo file salvati con i programmi [[Outlook]], [[Microsoft Word|Word]], [[Microsoft Excel|Excel]], [[Powerpoint]], [[Publisher]], [[Microsoft Access|Access]]. L'integrazione in pratica è disponibile per i programmi del pacchetto Office, e tramite [[Internet Explorer]] all'elaborazioni di dati pubblicati da altri applicativi nel web. Il registratore di macro è un [[editor grafico]], che genera un codice [[Visual Basic]], in base ai movimenti del ''mouse'' e alle stringhe digitate da tastiera. È possibile associare la macro ad un bottone che la richiama, e a un comando breve da tastiera (es. digitando "Alt+F5"), e salvarla a diversi livelli, per il file in uso, per una cartella di file oppure all'avvio di un programma di Office.
 
Dalla [[Office 2007|versione 2007]], è possibile associare un commento alla macro e inserire parti di testo esplicative e non eseguibili all'interno del codice VB. È corretto un baco[[bug]] per il quale una macro non era automaticamente eseguita sul foglio [[Microsoft Excel|Excel]] nel quale è posizionato il riferimento cella, cosa che rendeva talune macro difficilmente estendibili ad un intero foglio [[Microsoft Excel|Excel]], ad un insieme di [[Lucido|lucidi]]diapositive di Powerpoint e simili. Inoltre, i riferimenti relativi rendono meno onerosa la manutenzione del codice generato, ed evitano di dover risistemare il codice della macro ad ogni cambiamento di nome del file o dei fogli [[Microsoft Excel|Excel]], e all'organizzazione del foglio, con aggiunta di righe/colonne o spostamento dei contenuti di interesse per la macro.
 
=== Star Office ===
Riga 99 ⟶ 127:
 
=== Open Office ===
Open Office contiene un ''[[application programming interface]]'' che consente la registrazione/compilazione manuale e l'esecuzione di macro in differenti linguaggi di programmazione, fra i quali: [[C++]], [[Java (linguaggio di programmazione)|Java]], [[Python]], [[CLI]], StarBasic, [[JavaScript]], [[Object Linking and Embedding|OLE]].
 
Open Office non possiede un ambiente di programmazione per il VBA di Microsoft, e non è compatibile con questo linguaggio. Esistono delle versioni del programma che permettono una conversione fra il codice VBA e Star Office.
 
Le macro di Open Office possono operare con una varietà molto più ampia di file, rispetto ad Excel 2007. Durante registrazione, dal menu File/Apri (e in Excel da "File/Cerca file") si richiamano i file con i quali si intende eseguire delle operazioni. Il registratore scriverà il codice necessario sia per il file di partenza, nel quale si è avviata la registrazione della macro, che per tutti quelli aperti con tale modalità. Le estensioni compatibili in OpenOffice includono immagini, file [[AutoCAD|AutoCad]], molti programmi di testo, i file Notepad (non importabili in una macro Excel) che sono una frequente via di comunicazione di dati fra applicazioni proprietarie. Le macro Openoffice operano anche con file Microsoft Office, mentre al solito non esiste un'interoperabilità in senso opposto. Il [[compilatore]] Macro di Excel è molto più veloce e stabile.
 
=== LibreOffice ===
[[LibreOffice]] introduce, rispetto a Open Office (da cui deriva) il supporto alle macro VBA: questo rende compatibili con il software le macro sviluppate con Microsoft Office.
 
Resta il supporto ai linguaggi di programmazione supportati da Open Office.
 
=== Interoperabilità delle macro ===
Riga 110 ⟶ 143:
Per farlo, occorre riscrivere il codice delle macro di origine nel linguaggio di programmazione utilizzato dal programma di destinazione per le macro: ciò può essere fatto manualmente o con ricompilatori automatici, interni o esterni ai programmi interessati.
 
[[Novell]] e [[Sun Microsystems]] hanno rilasciatoreso disponibile, con la collaborazione di Microsoft, una versione dei propri programmi Open Office e Star Office compatibili con Microsoft Office, almeno per alcune funzionalità. I due programmi hanno una funzionalità che converte il codice VBA delle macro Excel nel proprio linguaggio di programmazione <ref>[http://punto-informatico.it/1893852/PI/News/vba-openoffice-grazie-novell-sun.aspx PI: VBA in OpenOffice grazie a Novell e Sun<!-- Titolo generato automaticamente -->]</ref>. Invece, Microsoft Excel non contiene funzionalità per l'esecuzione di macro di Open office o Star Office.
 
Esistono anche dei ricompilatori automatici per passare da VBA a [[StarBasic]] e viceversa, e avere il codice necessario per eseguire la macro nel nuovo programma.
Riga 121 ⟶ 154:
* [[Object Linking and Embedding]]
* [[Office automation]]
**[[iMacros]]
**[[AutoHotkey]]
* [[Paradigma di programmazione]]
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* [http://xoomer.virgilio.it/abcba/Esempi%20VBA.html Macro Excel: Manuale per principianti]
* {{FOLDOC||macro}}
[[Categoria:Teorie della programmazione]]
* [{{cita web|http://xoomer.virgilio.it/abcba/Esempi%20VBA.html |Macro Excel: Manuale per principianti]}}
 
{{Controllo di autorità}}
{{portale|informatica}}
 
[[Categoria:TeorieConcetti delladi programmazione]]
[[ar:ماكرو]]
[[ca:Macro]]
[[cs:Makro (software)]]
[[de:Makro]]
[[en:Macro (computer science)]]
[[es:Macro]]
[[et:Makro]]
[[fi:Makro]]
[[fr:Macro-définition]]
[[he:מאקרו (תכנות)]]
[[hi:मैक्रो (सॉफ्टवेयर)]]
[[ja:マクロ (コンピュータ用語)]]
[[ko:매크로 (컴퓨터 과학)]]
[[nl:Macro (software)]]
[[pl:Makro]]
[[pt:Macro]]
[[ro:Macrosubstituție]]
[[ru:Макрос]]
[[sv:Makro (datateknik)]]
[[tr:Makrolar]]
[[uk:Макрос]]
[[zh:宏]]