2017-10-13 2 views
0

Je crée un document Word avec des contrôles de contenu qui seront utilisés comme un formulaire. Les listes déroulantes proviendront d'un classeur et seront ajustées dynamiquement en fonction des choix effectués. Au lieu de ré-accéder au classeur à chaque fois (et de ralentir les choses), j'essaye de stocker les informations nécessaires dans les tableaux et les dictionnaires à utiliser pendant le remplissage du formulaire à Document_Open(). Je n'ai pas besoin (et je ne veux pas) des tableaux/dict stockés après que l'utilisateur ferme le document.VBA Word - Comment stocker tableau ou dict ou coll lorsque le document est ouvert

J'ai essayé de déclarer un dict public en dehors de la fonction, sans succès (ou peut-être que je me trompe?). Quelqu'un peut me diriger dans la bonne direction.

merci

Public dict As Object 
Public Sub Document_Open() 

    Set dict = CreateObject("Scripting.Dictionary") 

    Dim xlApp As Object 
    Dim xlWB As Object 
    Dim xlWS As Object 
    Dim cRows As Integer 
    Dim i As Integer 

    Set xlApp = CreateObject("Excel.Application") 
    Set xlWB = xlApp.Workbooks.Open("O:\[..]\Library.xlsx") 
    Set xlWS = xlWB.Worksheets(1) 
    cRows = 21 

     For i = 1 To cRows 
      dict.Add xlWS.Range("C2").Cells(i, 1).Value, xlWS.Range("C2").Cells(i, 2).Value 
     Next i 

    Set xlWS = Nothing 
    Set xlWB = Nothing 
    xlApp.Quit 
    Set xlApp = Nothing 

End Sub 

sera lancé plus tard

Sub test() 

    Debug.Print dict("random key") 

End Sub 

Répondre

1

il suffit de déplacer votre variable publique à un module standard (par exemple le module sous test réside dans) un tout fonctionnera bien.