Riferimenti a fogli e celle
Info
Esempi
Linguaggio
Librerie
Formule
Ultimi Inseriti

 Login

 Password

Scrivendo macro che leggono o modificano celle sui fogli di calcolo si dovrebbero sempre condierare due cose:
  1. la leggibilità del codice: anche per chi lo ha scritto a distanza di tempo può non essere di facile lettura;
  2. la possibilità che l'utente di Excel, che spesso non è la stesso che ha scritto la macro, modifichi il file aggiungendo foglio o spostando le celle alterando il corretto funzionamento della macro.
Alcune semplici tecniche possono aiutare a limitare, se non evitare, questi problemi.

Gestione nomi
Un'altra possibilità per rendere indipendente la macro dalla posizione dei dati sul foglio su cui agirà è quella di utilizzare i nomi degli intervalli.
Ad esempio volendo scrivere un codice che legge i clienti dalle prima due colonne di un tabella come quella a destra per compilarne la terza potremmo utilizzare un codice come questo:
For R = 2 To 6
  IdCliente = Cells(R, 2)
  DsCliente = Cells(R, 3)
  Cells(R, 4) = IdCliente & "-" & DsCliente
Next R
In questo caso il codice è legato alla posizione delle righe e delle colonne sul foglio.

Impostando un nome all'intervallo di celle come nell'esempio a destra il codice potrebbe essere scritto in questo modo:
Set TabClienti = Range("TabClienti")
For R = 2 To TabClienti.Rows.Count
  IdCliente = TabClienti.Cells(R, 1)
  DsCliente = TabClienti.Cells(R, 2)
  TabClienti.Cells(R, 3) = IdCliente & "-" & DsCliente
Next R
Facendo in questo modo per l'utilizzatore del foglio sarà sia possibile spostare la tabella in un'altra posizione del foglio sia aggiungere righe e la macro continuerà a funzionare.

Riferimenti ai fogli
Per accedere al foglio attivo useremo la proprietà ActiveSheet
Per fare riferimento ad un foglio esistono altri 3 metodi

Attraverso il nome
Utilizzando il nome che ha sul foglio di calcolo, sulla "linguetta":[/T]
Ws = Worksheets("NomeVisualizzato")
Attraverso l'indice
L'indice rappresenta la posizione attuale del foglio nella sequenza dei fogli del file ed è modificabile dall'utente.
Un esempio di un codice che scorre tutti i fogli del file e li attiva:
For i = 1 To Worksheets.Count
  Worksheets(i).Activate
Next i
Attraverso il CodeName
I due metodi precedenti hanno lo svantaggio di essere influenzabili da quello che fa l'utente: se cambia il nome del foglio o se cambia l'ordine dei fogli la macro non funzionerà o funzionerà in modo diverso.
Una soluzione per questo è utilizzare la proprietà CodeName, che è una delle proprietà del foglio modificabile solo dall'editor di VBA: è evidenziata come (name) nell'immagine a destra.
Nell'esempio a lato:
  1. il CodeName è "Foglio1";
  2. il nome visibile in Excel, indicato fra parentesi, é "Clienti".
Riassumendo: il nome visibile del foglio può essere modificato dall'utente, o da chi lavora con il file, mentre il CodeName del foglio rimarrà sempre uguale quanto impostato in VBA.
Il CodeName del foglio può essere utilizzato nel codice come un oggetto Worksheet: le due righe di codice qui sotto sono equivalenti.
Sheets("Clienti").Activate
Foglio1.Activate

Volendo utilizzare una logica simile a quella di Sheet(NomeFoglio) possiamo comunque utilizzare una semplice funzione come quella qui sotto.
Function GetWorksheetFromCodeName(stCodeName As String) As Worksheet
  Dim Ws As Worksheet
  For Each Ws In Worksheets
    If (Ws.CodeName = stCodeName) Then
      Set GetWorksheetFromCodeName = Ws
      Exit Function
    End If
  Next Ws
End Function
 

data4idea srls - PIva 01881000937 - info@data4idea.it