Selezione di colonne in VBA quando le celle sono unite (Microsoft Excel)
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 (12218) si applica a Microsoft Excel 2007, 2010, 2013 e 2016.
Puoi trovare una versione di questo suggerimento per la vecchia interfaccia del menu di Excel qui: