Non ho troppo tempo né pazienza per i Forum…
Mea culpa, mea culpa. Tuttavia, avendo notato che in testa al Forum di Shareoffice ci sono diversi appelli angoscianti relativi a tabelle di Word, mi permetto di intervenire con un post. Così le osservazioni che sto per fare potranno servire a più gente. Almeno spero…
Prima risposta (a un quesito posto in cima al Forum…).
- La causa dell’apparente anomalia lamentata sta in un banale errore di s1ntassi:
ERRATA CORRIGE
Obj.Tabella.Add() Obj.Tabella.Add ‘Il metodo Add NON vuole () !
Con l’occasione mi permetto, bonariamente, due appunti.
1) Perché adottare (anche in VBA, linguaggio di UTENTI…) la pignola sintassi Obj.Tabella o txt.Miotesto e simili? Anche Microsoft da tempo non la incoraggia. Meglio usare nomi pregnanti semanticamente: Tabella nel nostro caso.
2) Piuttosto è importante definire il tipo dati con una Dim. In tal modo si sfrutta l’intellisense. Nella fattispecie il nostro amico dopo aver digitato objTabella. Avrebbe ottenuto il corretto Add e non Add(). Non aveva che da premere Invio e dormire tranquillo.
Ma ecco la Sub che suggerisco, rivolta a creare la tabella del nostro amico nella selezione corrente, supposta scritta nel modulo ThisDocument:
Sub CreaTab()
Dim Tabella As Word.Table
'Aggiungi una tabella con 1 riga e 4 colonne
Set Tabella = ActiveDocument.Tables.Add(Selection.Range, 1, 4)
Tabella.Cell(1, 1).Range.Text = "1"
Tabella.Cell(1, 2).Range.Text = "2"
Tabella.Cell(1, 3).Range.Text = "3"
Tabella.Cell(1, 4).Range.Text = "4"
Tabella.Rows.Add 'Aggiunge una seconda riga
End Sub
Concludo suggerendo una variante che va incontro al grido di dolore di un altro soggetto del Forum, che chiede come aggiungere una tabella in un segnalibro:
Sub CreaTabInBookmark()
Dim Tabella As Word.Table
'Aggiungi una tabella con 1 riga e 4 colonne
Set Tabella = _
ActiveDocument.Tables.Add(Me.Bookmarks("Qui").Range, 1, 4)
Tabella.Cell(1, 1).Range.Text = "1"
Tabella.Cell(1, 2).Range.Text = "2"
Tabella.Cell(1, 3).Range.Text = "3"
Tabella.Cell(1, 4).Range.Text = "4"
Tabella.Rows.Add
End Sub
L’ipotesi è che un segnalibro di nome “Qui” sia stato predisposto nel documento. In questo caso viene creata la stessa tabella di prima, però “a distanza”, ossia ovunque si trovi il cursore del testo.
Ma cos’è Me? Come ripeto, le precedenti routine le ho scritte e provate nel modulo ThisDocument , pertanto Me equivale, in tale contesto, a ThisDocument o, a piacere, ActiveDocument. (Per contro anche Me.Tables.Add(…) dovrebbe funzionare, sempre nel modulo ThisDocument).
?>