2009-05-21 7 views
8

Les feuilles de calcul/classeurs masqués ont des limites à ce qui peut être fait dans le code VBA, comme la plupart des instructions Select et Selection, et tout ce qui provient de ActiveSheet, mais je ne trouve aucune liste des limitations.Quelles sont les actions Excel VBA possibles sur les feuilles de calcul ou les classeurs masqués?

Google, la documentation intégrée dans le système d'aide et le site Web de MSDN ont tous échoué. Est-ce que quelqu'un peut-il me montrer la bonne direction?

Edit: Le classeur est ouvert avec

Set WB_Master = Workbooks.Open(Filename:=PATH_Master, ReadOnly:=False) 

puis cachée avec

WB_Master.Windows(1).Visible = False 
+0

Pouvez-vous élaborer sur la façon dont vous ouvrez le classeur et le rendre invisible? –

Répondre

13

à partir de Visual Basic pour Applications:

Lorsqu'un objet est caché, il est supprimé de l'écran et sa propriété Visible est définie sur False. Les contrôles d'un objet caché ne sont pas accessibles à l'utilisateur, mais ils sont disponibles par programmation pour l'application en cours d'exécution, pour les autres processus qui communiquent avec l'application via Automation et dans Windows vers les événements de contrôle Timer.

Pas beaucoup d'aide là-bas J'ai peur, et je ne pouvais pas trouver beaucoup d'autre grâce à Google.

Comme vous l'avez dit vous-même, la méthode Select et la propriété de sélection ne fonctionnent pas sur une feuille de calcul masquée, mais elles devraient fonctionner sur un classeur masqué. (Corrigez-moi si je me trompe.) En général, cependant, il n'est pas toujours très efficace de sélectionner des plages dans les feuilles de calcul. Il est préférable de travailler avec la propriété Range (qui fonctionne sur une feuille de calcul masquée).

EDIT:

Le code suivant va changer la couleur de A1: A8 à Cyan même lorsque la feuille est pas visible:

Dim book2 As Workbook 
Set book2 = Workbooks.Open("C:\Book2.xls") 

book2.Worksheets("Sheet1").Visible = False 
book2.Windows(1).Visible = False 

With book2.Worksheets("Sheet1").Range("A1:E8").Interior 
    .ColorIndex = 8 
    .Pattern = xlSolid 
    .PatternColorIndex = xlAutomatic 
End With 

book2.Windows(1).Visible = True 
book2.Worksheets("Sheet1").Visible = True 
+2

Je reste généralement loin de Select, sauf en cas de nécessité absolue, mais mon problème spécifique ici est d'essayer d'appliquer une couleur d'arrière-plan aux cellules qui sont sur un classeur qui est à la fois caché et non le classeur actif. Bien qu'il se réfère directement au classeur, cela ne fonctionne que si le classeur est visible et activé. –

+1

Un classeur non visible est accessible avec la fonction WorkSheet. Il suffit de spécifier le nom de la feuille. Patrick a fourni un exemple en haut. – jgallant

9

Vous pouvez contourner toutes les restrictions sur les feuilles cachées en les démasquage sans que l'utilisateur s'en rende compte, fasse ce qu'il vous faut, puis les cache à nouveau.

Cet exemple suppose que Sheet2 est masqué.

Sub DoStuffToAHiddenSheetWithoutTheUserKnowingIt() 
    'turns off screen repainting so the user can't see what you're doing 
    'incidentally, this dramatically speeds up processing of your code 
    Application.ScreenUpdating = False 
    'note that if you're stepping through your code, screenupdating will be true anyway 

    'unhide the sheet you want to work with 
    Sheets("sheet2").Visible = True 
     'do whatever you want here, including selecting cells if you want 
     'Scagnelli is right though, only select cells if you have to 

    'when you're finished, hide the sheet again 
    Sheets("sheet2").Visible = False 

    'make sure you turn screenupdating back on, or Excel will be useless 
    Application.ScreenUpdating = True 
End Sub 

Une autre astuce utile si vous voulez que vos feuilles cachées est de les mettre à xlVeryHidden, ce qui les empêchera d'y être inscrits à l'utilisateur si elles essaient de les afficher dans le menu ou le ruban.

Questions connexes