2015-09-03 2 views
1

J'ai une feuille de calcul Excel avec quelques données. Chaque cellule de la feuille de calcul a un nom défini. J'ai également un document Word avec des signets définis. Chaque signet porte le même nom qu'une cellule de l'Excel.Word VBA - insérer des données à partir d'Excel avec le nom défini

J'ai mon code VBA en mots. En ce moment je suis en train d'essayer 1. aller à chaque signet dans le mot 2. aller à Excel et aller à la cellule avec le même nom défini 3. insérer les données dans la cellule à l'emplacement du signet dans le mot.

Voici ce que j'ai:

Dim wb As Excel.Workbook 
Dim excelPath As String 
Dim numBM As Integer 
Dim countBM As Integer 
Dim currentBM As String 

numBM = ActiveDocument.Bookmarks.Count 

excelPath = getFilePath() 'separate function to get the location of the excel file 

Set wb = Excel.Workbooks.Open(excelPath) 

For countBM = 1 To numBM 
    currentBM = ActiveDocument.Bookmarks(countBM).Name 

    ActiveDocument.Bookmarks(currentBM).Range.Text = wb.???????? 
Next 

je peux obtenir ce travail si je l'utilise:

ActiveDocument.Bookmarks(currentBM).Range.Text = wb.Worksheets("Sheet1").Range(currentBM) 

, mais je ne veux pas faire référence à la feuille de calcul. Je veux seulement faire référence à la cellule.

Je sais qu'il doit y avoir une solution simple à cela!

Répondre

0

Il existe, en effet, une solution simple. Si vous avez nommé les cellules, vous pouvez accéder à la collection Names dans l'objet Excel Application. Par exemple, si vous souhaitez récupérer la plage (ou la valeur dans votre cas) d'une cellule spécifiquement nommée dans Excel, vous pouvez effectuer les opérations suivantes:

Excel.Names("RangeName").RefersToRange.Value 
+0

C'est exactement ce dont j'ai besoin! Toute la nuit, j'essayais de travailler avec le membre .RefersTo. Je n'ai jamais essayé .RefersToRange – MightyMouseZ

0

Je ne veux pas faire référence à la feuille de calcul

Eh bien, vous devrez. Faites-le tout de suite et il vous suffira de le référencer une fois:

Dim ws As Excel.Worksheet 
'... 
Set ws = Excel.Workbooks.Open(excelPath).Sheets(1) 
ActiveDocument.Bookmarks(currentBM).Range.Text = ws.Range(currentBM) 

Et Bob est votre oncle.