Le modèle d'objet Word a le concept d'une plage; Vous pouvez le considérer comme le bloc de texte actuel avec lequel vous voulez travailler dans le programme.
Cette ligne:
objDoc.Tables.Add objRange, intNoOfRows, intNoOfColumns
ajoute une nouvelle table à la plage donnée (objRange
).
En regardant la liste des paramètres dans le documentation for the Add
method, nous voyons ce qui suit (nous soulignons):
Nom: Gamme
Description de: La plage où vous voulez que le tableau apparaisse . La table remplace la plage si la plage n'est pas réduite.
regardant la ligne précédente de votre code:
Set objRange = objDoc.Range
la gamme étend sur l'ensemble du document. Ce n'est probablement pas ce que vous voulez, car il remplacera non seulement toutes les autres tables, mais aussi tout autre texte dans le document.
Afin de réduire la plage, appelez le Collapse
method. Les plages peuvent être réduites de deux manières: soit la fin de la plage doit se déplacer jusqu'au début de la plage, soit le début de la plage doit se déplacer jusqu'à la fin de la plage. Ce comportement est contrôlé par le passage dans wdCollapseStart
ou wdCollapseEnd
la méthode Collapse
ou leurs valeurs équivalentes:
'objRange.Collapse wdCollapseEnd
objRange.Collapse 1
Une fois que vous avez écroulé la gamme, vous pouvez ajouter la nouvelle table.
objDoc.Tables.Add objRange, intNoOfRows, intNoOfColumns
N.B. Votre code utilise une liaison tardive, ce qui signifie (entre autres choses) que l'éditeur n'est pas conscient des formes des différents objets que vous utilisez.
Fournir l'éditeur avec ces informations, ajoutez une référence (Outils ->Références ...) au Microsoft Word Object Model (ou quelque chose de similaire).
Ensuite, lorsque vous déclarez vos variables, vous pouvez spécifier leur type:
Dim objDoc As Word.Document
Maintenant, lorsque vous écrivez oDoc.
, l'éditeur peut vous dire quelles méthodes et propriétés sont disponibles pour un document Word.
Il existe un autre problème avec ce code. Une fois la table insérée, quelques lignes de traitement sont effectuées sur la table. Mais le traitement ne se fait jamais sur la table le plus récemment ajouté dans le document, mais toujours sur la première table dans le document:
objDoc.Tables.Add objRange, intNoOfRows, intNoOfColumns
Set objTable = objDoc.Tables(1) 'reference to the first table in the document
La façon la plus simple de résoudre ce problème, serait d'utiliser la référence retournée d'ajouter la table:
'we need the parentheses now because we're using the returned value
Set objTable = objDoc.Tables.Add(objRange, intNoOfRows, intNoOfColumns)
le code final pourrait ressembler à ceci:
Dim objWord As New Word.Application
'in production, keeping the application invisible is often more performant
'but while debugging, it's useful to see what's going on in the application
objWord.Visible = True
Dim objDoc As Word.Document
Set objDoc = wdApp.Documents.Add
Dim objRange As Word.Range
Set objRange = objDoc.Range
objRange.Collapse wdCollapseEnd
Dim intNoOfRows As Integer
intNoOfRows = 5
Dim intNoOfColumns As Integer
intNoOfColumns = 3
Dim objTable As Word.Table
Set objTable = objDoc.Tables.Add(objRange, intNoOfRows, intNoOfColumns)
'Fill the table here
'Collapse the range again (not sure this is needed)
objRange.Collapse wdCollapseEnd
'Now you can add a new table:
Set objTable = objDoc.Tables.Add(objRange, intNoOfRows, intNoOfColumns)
peut-être vous n Vous devez réduire la plage que vous utilisez pour insérer? Mais il est impossible de savoir sans code. –
tirer, qui n'a pas coller comme je pensais, un instant – user8426180
http://excel-macro.tutorialhorizon.com/vba-excel-add-table-and-fill-data-to-the-word-document/ – user8426180