La “classe” non è … acqua: un suggerimento sulla programmazione ad oggetti

Download PDF

Il piccolo file allegato vuole mostrare l’uso un po’ più sofisticato che si può realizzare in Excel all’interno di Vba. Infatti abbiamo mostrato come si realizza una piccola classe: la classe Quadrato. Un ottimo lavoro nell’ambito mi sembra quello di Emanuele Mattei nel suo blog:http://blog.shareoffice.it/emanuele/articles/9973.aspx ma è indicato soprattutto per Vb.Net e C#. Invece la programmazione ad oggetti può aver luogo anche in Vba e in particolare in Excel. Il file mostra come si può calcolare l’area di un quadrato in vari modi: con le formule, con una piccola macro, con una classe. L’ultimo modo è certamente il più complicato, ma come esempio di costruzione di una classe deve essere visto al di là dei risultati immediati. In realtà per apprezzare i vantaggi nell’utilizzo delle classi bisogna scrivere codice. La nostra classe rappresenta sostanzialmente un quadrato geometrico: specificando il lato che viene memorizzato e che può essere letto e variato, rimangono fissate le proprietà conseguenti: diagonale, area, perimetro. Inoltre, come detto, il nostro quadrato possiede due “metodi” non euclidei: può essere ingrandito o rimpicciolito di una percentuale fissata. Una volta compiuto il lavoro di implementazione della classe vediamone l’uso: per prima cosa si deve creare un’istanza nel nostro programma con l’istruzione: Dim Q As New Quadrato. In questo modo si fa sapere ad Excel che Q è un “oggetto” della classe quadrato. Questa istruzione deve essere fatta per prima. Quindi abbiamo realizzato due piccole routines: la prima calcola l’area esattamente come si potrebbe fare in altro modo, la seconda utilizza il metodo IngrandisciP per incrementare il lato del quadrato. Notate come non compaiano formule matematiche nel codice del foglio1. Ma i fatti più interessanti accadono nell’Ide. Vediamo nell’immagine seguente come si comporta Vba quando scriviamo Q. dopo aver dichiarato che fa parte della classe Quadrato.

Ide

Vba correttamente ci indica quali metodi e proprietà possono essere applicate a Q.

Quadrato

007. Salvataggio file tramite VBA

Download PDF

Domanda:

vorrei chiederle un controllo del codice seguente, lo scopo del codice è il salvataggio del file in una directory specifica e se la directory esiste, salvare il file con il nome specifico.
in attesa

Sub salvaFile()
 On Error GoTo mess
 Dim p As Worksheet
 Dim Directory As String
 Dim NomeFile As String
 Dim ctrl As Boolean
 Dim x As Integer
 ctrl = True
 x = 1
Set p = Worksheets("R22-3")
Directory = p.Cells(23, 20).Value
 NomeFile = p.Cells(24, 20).Value
Do While ctrl = True
 ctrl = Len(Dir(Directory & NomeFile))
 x = x + 1
 Loop
ChDir Directory
 ActiveWorkbook.SaveAs Filename:=NomeFile, FileFormat:=xlNormal, Password:="", writerespassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
mess:
 msgbox "Errore - Riprovare"
End Sub

Risposta:

Nel codice bisogna apportare 2 modifiche:

1) sostituire ‘Filename:=NomeFile’ con ‘Filename:=Directory & NomeFile’, se ha scritto la directory con ‘\’ alla fine, o in caso contrario con ‘Filename:=Directory & “\” & NomeFile’

2) scrivere Exit Sub prima di mess: altrimenti il messaggio di errore appare anche in assenza di errori

Riccardo Vincenti

006. Cercare parola in un testo – VBA

Download PDF

Domanda:

Salve, volevo sapere se in qualche modo era possibile creare un foglio excel per questo lavoro: Fare una 3 colonne rispettivamente: “titolo film” “produttore” e “attori” e una volta scritti film produttori e attori , una volta ordinato (per esempio) in base ad un particolare attore gli titolo e produttore seguono l’ordinamento dell’attore di quel film. Spero di essermi spiegato bene, grazie della risposta.

Risposta:

nel file allegato trovate la macro per cercare una parola in un testo e restituire le informazioni collegate. Filtra Attore

Riccardo Vincenti

005. Calcolo importo maggiorazioni

Download PDF

Lucia ci ha chiesto:

la cella A1 contiene il valore minuti: 185
i primi 60 minuti vanno pagati tot. euro;
dal 61 a 120 vanno pagati maggiorati del 5%;
dal 121 al 185 vanno pagati maggiorati del 10%.
NOTA: il valore nella cella A1 è variabile.
Che formula devo inserire per il calcolo?
ringrazio anticipatamente per l\’aiuto

—-

Ciao Lucia,

in allegato trovi il file con la formula richiesta

Calcolo maggiorazioni

Riccardo Vincenti

 

004. Aprire FileDialog per selezionare file

Download PDF

Domanda:

Complimenti per il sito…molto interessante
Avrei bisogno di visualizzare un diagramma ad albero (tipo quello che si visualizza con esplora risorse di windows) all\’apertura di excel oppure word, per poterci collegare dei file sia di excel, word, pdf, ecc. in modo di avere una visione generale della struttura del progetto, con possibilità di apertura dei singoli file. Spero di essermi spiegato bene. Saluti

Risposta:

di seguito il codice che lancia il file dialog di Windows
e permette di aprire i file che ti interessano:

Public Sub SelezionaFileDaAprire()

Dim fDialog As Office.FileDialog

Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
Dim selezione As Variant
Dim PercorsoStandard As String

  PercorsoStandard = "C:\"    'inserisci il percorso che desideri aprire di default

With fDialog
    .AllowMultiSelect = False
    .Title = "Seleziona il file da aprire"
    .InitialFileName = PercorsoStandard

    If .Show = -1 Then
        For Each selezione In .SelectedItems
            FileDaAprire = selezione
            ActiveWorkbook.FollowHyperlink Address:=FileDaAprire
        Next
    Else
        MsgBox "Caricamento annullato!", vbInformation  'quanto premi ‘cancella’ la macro si stoppa
        Exit Sub
    End If
End With
Set selezione = Nothing
Set fDialog = Nothing
End Sub

A voi il file:
APRI

Riccardo Vincenti

003. Bloccare riga durante scorrimento

Download PDF

Domanda:

Come posso fare per mantenere sempre in vista il titolo di un foglio di lavoro excel mentre scorro in basso lo stesso foglio. Grazie per la collaborazione.

Risposta:

Per ottenre il risultato puoi usare il ‘Blocca riquadri’ presente nel menu’ ‘Visualizza’.
Potrai scegliere se bloccare la prima riga o un gruppo di righe

Riccardo Vincenti

002. Info su altezza cella tramite VBA

Download PDF

Domanda:

Vorrei sapere se esiste una funzione o istruzione VBA che permette la visualizzazione dell’ALTEZZA delle celle [esempio: in H13 “=CELLA(“larghezza”;G13)”]

Risposta:

Qui abbiamo scritto una semplice funzione che fa quanto richiesto:

Function RiportaAltezzaCella(a As Range) As Double

    Application.Volatile True
    RiportaAltezzaCella = a.Height

End Function

La funzione si aggiorna ogni volta che Excel esegue un ricalcolo. Attenzione quindi: non si aggiorna ogni volta che modificatel l’altezza ma bensi appna utilizzate la cella per un calocolo

potete scaricare qui il file di esempio:

Altezzacella

Riccardo Vincenti

001. Riportare somma tramite VBA

Download PDF

Domanda:

Scopiazzando sul web sono riuscito a creare la seguente macro che
vorrei modificare:
Private Sub Worksheet_Activate()
Dim wSheet As Worksheet
Dim l As Long
l = 1
With Me
.Columns(1).ClearContents
.Cells(1, 1) = \”ELENCO GIOCATORI\”
.Cells(1, 2) = \”IMPORTO Assegnato\”
.Cells(1, 1).Name = \”Sommario\”
End With

For Each wSheet In Worksheets
If wSheet.Name <> Me.Name Then
l = l + 1
With wSheet
.Range(\”A1\”).Name = \”Start\” & wSheet.Index
.Hyperlinks.Add Anchor:=.Range(\”A1\”), Address:=\”\”, SubAddress:= _
\”Sommario\”, TextToDisplay:=\”Torna al Sommario\”

End With
Me.Hyperlinks.Add Anchor:=Me.Cells(l, 1), Address:=\”\”, _
SubAddress:=\”Start\” & wSheet.Index, TextToDisplay:=wSheet.Name
End If
Next wSheet
End Sub

questa crea un sommario automatico dei fogli di lavoro
presenti in una cartella excel.
Mi occorrerebbe inserire nella colonna B il totale del foglio di
lavoro relativo.
Potreste aiutarmi cortesemente?
vi ringrazio anticipatamente ….

——-

Risposta:

negli sheet 2,3,4 ho inserito in posizioni diverse a titolo didattico, una colonna dove puoi inserire gli importi che verranno sommati e mostrati nello sheet ‘Sommario’. Ho parametrizzato infatti il codice per permetterti di collocare la colonna dove prefierisci. La macro viene lanciata automaticamente al verificarsi dell’evento Workbook_Open e può essere eseguita anche premendo il bottone ‘Aggiorna’.

In allegato trovi il file con i commenti inseriti direttamente nel modulo VBA.

Importo Assegnato

Riccardo Vincenti

Formattazione condizionale con celle che lampeggiano

Download PDF

Mi è stato richiesto da più fonti di avere la possibilità di creare una formattazione condizionale tale per celle in Excel possano lampeggiare se una certa condizione sia stata verificata o meno.

Purtroppo tale funzionalità non è disponibile in Excel in modo nativo e non c’é modo per integrarla.

La procedura migliore sarebbe quella di attribuire a una cella un metodo che possa permettere il lampeggio (o flashing) ma questo non è possibile.

Si può però optare per un trucco con un foglio Excel addizionale, a lato del foglio di lavoro.

Tale foglio addizionale conterrà i link alle celle che si vuole “far lampeggiare” e le condizioni che devono essere verificate per il lampeggio.

Ho preparato quindi il foglio che qui troverete che dovrà essere aperto assieme  al foglio Excel le cui celle vorrete far lampeggiare.

Il foglio conterrà i link alle celle, i criteri di lampeggio e i formati del lampeggio.

procedura per avere le celle lampeggianti:

Cominciamo dal file di esempio:

  1. scaricate il file qui: Flashing_cells
  2. Scompattate i due file in una directory
  3. aprite entrambi i file: un file è ukl file di esempio che contiene le celle che dovranno lampeggiare, il secondo è il file master che contiene i link alle celle che dovranno lampeggiare e i criteri di lampeggio
  4. Abilitate le macro sul file master
  5. cambiate lo stato da OFF a ON

flashing-on-off

A questo punto, se tutto è corretto andate sul foglio di esempio. le celle dovrebbero lampeggiare.

Divertitevi pure a cambiare i criteri o i valori o ancora i formati delle celle, le celle e il lampeggio dovrebbe adeguarsi automaticamente

Come fare per usare questa funzionalità con le proprie celle Excel

Modificate i link nella colonna A e cambiate i criteri di lampeggio:

flashing-link

 

fintanto che il file master è aperto, le celle, se vengono rispettate le condizioni, lampeggeranno

Ho inserito 4 diversi criteri di lampeggio: higher than, lower than, between e out of. Credo che le logiche che essi applicano sono sufficientemente semplici da non meritare una spiegazione dettagliata

Attenzione solo ai criteri between e out of: se scambiate tra loro upper e lower limit il criterio stesso non funzionerà.

se scrivete i criteri in modo errato nelle celle, non funzioneranno. Basta anche solo mettere una lettera maiuscola per impedirne il funzionamento.

Se fate qualche link strano la macro che gestisce il lampeggio si incastrerà. Vi consiglio dis tare molto attenti.

Svantaggi di questa soluzione:

  1. la funzionalità Undo viene persa. Non chiedetemi perché: non ne ho la minima idea, so solo che se fate qualcosa di sbagliato nei vostri fogli Excel, non potrete tornare indietro.
  2. Il lampeggio avviene solo una volta al secondo: non è possibile modificare la frequenza
  3. Il file master deve essere aperto.

Il file permette di linkare fino a  dieci celle e di gestire quindi dieci lampeggi. Questo è voluto: su consiglio di un amico lettore metto a disposizione gratuitamente solo una versione limitata. Se siete interessati a una versione con un numero maggiore di celle potete contattarmi a questo indirizzo mail.