2009-07-06 12 views
1

Comme l'explique le titre, j'ai un classeur Excel 2003 et je copie un certain nombre de colonnes d'une feuille à l'autre dans VBA. Inconnu à moi, quelqu'un a caché quelques colonnes sur la feuille de source et il a foiré comment je traite les cellules dans la feuille de destination.Comment déterminer s'il existe des colonnes cachées lors de la copie dans Excel VBA

Comment puis-je déterminer programmically:

  1. Si des colonnes cachées
  2. Les colonnes qui sont cachées?

Merci! JFV

Répondre

8

Pour Range, vérifiez la Range.Hidden property.

L'extrait suivant de MSDN est un bon exemple de la façon de masquer/afficher une ligne/colonne:

Worksheets("Sheet1").Columns("C").Hidden = True 

Vous pouvez également tester la valeur avec une déclaration If:

For ColCounter = 1 To 10 
     If Columns("C").Hidden = True Then 
      Columns("C").Hidden = False 
     End If 
Next 
+1

devrait également définir une sorte d'un drapeau droit dans la section conditionnelle où la colonne cachée est mise à false ... peut-être un tableau où l'élément 0 = col A, l'élément 1 = col B et ainsi de suite – CheeseConQueso

+0

@Cheese: Je voulais juste donner un exemple de comment pour parcourir et vérifier les états .Hidden - il existe de nombreuses façons d'améliorer l'extrait de code (Utiliser pour chaque colonne au lieu d'un compteur, par exemple exemple). –

+0

@scag ouais je me suis dit que ... n'essayait pas de te frapper ou quoi que ce soit, juste de répondre à la deuxième partie de sa question - ps, ton nom de famille est très familier ... West Essex High School? Je suis de fairfield ... – CheeseConQueso

0

Vous pouvez vérifier à l'aide d'une fonction comme:

Function IsColumnHidden(column As Variant) as Boolean 
    IsColumnHidden = False 
    If Columns(column).ColumnWidth = 0.0 Then IsColumnHidden = True 
End Function 

une largeur de colonne ou de rangée hauteur de 0,0 est un indicateur du fait que l'intervalle est caché ou non.

1

Si vous voulez seulement copier les fichiers visibles, alors une option qui est plutôt sympa consiste à ne sélectionner que les colonnes visibles en tant que plage.

Cela peut être fait par

Set visrng =rng.SpecialCells(xlCellTypeVisible) 

Il n'a pas été clair pour moi si cela serait utile dans votre cas, mais j'ai décidé de poster qu'il pourrait être utile aux autres.

+0

@Modan: Merci pour l'info. On dirait que je pourrais intégrer cela dans la prochaine version. Merci! – JFV

1

Copie cellules visibles à une autre gamme, puis comparer le nombre de cellules dans chaque est sans doute la meilleure façon de déterminer si des cellules cachées dans la gamme

par exemple

Selection.SpecialCells(xlCellTypeVisible).Copy Destination:=VisRan 

If Not Selection.Cells.Count = VisRan.Cells.Count Then 
    MsgBox "Selection contains Hidden Cells" 
End If 
+1

Pas mal, mais je suggère de laisser la copie. 'IF Not Range.Cells.Count = Range.SpecialCells (xlCellTypeVisible) .count' –