Web Analytics Blog di Laura Ciccarese

Blog di Laura Ciccarese

Office: un mondo da scoprire! Approfondimenti, Automation, VBA e altro ancora...
Personalizzare il Ribbon con VBA

Questo esempio risponde ad una specifica richiesta ad un post precedente e mi permette di affrontare un argomento leggermente diverso da quelli visti finora: la personalizzazione del Ribbon a livello di documento (document-level) e non a livello di applicazione.

Il quesito era: "Come posso personalizzare il Ribbon di un file di Excel facendo in modo che ci siano solo le mie schede, che per gli altri file il Ribbon torni ad essere quello standard e utilizzando VBA?".

Ecco la risposta.

 

Creazione del file xml con la struttura del Ribbon

Il nostro esercizio prevede una scheda personalizzata con due gruppi di funzionalità; nel primo gruppo ci sono due comandi per l'ordinamento di un elenco; nel secondo gruppo un comando per la trasformazione di formule in valori. Il file di esempio si chiama ExcelCustomRibbonVBA.xlsm e lo trovate in allegato.

La struttura del ribbon deve essere contenuta in un file xml che potete scrivere con un normale editor di testi o con un apposito editor XML. In alternativa, se avete fatto delle prove con Visual studio o avete scaricato gli allegati ai post precedenti, potete utilizzare un file Ribbon.xlm e modificarlo.

Dopo aver creato il file:

  • assegnarvi il nome customUI.xml;
  • salvarlo all'interno di una cartella di nome customUI, da posizionare, ad esempio, sul desktop.

il contenuto del file xml è il seguente:

------------------------------------------------------------------------------------------------------------------------------

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" >

<ribbon startFromScratch ="true">

<tabs>

<tab id="FunctionsTab"

label="Funzioni personalizzate">

<group id="RangeFunctionsGroup"

label="Funzioni di intervallo">

<button id="OrdinaPerProdotto"

size="large"

label="Ordina per prodotto"

screentip="Seleziona l'intervallo a partire dalla cella corrente e ordina per prodotto"

onAction="ThisWorkbook.MyFunctions"

imageMso="AddressBook"/>

<button id="OrdinaPerAgente"

label="Ordina per agente"

size ="large"

screentip="Seleziona l'intervallo a partire dalla cella corrente e ordina per agente"

onAction="ThisWorkbook.MyFunctions"

imageMso="PropertySheet" />

</group>

<group id="GeneralFunctionsGroup"

label="Funzioni del foglio">

<button id="TrasformaInValori"

size="large"

label="Trasforma formule in valori"

screentip="Trasforma in valori le formule contenute nell'intervallo selezionato"

onAction="ThisWorkbook.MyFunctions"

imageMso="Paste" />

</group>

</tab>

</tabs>

</ribbon>

</customUI>

------------------------------------------------------------------------------------------------------------------------------

Nascondere le schede standard del Ribbon

L'attributo del ribbon startFromScratch ="true" fa sì che le schede predefinite del Ribbon vengano nascoste per lasciare posto solo a quelle personalizzate.

Callback VBA

In questo caso, le callback del del ribbon puntano alla subroutine MyFuncions contenuta nella cartella di lavoro, nel modulo ThisWorkbook: onAction="ThisWorkbook.MyFunctions"

Subroutine MyFunction

  • Creare un file di excel con l'estensione xlsm, che abilita il salvataggio delle macro;
  • aprire il foglio di codice ThisWorkbook e creare la sub MyFunction che eseguirà le diverse operazioni in corrispondenza dell'ID del comando chiamato dal ribbon:

 

Sub MyFunctions(ByVal myControl As IRibbonControl)
Dim myRng As Range
Select Case myControl.ID
Case "OrdinaPerProdotto"
Set myRng = Range("A1").CurrentRegion
myRng.Sort Range("B:B"), , , , , , , xlYes
Case "OrdinaPerAgente"
Set myRng = Range("A1").CurrentRegion
myRng.Sort Range("A:A"), , , , , , , xlYes
Case "TrasformaInValori"
Set myRng = Selection
myRng.Copy
myRng.PasteSpecial xlPasteValues
End Select
End Sub

  • salvare il file sul desktop e chiudere

Collegare il file customUI.xml al file di Excel

Per far sì che il file di Excel applichi la struttura personalizzata del nuovo ribbon, è necessario eseguire le seguenti operazioni:

  • modificare l'estensione del file di excel con .zip;
  • aprire il pacchetto e trascinarvi la cartella customUI contenente il file xml;
  • aprire la cartella _rels e trascinare il file .rels sul desktop per apportare la modifica necessaria al collegamento tra il file di excel e il nuovo ribbon;
  • nel file .rels, prima della chiusura delle Relationship, inserire la riga in grassetto:

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>

<Relationship Id="customUIRelID" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml"/>

</Relationships>

 

Osservazione.

L'attributo Target è uguale al nome del file xml preceduto dalla cartella che lo contiene.

 

  • salvare e chiudere il file.rels;
  • trascinare nuovamente il file.rels nella cartella di orginie;
  • chiudere il pacchetto zip e ripristinare l'estensione xlsm;
  • aprire il file di excel così modificato ed ecco il risultato:

ExcelCustomRibbonVBA01

Come sempre, in allegato trovate il file completo e il file customUI.xml

 

Ciao a tutti

Laura

Word Custom Ribbon: aggiungere un'intestazione di pagina

Oggi proseguiamo con la personalizzazione del ribbon di Word, aggiungendo un comando che permette di inserire o aggiornare l'intestazione di pagina del documento corrente.

L'esempio si basa sulle applicazioni descritte nel post precedente, Word Custom Ribbon: modifica stile, alle quali apporteremo le seguenti modifiche:

  • aggiungere un comando alla struttura del Ribbon.xml;
  • assegnare la dimensione massima al comando;
  • aggiungere la funzionalità relativa nel foglio ThisAddin.cs o ThisAddin.vb;
  • aggiungere la chiamata alla nuova funzionalità nella regione delle callbacks nel Ribbon.cs o Ribbon.vb.

Ribbon.xml

<button id ="aggiungiIntestazione01"

                              label ="Intestazione ufficiale"

                              screentip="aggiunge o aggiorna l'intestazione di pagina per la documentazione ufficiale"

                              size ="large"

                              onAction ="MyFunctions"

                              imageMso ="HeaderFooterEditHeader"/>

 

ThisAddin.cs

public void aggiungiIntestazione01()

        {

            //impostiamo la variabile per il documento attivo

            Word.Document myDoc = Application.ActiveDocument;

            //impostiamo la variabile per l'intestazione di pagina

            Word.HeaderFooter myHeader = myDoc.Sections[1].Headers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary];

            try

            {

           

                //inseriamo e formattiamo l'intestazione di pagina

               

                //inseriamo il nome del file completo di percorso (attenzione: se il documento

                //non è ancora stato salvato, il nome del percorso non sarà disponibile:

                if (myDoc.Saved == true)

                    myHeader.Range.Text = "Documento ufficiale - File:" + myDoc.Path + "'\'" + Application.ActiveDocument.Name;

                else

                    myHeader.Range.Text = "Documento ufficiale - File:" + Application.ActiveDocument.Name;

                    myHeader.Range.Font.Name = "Bauhaus 93";

                    myHeader.Range.Font.Size = 9;

                    myHeader.Range.Font.Color = Word.WdColor.wdColorGray70;

                    myHeader.Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                    myHeader.Range.Underline = Word.WdUnderline.wdUnderlineThick;

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.ToString());

            }

 

        }

 

Ribbon.cs

public void MyFunctions(Office.IRibbonControl control)

        {

        //chiamata alle diverse funzioni corrispondenti ai diversi comandi del ribbon

        //attualmente esiste un solo comandoswitch (control.Id)

            switch(control.Id)

            {

                case "FormattaTitolo1":

                    Globals.ThisAddIn.FormattaTitolo1();

                    break;

                case "aggiungiIntestazione01":

                    Globals.ThisAddIn.aggiungiIntestazione01();

                    break;

                default:

                  // aggiungere codice per altre funzioni

                    break;

            }

      

        }

 

ThisAddin.vb

public void aggiungiIntestazione01()

        {

            //impostiamo la variabile per il documento attivo

            Word.Document myDoc = Application.ActiveDocument;

            //impostiamo la variabile per l'intestazione di pagina

            Word.HeaderFooter myHeader = myDoc.Sections[1].Headers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary];

            try

            {

           

                //inseriamo e formattiamo l'intestazione di pagina

               

                //inseriamo il nome del file completo di percorso (attenzione: se il documento

                //non è ancora stato salvato, il nome del percorso non sarà disponibile:

                if (myDoc.Saved == true)

                    myHeader.Range.Text = "Documento ufficiale - File:" + myDoc.Path + "'\'" + Application.ActiveDocument.Name;

                else

                    myHeader.Range.Text = "Documento ufficiale - File:" + Application.ActiveDocument.Name;

                    myHeader.Range.Font.Name = "Bauhaus 93";

                    myHeader.Range.Font.Size = 9;

                    myHeader.Range.Font.Color = Word.WdColor.wdColorGray70;

                    myHeader.Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                    myHeader.Range.Underline = Word.WdUnderline.wdUnderlineThick;

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.ToString());

            }

 

        }

 

Ribbon.vb

Public Sub myFunctions(ByVal control As Office.IRibbonControl)

        'chiamata alle diverse funzioni corrispondenti ai diversi comandi del ribbon

        'attualmente esiste un solo comando

        Select Case control.Id

            Case "FormattaTitolo1"

                Globals.ThisAddIn.FormattaTitolo1()

            Case "aggiungiIntestazione01"

                Globals.ThisAddIn.aggiungiIntestazione01()

            Case Else

                'aggiungere codice per altre funzioni

        End Select

 

    End Sub

 

 

Ecco il risultato:

WordCustomRibbon03

 

Se il documento non è ancora stato salvato, nell'intestazione verrà inserito solo il nome geerico Documento1 e non il percorso:

WordCustomRibbon04

 

Se il documento è stato salvato, nell'intestazione verrà inserito il nome del file e il percorso completo:

WordCustomRibbon

 

Come al solito, in allegato trovate le due applicazioni.

Ciao a tutti

Laura

Evento su Asp.Net

Il 14 Maggio a Firenze si terrà un evento gratuito su Asp.Net e AJAX nel quale si prevedono poche slides e molta pratica Yes.

Se siete interessati, leggete il post di Emanuele Mattei:

http://blog.shareoffice.it/emanuele/archive/2007/04/19/8995.aspx

Ciao a tutti

Laura

Posted: Apr 20 2007, 09:53 AM by laura | with no comments
Filed under:
Word Custom Ribbon: modifica stile

Oggi vediamo un primo esempio sulla personalizzazione del Ribbon di Word 2007, con la creazione di una scheda aggiuntiva contenente, per il momento, un comando che modifica lo stile Titolo 1 nell'intero documento.

Le operazioni da eseguire sono molto simili a quelle già eseguite per Excel e descritte nei post precedenti, che riassumo sinteticamente:

  • aprire Visual Studio 2007 e creare un Word addin (in C# o Visual Basic);
  • aggiungere un item di tipo RibbonSupport che creerà la classe Ribbon1.cs (Ribbon1.vb per visual basic) e il file di struttura Ribbon1.xml (comune ad entrambi i linguaggi);
  • sostituire la struttura del Ribbon1.xml con la seguente:

Ribbon1.xml

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="OnLoad">

<ribbon startFromScratch ="false">

<tabs>

<tab id="MenùAzienda"

label="Menù aziendale VB">

<group id="FormatoCarattere"

label="Formati carattere">

<button id ="FormattaTitolo1"

size ="normal"

label ="Formatta Titolo 1"

screentip ="Formatta il testo con stile Titolo 1"

supertip ="Porta lo stile Titolo 1 a 16 punti,carattere Arial Black, grassetto e corsivo"

onAction = "myFunctions"

imageMso ="ChangeStylesMenu"/>

</group>

</tab>

<tab idMso ="TabHome">

<group idMso="GroupFont" >

<comboBox idMso ="fontSize" visible ="false"/>

</group>

</tab>

</tabs>

</ribbon>

</customUI>

  • attivare il codice commentato (indicato con il commento TODO), nella classe Ribbon1.cs (e analogamente nella classe Ribbon1.vb)
  • aggiungere la callback myFunctions nella regione delle callbacks del file Ribbon1.cs (e Ribbon1.vb):

C#

#region Ribbon Callbacks

public void MyFunctions(Office.IRibbonControl control)

{

//chiamata alle diverse funzioni corrispondenti ai diversi comandi del ribbon

//attualmente esiste un solo comandoswitch (control.Id)

switch(control.Id)

{

case "FormattaTitolo1":

Globals.ThisAddIn.FormattaTitolo1();

break;

default:

// aggiungere codice per altre funzioni

break;

}

}

#endregion

VB

#Region "Ribbon Callbacks"

Public Sub myFunctions(ByVal control As Office.IRibbonControl)

'chiamata alle diverse funzioni corrispondenti ai diversi comandi del ribbon

'attualmente esiste un solo comando

Select Case control.Id

Case "FormattaTitolo1"

Globals.ThisAddIn.FormattaTitolo1()

Case Else

'aggiungere codice per altre funzioni

End Select

End Sub

#End Region

  • creare il metodo per l'esecuzione della funzionalità nella classe ThisAddin.cs (ThisAddin.vb per Visual Basic):

C#

public void FormattaTitolo1()

{

try

{

//impostiamo la variabile per il documento attivo

Word.Document myDoc = Application.ActiveDocument;

//impostiamo la variabile oggetto per passare il nome dello stile

object styleName = "Titolo 1";

//impostiamo la variabile per lo stile Titolo 1

Word.Style myStyle = myDoc.Styles.get_Item(ref styleName);

//impostiamo la variabile booleana

Boolean updAutom = false;

//rileviamo l'impostazione della proprietà "aggiorna automaticamente" dello stile Titolo 1

//in modo da poterla impostare a true prima di effettuare le modifiche

//e poterla poi riportare al valore precedente al termine delle modifiche

updAutom = myStyle.AutomaticallyUpdate;

//impostiamo a true l'aggiornamento automatico

myStyle.AutomaticallyUpdate.Equals(true);

//apportiamo le modifiche necessarie allo stile Titolo 1

myStyle.Font.Size = 22;

myStyle.Font.Name = "Tahoma";

myStyle.Font.Color = Word.WdColor.wdColorDarkRed;

myStyle.Font.Bold = 1;

myStyle.Font.Italic = 0;

//assegnamo un bordo inferiore al paragrafo

myStyle.ParagraphFormat.Borders[Word.WdBorderType.wdBorderBottom].LineStyle = Word.WdLineStyle.wdLineStyleSingle;

myStyle.ParagraphFormat.Borders[Word.WdBorderType.wdBorderBottom].LineWidth = Word.WdLineWidth.wdLineWidth100pt;

myStyle.ParagraphFormat.Borders[Word.WdBorderType.wdBorderBottom].Color= Word.WdColor.wdColorDarkRed;

//allinemanto centrato

myStyle.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

//riportiamo l'opzione di aggiornamento automatico allo stato originale

myStyle.AutomaticallyUpdate = updAutom;

}

catch

{

MessageBox.Show("Operazione non riuscita");

}

}

VB

Public Sub FormattaTitolo1()

Dim myDoc As Word.Document

Dim myStyle As Word.Style

Dim updAutom As Boolean

Try

'impostiamo la variabile per il documento attivo

myDoc = Application.ActiveDocument

'impostiamo la variabile per lo stile da modificare

myStyle = myDoc.Styles('Titolo 1')

'rileviamo l'impostazione della proprietà "aggiorna automaticamente" dello stile Titolo 1

'in modo da poterla impostare a true prima di effettuare le modifiche

'e poterla poi riportare al valore precedente al termine delle modifiche

updAutom = myStyle.AutomaticallyUpdate

'impostiamo a true l'aggiornamento automatico

myStyle.AutomaticallyUpdate = True

'apportiamo le modifiche necessarie allo stile Titolo 1

With myStyle.Font

.Name = "Haettenschweiler"

.Color = Word.WdColor.wdColorDarkRed

.Size = 22

.Bold = False

.Italic = False

End With

'assegnamo un bordo inferiore al paragrafo

With myStyle.ParagraphFormat

.Borders(Word.WdBorderType.wdBorderBottom).LineStyle = Word.WdLineStyle.wdLineStyleSingle

.Borders(Word.WdBorderType.wdBorderBottom).LineWidth = Word.WdLineWidth.wdLineWidth100pt

.Borders(Word.WdBorderType.wdBorderBottom).Color = Word.WdColor.wdColorDarkRed

'allinemanto centrato

.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter

End With

'riportiamo l'opzione di aggiornamento automatico allo stato originale

myStyle.AutomaticallyUpdate = updAutom

Catch ex As Exception

MessageBox.Show("Operazione non riuscita")

End Try

End Sub

Per fare delle prove potete usare un qualsiasi documento con del testo che abbia, tra gli altri, lo stile Titolo 1, e vedere il risultato.

Io ho utilizzato il file WordCustomRibbon_01.docx (contenuto nell'allegato) che, oltre a prestarsi allo scopo, contiene tutto il codice necessario, da copiare e incollare nei nuovi progetti.

Il file contiene diversi titoli con lo stile Titolo 1 e una nuova scheda Menù Aziendale (nel mio caso sono due perchè ho caricato entrambi gli addins) con il comando Formatta Titolo 1:

WordCustomRibbon01

 

Dopo aver fatto click sul comando, tutti i titoli assumono la formattazione assegnata:

WordCustomRibbon02

 

Naturalmente, come sempre, in allegato trovate entrambe le applicazioni e il file per l'esempio.

Ciao a tutti

Laura

Materiale del Ready For a New Day

Come promesso, ecco tutto il materiale relativo alla sessione di Office che ho tenuto a Bari il 23 Marzo:

  • la presentazione;
  • il progetto in C# e in Visual basic;
  • l'elenco dei controlli del Ribbon per excel, indispensabile per reperire i corretti id di tabs, gruppi e controlli vari ;
  • un file excel con le galleries di immagini Office da assegnare ai comandi personalizzati del Ribbon.

E' possibile scaricare il tutto all'indirizzo: http://www.dotnetside.org/files/folders/ready_for__a_new_day/category1218.aspx 

Per poter accedere al download è necessario essere registrati al sito. 

In particolare, il file con le galleries, reperibile anche su Internet, è in una versione personalizzata da me, come spiegato anche nel mio post: Office Icon Gallery

Un ringraziamento a Dotnetside, per avermi dato questa possibilità; a tutti i partecipanti, che hanno pazientemente subito la mia "corsa" finale mentre Tiziana mi diceva di "stringere"; e, in particolare, a Mighell e a Gerardo per aver risolto brillantemente il problema del monitor, che avrebbe potuto compromettere la sessione!

 

Grazie ancora a tutti

Laura

Personalizzazione del Ribbon di Access 2007 (2)

Nel post precedente : Personalizzazione del Ribbon di Access 2007 (1) ho creato una nuova scheda per il Ribbon di Access utilizzando delle macro per le callbacks relative ai bottoni.

Nell'esempio di questo post, invece, ho utilizzato una subroutine creata in un modulo di VBA, che costituisce un'alternativa migliore e più flessibile alle macro.

Allo scopo, ho suddiviso la scheda del Ribbon in due gruppi: Reportistica e Inserimento dati.

Nel primo, ho lasciato i due comandi già presenti nell'allegato al post precedente; nel secondo, ho aggiunto un bottone per l'apertura di un semplice form di inserimento dati, mediante la callback InserisciStudenti.

 

La struttura xml è la seguente:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="GestioneGeneraleID" label="Gestione generale">
<group id="ReportisticaID" label="Reportistica">
<button id="RubricaStudenti" label="Rubrica Studenti" size="large" screentip="Elenco telefonico Studenti" supertip="elenco esportabile in excel" onAction="RubricaStudenti" imageMso="CreateReport" />
<button id="StudentiLivello" label="Studenti per livelloi" size="large" screentip="Elenco degli studenti" supertip="elenco esportabile in excel" onAction="StudentiLivello" imageMso="CreateReport" />
</group>
<group id="InserimentoDatiID" label="Inserimento Dati">
<button id="InserisciStudenti" label="Nuovi studenti" size="large" screentip="Aggiunta e modifica studenti" supertip="Consente l'immissione di nuovi studenti e la gestione di quelli esistenti" onAction="InserisciStudenti" imageMso="RecordsAddFromOutlook" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>

 

Successivamente, ho eseguito le seguenti operazioni:

  • creazione di un nuovo modulo denominato CallBack;
  • aggiunta del riferimento alla libreria Microsoft Office 12.0 Object Library;
  • creazione della seguente public sub:

Public Sub InserisciStudenti(control As IRibbonControl)
DoCmd.OpenForm "InserisciStudenti"
End Sub

Ed ecco il risultato:

 

RibbonAccess2

 

 

Errata corrige al post precedente

Riguardando il post precedente, mi sono accorta della mancanza di un'operazione fondamentale da eseguire per attivare il ribbon personalizzato, senza la quale, pur essendo tutto corretto, la nuova scheda non verrà visualizzata.

L'operazione mancante è costituita dall'attivazione della nuova scheda nel database corrente, mediante il valore del campo RibbonName della tabella USysRibbons:

  • aprire il Menù Office;
  • click su Opzioni di Access;
  • click su Database corrente;
  • nella sezione Barra multifunzione e barra degli strumenti, selezionare il nome del Ribbon (già presente in elenco);
  • chiudere e riaprire il db

RibbonAccess1

 

 

Come sempre, vi allego l'esempio completo.

Ciao a tutti

Laura

Personalizzazione del Ribbon di Access 2007 (1)

A differenza delle altre applicazioni di Office, la personalizzazione del Ribbon in Access 2007 non avviene mediante la creazione di un Add-in.

La struttura xml che rappresenta la configurazione del Ribbon, può essere gestita in due modalità, delle quali vedremo la prima in questo post: la creazione di una tabella all'interno del database

Allo scopo, dobbiamo:

  • creare un nuovo database basato, ad esempio, sul modello Studenti;
  • creare una tabella denominata USysRibbons;
  • all'interno di tale tabella, creare i due campi RibbonName (formato testo) e RibbonXML(formato memo);
  • inserire nel primo campo un nome per il Ribbon personalizzato;
  • inserire nel secondo campo la struttura xml del Ribbon (gruppi, comandi, ecc), esattamente nello stesso modo in cui abbiamo realizzato il Ribbon per Word o Excel (post precedenti).

Nel mio esempio, ho assegnato i seguenti valori ai due campi:

  • RibbonName: MyRibbonHome
  • RibbonXML:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="false">
<tabs>
<tab id="ReportisticaID" label="Reportistica">
<group id="ProgettiID" label="Progetti">
<button id="RubricaStudenti" label="Rubrica Studenti" size = "large" screentip = "Elenco telefonico Studenti" supertip = "elenco esportabile in excel" onAction = "RubricaStudenti" imageMso = "CreateReport"/>
<button id="StudentiLivello" label="Studenti per livelloi" size = "large" screentip = "Elenco degli studenti" supertip = "elenco esportabile in excel" onAction = "StudentiLivello" imageMso = "CreateReport"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

A ciascuno dei due comandi creati, ho assegnato il nome di una semplice macro che apre un report e il gioco è fatto!

Basta chiudere e riaprire il database ed ecco il risultato:

 

 RibbonAccess01

 

In allegato trovate il database pronto.

Per chiarimenti di ogni genere su Access lasciate un commento.

Ciao a tutti

Laura

Tabelle di Excel 2007

Se siete interessati ad una panoramica sulle nuove Tabelle di Excel leggete l'approfondimento:

Tabelle di Excel: elenchi rinnovati!

 

Ciao a tutti

Laura

Excel 2007: formattazione condizionale

Se siete interessati ad alcune novità sulla formattazione condizionale di Excel 2007, guardate l'approfondimento alla pagina: Formattazione condizionale in Excel 2007 e VBA in Excel 2003

E se avete richieste in merito, fatemelo sapere Yes

 

Ciao a tutti

Laura

Posted: Jan 29 2007, 06:45 PM by laura | with no comments
Filed under: , , ,
Assegnare immagini di formato diverso ad un comando del Ribbon

Oggi vorrei completare il post .NET Ribbon con il codice necessario per assegnare ad un comando del Ribbon immagini di vario formato: ico, jpg, bmp, gif, ecc.

 

Scaricate (se non l'avete già fatto Big Smile) l'applicazione allegata al post Assegnare immagini personalizzate ad un comando del Ribbon e, seguendo le istruzioni del post,  predisponete tre comandi sul tab personalizzato, e tre file di risorsa per le rispettive immagini (io ho utilizzato un file .ico, un file .gif e un file .bmp)

1. Modificare il file Ribbon1.xlm

Il file Ribbon1.xml dovrebbe avere la seguente struttura:

 

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="OnLoad">

<ribbon>

<tabs>

<tab id="SchedaPersonalizzata"

label ="Laura">

<group id="Immagini"

label="Immagini aziendali"

<toggleButton id="InserisciLogo01"

size="large"

label="Inserisci Logo Ufficiale"

screentip="Inserisce il logo ufficiale in corrispondenza del cursore"

onAction="OnToggleButton"

getImage ="GetMyImage" />

<toggleButton id="InserisciLogo02"

size="large"

label="Inserisci Logo per web"

screentip="Inserisce il logo web in corrispondenza del cursore"

onAction="OnToggleButton"

getImage ="GetMyImage" />

<toggleButton id="InserisciLogo03"

size="large"

label="Inserisci Logo interno"

screentip="Inserisce il logo per la documentazione interna in corrispondenza del cursore"

onAction="OnToggleButton"

getImage ="GetMyImage" />

</group>

</tab>

</tabs>

</ribbon>

</customUI>

2. Modificare la funzione GetMyImage

Modificate la funzione GetMyImage in modo da passare l'immagine corrispondente ad  ogni controllo del Ribbon:

public stdole.IPictureDisp GetMyImage(Office.IRibbonControl control)

{

stdole.IPictureDisp pictureDisp = null;

switch (control.Id)

{

case "InserisciLogo01":

pictureDisp =

ImageConverter.Convert(GetResourceBitmap("sqltut.ico"));

break;

case "InserisciLogo02":

pictureDisp =

ImageConverter.Convert(GetResourceBitmap("Logo.bmp"));

break;

case "InserisciLogo03":

pictureDisp =

ImageConverter.Convert(GetResourceBitmap("Diavoletto.gif"));

break;

}

return pictureDisp;

}

3. Modificare la funzione GetResourceBitmap

Modificate la funzione che restituisce l'immagine in modo che gestisca la tipologia di immagini.ico separatamente dalle altre:

public static System.Drawing.Bitmap GetResourceBitmap(string resourceName)
{
Assembly asm = Assembly.GetExecutingAssembly();
string[] resources = asm.GetManifestResourceNames();
System.Drawing.Bitmap image = null;

foreach (string resource in resources)
{
if (resource.EndsWith(resourceName))
{
System.IO.Stream stream =
asm.GetManifestResourceStream(resource);
if (stream == null)
{
break;
}
string extension =
System.IO.Path.GetExtension(resourceName).ToLower();
switch (extension)
{
case ".ico":
image = new System.Drawing.Icon(stream).ToBitmap();
break;
default:
image = new System.Drawing.Bitmap(stream);
image.MakeTransparent();
break;
}
stream.Close();
break;
}
}
return image;
}

4. Provare per credere

Lanciate l'applicazione e il risultato, con le mie immagini, è il seguente:

ImmaginiVarie01

Trovate l'applicazione completa in allegato 

Chiedo ancora perdono agli utenti di Visual Basic che rimando all'articolo in uscita alla fine del mese (Embarrassed).

Ciao a tutti

Laura

Pacchetto di compatibilità per Office 2007

 

Avete installato Office 2003 e dovete aprire dei files salvati con la nuova versione?

Niente di più semplice: scaricate il Pacchetto di compatibilità per Office 2007 e siete a posto!

Fate click qui per il download oppure fate doppio click sul file salvato con la nuova versione: sarà Office a comunicarvi che il file è in versione 2007 e vi porterà al sito per il download.

Ciao a tutti

Laura

Posted: Jan 22 2007, 03:53 PM by laura | with no comments
Filed under: ,
.NET Ribbon!!!

Questa mattina, ancora in preda all'entusiasmo per la .NET Pizza, ho giocato un pò con il Ribbon e questo è il risultato:

 

NetTorta

Ma è inutile che premiate il bottone: per avere un pezzo di .NET Torta dovrete venire alla prossima .NET Pizza con noi!!!!

PS La torta della foto l'ho fatta io!

Ciao

Laura

Posted: Jan 20 2007, 01:37 PM by laura | with 3 comment(s)
Filed under:
.NET Pizza

Un evento veramente "istruttivo": tra sigle di ogni genere, antipasti, pizze e dolci (offerti da Michele Big Smile, non dimentichiamolo), ho avuto modo di conoscere delle persone simpatiche e divertenti, al di fuori degli schemi.

Un grazie a Michele per l'organizzazione, a Tiziana che mi ha "trascinata" nella community, e a tutti gli altri che mi hanno fatto sentire parte di essa.

 

Ciao e....a presto Pizza

Laura

Posted: Jan 20 2007, 11:51 AM by laura | with 4 comment(s)
Filed under:
Posizione delle schede nel Ribbon

Vi piacerebbe avere la vostra scheda personalizzata in prima posizione nel Ribbon (lo so, non pensate ad altro, non mangiate, non ci dormite la notte....Geeked)

Ma adesso, la soluzione al vostro problema c'è: inserite l'attributo insertBeforeMso ="TabHome" al tag Tab nel file Ribbon.xml:

<tab id="SchedaPersonalizzata" label="Scheda Personalizzata" insertBeforeMso ="TabHome">

et voilà! (En français, s’il vous plait!)

La vostra "Scheda Personalizzata" si trova al primo posto!!!!

PosizioneSchede

 

Alla prossima

Ciao a tutti

Laura

XML Notepad 2007

 

Vi segnalo un interessante editor per file xml all'indirizzo:

http://www.microsoft.com/downloads/details.aspx?FamilyID=72D6AA49-787D-4118-BA5F-4F30FE913628&displaylang=en

Se preferite visualizzare la struttura del file sottoforma di albero cui  aggiungere o eliminare voci, rinominare, ecc; può essere utile.

Dopo averlo installato, è possibile fare click destro su un file xml e utilizzare il nuovo editor:

CustomIcon01

Questo è quello che vi si presenta:

CustomIcon02

E' possibile aggiungere elementi e assegnarne i valori; visualizzare il risultato in modalità standard (XLS output), ecc.

Ad esempio, io ho aggiunto gli elementi e i valori relativi ad un nuovo comando per il ribbon:

CustomIcon03

e, dopo aver salvato, aprendo Excel, il ribbon risulta così modificato:

CustomIcon04

Un'altra funzionalità che può essere interessante (e che gli utenti di Word conoscono bene) è la possibilità di confrontare due file xml per visualizzarne le differenze, evidenziate con colori diversi descritti in una legneda:

CustomIcon05

CustomIcon06

Ciao a tutti

Laura

More Posts Next page »