Supponiamo di avere un foglio di lavoro vuoto e all’intervallo A1: F1 applicato il formato “unisci e centra”. Se selezioni la colonna B facendo clic sull’intestazione della colonna, Excel seleziona diligentemente la colonna B e rende la cella B2 la cella attiva. Questo comportamento è stato modificato in Excel 2000 o Excel 2002; nelle versioni precedenti di Excel si ottiene la cella unita (A1: F1)

incluso nella selezione.

Apparentemente, VBA è un po ‘indietro rispetto al comportamento dell’interfaccia utente, poiché la selezione dell’intera colonna B finisce anche per selezionare tutte le colonne, dalla A alla F:

Sub TestMacro1()

Range("B3").EntireColumn.Select End Sub

Sembra non esserci alcun modo per aggirare questo comportamento. Anche se elimini il metodo InteraColonna e selezioni semplicemente la colonna B, ottieni comunque tutte le colonne, dalla A alla F:

Sub TestMacro2()

Range("B:B").Select End Sub

Probabilmente è un approccio di programmazione migliore non selezionare la colonna preparatoria per eseguire un’azione su quella colonna, ma eseguire l’azione direttamente. Ad esempio, supponiamo di voler rendere in grassetto tutte le celle nella colonna B. Puoi farlo in questo modo:

Sub TestMacro3()

Range("B3").EntireColumn.Font.Bold = True End Sub

Ciò influisce solo sulle celle nella colonna B e niente in A o C attraverso F. Allo stesso modo potresti usare un approccio iterativo per elaborare le celle nella colonna desiderata:

Sub TestMacro4()

Dim rCell As Range     Dim X As Long

X = 1     For Each rCell In Range("B:B")

rCell.Value = X         X = X + 1     Next End Sub

Questo inserisce un valore in ogni cella nella colonna B e ignora convenientemente qualsiasi unione che includa una cella nella colonna B.

Se è obbligatorio poter selezionare un’intera colonna, senza aggiungere colonne a causa delle celle unite, potresti essere tentato di utilizzare la proprietà MergeCells per controllare le celle unite. Secondo la guida in linea di VBA, quanto segue dovrebbe rilevare le celle unite nella selezione e quindi eseguire il dump dalla macro:

Sub TestMacro5()

Range("B3").EntireColumn.Select     If Selection.MergeCells Then         Exit Sub     End If ' ' Perform rest of macro ' End Sub

Sfortunatamente, i test mostrano che questo codice non funzionerà. Apparentemente la proprietà MergeCells restituisce True solo se l’intera selezione è composta da celle unite, non se la selezione contiene solo poche celle unite. Ciò significa che sei lasciato a qualche altro modo per determinare se le celle unite hanno modificato la selezione desiderata, come il seguente:

Sub TestMacro6()

Range("B3").EntireColumn.Select     If Selection.Columns.Count > 1 Then         Exit Sub     End If ' ' Perform rest of macro ' End Sub

Questo approccio esamina il numero di colonne nella selezione e quindi esegue il dump se Excel segnala che ce n’è più di uno.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (3093) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: