Visualizzazione post con etichetta Visual Basic for Application. Mostra tutti i post
Visualizzazione post con etichetta Visual Basic for Application. Mostra tutti i post

lunedì 4 febbraio 2019

MS Word: Modificare lo stile delle tabelle tramite macro

MS Word consente di formattare velocemente una tabella applicando gli stili di tabella. Per applicare uno degli stili di tabella messi a disposizione da MS Word:
  • Selezionare la cella di una tabella contenuta nel documento MS Word. Apparirà un nuovo gruppo di schede STRUMENTI TABELLA;
  • Cliccare sulla scheda contestuale Progettazione presente nel nuovo gruppo di schede;
  • Nella raccolta Stili tabella selezionare lo stile tabella da applicare.
    MS Word, Stili tabella
    FIG 1 - MS Word, Stili tabella
Quando si lavora su un lungo testo o quando più persone lavorano su uno stesso documento è possibile ritrovarsi con tabelle formattate in maniera diversa. Per uniformare lo stile delle tabelle contenute in un documento è possibile creare una semplice macro a patto che le tabelle non siano state utilizzate per formattare le pagine.

Il primo passo consiste nell'individuare lo stile che si intende applicare a tutte le tabelle del documento:
  • Selezionare la cella di una tabella;
  • Nel nuovo gruppo STRUMENTI TABELLA, selezionare la scheda Progettazione;
  • Nella sezione Stili tabella scorrere l'elenco degli stili e, una volta individuato lo stile di proprio interesse, soffermarsi per qualche istante sulla relativa icona e prendere nota del nome visualizzato dal tooltip che appare (FIG 1).

Qualora in MS Word la scheda Sviluppo non fosse visibile abilitarla procedendo come indicato di seguito:

  • Dal menu File->Opzioni selezionare Personalizzazione barra multifunzione;
  • Nell'elenco Schede principali (sulla destra) aggiungere il segno di spunta alla voce Sviluppo e cliccare su OK;
    MS Word, Attivazione scheda Sviluppo
    FIG 2 - MS Word, Attivazione scheda Sviluppo
Il passo successivo consiste nel creare la macro:
  • Aprire il documento MS Word contenente le tabelle da uniformare;
  • Avviare Microsoft Visual Basic, Application Edition cliccando sul pulsante Visual Basic nella scheda Sviluppo oppure tramite la combinazione di tasti ALT+F11;
  • Nella visualizzazione ad albero del progetto, sul lato sinistro della finestra, selezionare ThisDocument;
  • Copiare e incollare il seguente codice sostituendo "Tabella griglia 2 - colore 6" con il nome dello stile individuato precedentemente
    Sub ImpostaStileTabelle()
        Dim tabella As Table
        For Each tabella In ActiveDocument.Tables
            tabella.Style = "Tabella griglia 2 - colore 6"
        Next
    End Sub
    

MS Word, Microsoft Visual Basic, Application Edition
FIG 3 - MS Word, Microsoft Visual Basic, Application Edition

A questo punto non resta che eseguire la macro per uniformare lo stile di tutte le tabelle contenute all'interno del documento con quello prescelto:
  • Dalla scheda Sviluppo cliccare sul pulsante Macro (o premere la combinazione di tasti ALT+F8);
  • Selezionare la macro ImpostaStileTabelle appena creata quindi cliccare su Esegui.
    MS Word, Esegui Macro
    FIG 4 - MS Word, Esegui Macro





venerdì 7 dicembre 2018

MS Outlook: Aprire le cartelle Posta in Arrivo, Calendario, Attività e Contatti in più finestre all'avvio di Outlook

Alcuni utenti potrebbero trovare utile che all'avvio di Outlook vengono aperte le cartelle Posta in Arrivo, Calendario, Attività e Contatti in diverse finestre con dimensioni personalizzate. 
Per raggiungere tale scopo è possibile utilizzare VBA:
  • Avviare Outlook;
  • Dal menu File->Opzioni selezionare Personalizzazione barra multifunzione;
  • Nell'elenco Schede principali (sulla destra) aggiungere il segno di spunta alla voce Sviluppo e cliccare su OK;
    Outlook, Personalizza barra multifunzione
    FIG 1 - Outlook, Personalizza barra multifunzione
  • Avviare Microsoft Visual Basic, Application Edition tramite la combinazione di tasti ALT+F11;
  • Nella visualizzazione ad albero del progetto, sul lato sinistro della finestra, selezionare ThisOutlookSession;
    Outlook, Microsoft Visual Basic Application Edition
    FIG 2 - Outlook, Microsoft Visual Basic Application Edition
  • Copiare e incollare il seguente script;
    Private Sub Application_Startup()
     Dim olExp As Outlook.Explorer
     Dim objInbox As Folder
     Dim objCalendar As Folder
     Dim objContacts As Folder
     Dim objTasks As Folder
    
     Set objInbox = Application.ActiveExplorer.CurrentFolder
     Set objCalendar = Session.GetDefaultFolder(olFolderCalendar)
     Set objContacts = Session.GetDefaultFolder(olFolderContacts)
     Set objTasks = Session.GetDefaultFolder(olFolderTasks)
    
    'Apre la cartella Contatti in una finestra di Outlook ridotta ad icona (olMinimized)
     objContacts.Display
     Set olExp = Application.ActiveExplorer
     With olExp
         .WindowState = olMinimized
     End With
    
    'Apre la cartella Attività in una finestra di Outlook ridotta ad icona (olMinimized)
     objTasks.Display
     Set olExp = Application.ActiveExplorer
     With olExp
         .WindowState = olMinimized
     End With
    
    'Apre la cartella Calendario in una finestra normale di Outlook (olNormalWindow)
     objCalendar.Display
     Set olExp = Application.ActiveExplorer
     With olExp
         .WindowState = olNormalWindow
     End With
    
    'Apre la cartella Posta in arrivo in una finestra massimizzata di Outlook (olMaximized)
     objInbox.Display
     Set Application.ActiveExplorer.CurrentFolder = objInbox
     Set olExp = Application.ActiveExplorer
     olExp.WindowState = olMaximized
    
    End Sub
    
  • Attraverso la proprietà WindowState di Outlook.Explorer è possibile indicare se aprire la cartella in una finestra normale (olNormalWindow), ridotta (olMinimized) o ingrandita (olMaximized).  Salvare lo script cliccando sull'apposita icona e ritornare alla finestra di Outlook;
  • Dalla scheda Sviluppo cliccare su Sicurezza macro;
    Outlook, Sicurezza macro
    FIG 3 - Outlook, Sicurezza macro
  • Dalla finestra Centro protezione, nella sezione Impostazioni macro, selezionare Visualizza notifiche per tutte le macro. In questo modo all'avvio di Outlook verrà richiesto se eseguire la macro.
    Outlook, Visualizza notifiche per tutte le macro
    FIG 4 - Outlook, Visualizza notifiche per tutte le macro
Per agire sulla posizione e sulla dimensione delle finestre aperte si utilizzano le proprietà Top, Left, Height, Width che consentono di specificare la distanza in pixel della finestra dalla parte alta dello schermo, la distanza dal bordo sinistro, l'altezza della finestra e la sua larghezza. 
Ad. es volendo aprire la finestra con il Calendario di Outlook, spostarla in altro a sinistra dello schermo e impostare la dimensione 800x1000 lo script è il seguente:

Private Sub Application_Startup()
 Dim olExp As Outlook.Explorer
 Dim objInbox As Folder
 Dim objCalendar As Folder
 Dim objContacts As Folder
 Dim objTasks As Folder

 Set objInbox = Application.ActiveExplorer.CurrentFolder
 Set objCalendar = Session.GetDefaultFolder(olFolderCalendar)
 Set objContacts = Session.GetDefaultFolder(olFolderContacts)
 Set objTasks = Session.GetDefaultFolder(olFolderTasks)

'Apre la cartella Contatti in una finestra di Outlook ridotta ad icona (olMinimized)
 objContacts.Display
 Set olExp = Application.ActiveExplorer
 With olExp
     .WindowState = olMinimized  
 End With

'Apre la cartella Attività in una finestra di Outlook ridotta ad icona (olMinimized)
 objTasks.Display
 Set olExp = Application.ActiveExplorer
 With olExp
     .WindowState = olMinimized
 End With

'Apre la cartella Calendario in una finestra normale di Outlook (olNormalWindow)
 objCalendar.Display
 Set olExp = Application.ActiveExplorer
 With olExp
     .WindowState = olNormalWindow
     .Top = 0
     .Left = 0
     .Height = 800
     .Width = 1000
 End With

'Apre la cartella Posta in arrivo in una finestra massimizzata di Outlook (olMaximized)
 objInbox.Display
 Set Application.ActiveExplorer.CurrentFolder = objInbox
 Set olExp = Application.ActiveExplorer
 olExp.WindowState = olMaximized

End Sub

Se si vogliono aprire più finestre di Outlook in modo che siano sfalsate tra loro come mostrato in FIG 5, il codice da copiare è il seguente:
Private Sub Application_Startup()
 Dim objInbox As Folder
 Dim objCalendar As Folder
 Dim objContacts As Folder
 Dim objTasks As Folder

 Set objInbox = Application.ActiveExplorer.CurrentFolder
 Set objCalendar = Session.GetDefaultFolder(olFolderCalendar)
 Set objContacts = Session.GetDefaultFolder(olFolderContacts)
 Set objTasks = Session.GetDefaultFolder(olFolderTasks)

 objCalendar.Display
 objContacts.Display
 objTasks.Display

 Dim olExps As Outlook.Explorers
 Set olExps = Application.Explorers

 Dim oTop As Long, oLeft As Long
 oTop = 100
 oLeft = 200

 For x = 1 To olExps.Count

  With olExps.Item(x)
      .WindowState = olNormalWindow
      .Top = oTop
      .Left = oLeft
      .Height = 800
      .Width = 1000
  End With
 oTop = oTop + 50
 oLeft = oLeft + 50

 Next x

 Set Application.ActiveExplorer.CurrentFolder = objInbox
End Sub
Outlook, Finestre sfalsate
FIG 5 - Outlook, Finestre sfalsate





mercoledì 18 gennaio 2017

MS Excel: Ordinare i fogli in ordine alfabetico

Chi utilizza file MS Excel con all'interno numerosi fogli può trovare utile avere la possibilità di poterli ordinare in ordine alfabetico. Purtroppo Excel non dispone di una funzione integrata che esegue tale operazione ma a questa mancanza si può facilmente ovviare utilizzando VBA (Visual Basic for Application):
  • Da Excel, aprire l'editor VBA tramite la combinazione di tasti ALT+F11;
  • Cliccare sul menu Inserisci e selezionare la voce Modulo;
    Excel, VBA Inserisci Modulo
    FIG 1 - Excel, VBA Inserisci Modulo
  • Incollare il seguente codice
    Sub OrdinaFogli()
    Dim i As Integer
    Dim j As Integer
    Dim ordinamento
       ordinamento = InputBox("Digitare 1 per ordinare i fogli in modo crescente (dalla A alla Z), 2 per ordinare i fogli in modo 
  •       decrescente (dalla Z alla A):", "Ordina fogli", "1")
       If ordinamento = "" Then
        Exit Sub
       End If
       If IsNumeric(ordinamento) And ordinamento >= 1 And ordinamento <= 2 Then
         For i = 1 To Sheets.Count
          For j = 1 To Sheets.Count - 1
            If ordinamento = 1 Then
              If UCase$(Sheets(j).Name) > UCase$(Sheets(j + 1).Name) Then
                  Sheets(j).Move After:=Sheets(j + 1)
              End If
                 
            ElseIf ordinamento = 2 Then
               If UCase$(Sheets(j).Name) < UCase$(Sheets(j + 1).Name) Then
                    Sheets(j).Move After:=Sheets(j + 1)
               End If
            End If
          Next j
         Next i
         Else
          MsgBox "Il valore inserito non è valido!"
         End If
    
    End Sub
    
    
  • Salvare il progetto (CTRL+S);
  • Chiudere l'editor con la combinazione ALT+Q;

Per richiamare la funzione premere la combinazione ALT+F8, selezionare OrdinaFogli e cliccare sul pulsante Esegui. Nella finestra di dialogo digitare il tipo di ordinamento desiderato:
1 - per ordinare i fogli in modo crescente;
2 - per ordinare i fogli in modo decrescente.
Excel, Esegui funzione
FIG 2 - Excel, Esegui funzione
Indicare il tipo di ordinamento desiderato
FIG 3 - Indicare il tipo di ordinamento desiderato

Cliccando sul link che segue è possibile scaricare un file di testo contenente il codice VBA
DOWNLOAD