Mary sta scrivendo una macro che dividerà una tabella. Lavorare sulla tabella attiva non è un grosso problema, ma vuole copiare la prima riga della tabella attiva, quindi dividere la tabella e infine incollare la riga copiata nella prima riga della nuova tabella creata dalla divisione. Per eseguire questa operazione correttamente, desidera determinare i numeri di indice utilizzati da Word per fare riferimento alle due tabelle nella raccolta di tabelle. Mary vuole sapere come può scoprire il numero di indice per la tabella attiva (prima della divisione) in modo che possa semplicemente incrementare quel numero per conoscere il nuovo numero di indice per la tabella creata dopo la divisione.

Il modello a oggetti di Word si basa sull’organizzazione di singoli oggetti in raccolte a cui è possibile accedere a livello di codice. Questo vale non solo per le tabelle, ma per i paragrafi, la grafica e una miriade di altri oggetti.

È possibile trovare facilmente il numero di oggetti in una raccolta utilizzando la proprietà Count. Ad esempio, potresti usare quanto segue per scoprire quante tabelle ci sono in un documento, poiché restituisce il numero di oggetti nella collezione Tables:

iNumTables = ActiveDocument.Tables.Count

Trovare quale tabella è quella corrente è un po ‘più complicato, ma può essere fatto. Il modo più semplice è aggiungere un segnalibro alla tabella corrente, quindi esaminare tutte le tabelle nel documento per vedere quale tabella contiene quel segnalibro. Una volta scoperto, sai qual è la tabella corrente e puoi eliminare il segnalibro. La seguente macro implementa questi passaggi:

Sub FindTableNumber()

Dim J As Integer     Dim iTableNum As Integer     Dim oTbl As Table

Selection.Bookmarks.Add ("TempBM")

For J = 1 To ActiveDocument.Tables.Count         Set oTbl = ActiveDocument.Tables(J)

oTbl.Select         If Selection.Bookmarks.Exists("TempBM") Then             iTableNum = J             Exit For         End If     Next J     ActiveDocument.Bookmarks("TempBM").Select     ActiveDocument.Bookmarks("TempBM").Delete     MsgBox "The current table is table " & iTableNum End Sub

Per utilizzare la macro, assicurati semplicemente che il punto di inserimento si trovi all’interno della tabella desiderata. La macro può essere facilmente adattata a un contesto più ampio, come quello in cui la tabella viene suddivisa e manipolata in altro modo.

Tuttavia, esiste un altro modo per gestire in modo programmatico l’azione sottostante che Mary desidera ottenere: un metodo che non richiede l’uso di numeri di indice per la raccolta di tabelle. Puoi copiare la prima riga della tabella e poi dividere la tabella usando un comando simile al seguente:

Selection.Tables(1).Split(5)

Questo comando divide la tabella alla riga 5; puoi facilmente cambiare il punto di divisione cambiando la riga in cui è diviso. Quindi, puoi spostare il punto di inserimento all’inizio della tabella successiva (quella appena creata) utilizzando il seguente comando:

Selection.GoTo What:=wdGoToTable, Which:=wdGoToNext

Questo comando salta all’inizio della tabella successiva e puoi quindi incollare la riga di intestazione che hai copiato in precedenza.

Se sei interessato a una discussione più dettagliata su come gestire programmaticamente le tabelle, puoi trovare un ottimo articolo qui:

http://msdn2.microsoft.com/en-us/library/aa537149(office.11).aspx

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti WordTips), ho preparato una pagina speciale che include informazioni utili.

WordTips è la tua fonte di formazione economica su Microsoft Word.

(Microsoft Word è il software di elaborazione testi più popolare al mondo.) Questo suggerimento (505) si applica a Microsoft Word 97, 2000, 2002 e 2003. È possibile trovare una versione di questo suggerimento per l’interfaccia della barra multifunzione di Word (Word 2007 e più tardi) qui: