Livello tecnico: Conoscenza di base di Visual Basic for Applications Si applica a: Word (2003/2007/2010/2013)
Dettagli
NOTA. Gli esempi ed il codice sono forniti *così come sono* e l’autore declina ogni responsabilità per un loro uso scorretto. Utilizzate gli esempi forniti o file di prova per i vostri test. La correzione delle eccezioni (errori) e il controllo del tipo di dati inserito è solo parziale. I file vogliono essere un semplice esempio che illustra come sia possibile automatizzare Word e sono forniti solo a scopo dimostrativo.
Situazione.
Abbiamo una tabella sul documento di Word e vogliamo che in una colonna venga inserito un numero progressivo per ogni cella.
Queste due semplici macro ( il codice fa riferimento alla prima tabella inserita nel documento attivo) inseriscono il numero progressivo nella prima colonna a partire dalla seconda riga (il risultato è identico) presumendo la prima riga occupata dalle intestazioni di colonna:
Public Sub m_1()
On Error GoTo RigaErrore
Dim lRow As Long
With ThisDocument.Tables(1)
For lRow = 2 To .Rows.Count
.Cell(lRow, 1).Range.Text = _
lRow - 1
Next
End With
RigaChiusura:
Exit Sub
RigaErrore:
If Err.Number = 5941 Then
MsgBox "La tabella o la colonna non esistono"
Else
MsgBox Err.Number & vbNewLine & Err.Description
End If
Resume RigaChiusura
End Sub
Public Sub m_2()
On Error GoTo RigaErrore
Dim lRow As Long
With ThisDocument.Tables(1)
For lRow = 2 To .Rows.Count
.Rows(lRow).Cells(1).Range.Text = _
lRow - 1
Next
End With
RigaChiusura:
Exit Sub
RigaErrore:
If Err.Number = 5941 Then
MsgBox "La tabella o la colonna non esistono"
Else
MsgBox Err.Number & vbNewLine & Err.Description
End If
Resume RigaChiusura
End Sub
Figura 1: La tabella di Word con la numerazione in colonna 1 a partire dalla seconda riga
Nel caso non ci sia l'intestazione e si voglia partire dalla prima riga:
Public Sub m_3()
On Error GoTo RigaErrore
Dim lRow As Long
With ThisDocument.Tables(1)
For lRow = 1 To .Rows.Count
.Cell(lRow, 1).Range.Text = _
lRow
Next
End With
RigaChiusura:
Exit Sub
RigaErrore:
If Err.Number = 5941 Then
MsgBox "La tabella o la colonna non esistono"
Else
MsgBox Err.Number & vbNewLine & Err.Description
End If
Resume RigaChiusura
End Sub
Public Sub m_4()
On Error GoTo RigaErrore
Dim lRow As Long
With ThisDocument.Tables(1)
For lRow = 1 To .Rows.Count
.Rows(lRow).Cells(1).Range.Text = _
lRow
Next
End With
RigaChiusura:
Exit Sub
RigaErrore:
If Err.Number = 5941 Then
MsgBox "La tabella o la colonna non esistono"
Else
MsgBox Err.Number & vbNewLine & Err.Description
End If
Resume RigaChiusura
End Sub
Figura 2: La tabella di Word con la numerazione in colonna 1 a partire dalla prima riga
E' possibile formattare a nostra scelta il contenuto delle celle. Ad esempio:
Public Sub m_5()
On Error GoTo RigaErrore
Dim lRow As Long
With ThisDocument.Tables(1)
For lRow = 2 To .Rows.Count
.Cell(lRow, 1).Range.Text = _
"Art" & Format(lRow - 1, "000")
Next
End With
RigaChiusura:
Exit Sub
RigaErrore:
If Err.Number = 5941 Then
MsgBox "La tabella o la colonna non esistono"
Else
MsgBox Err.Number & vbNewLine & Err.Description
End If
Resume RigaChiusura
End Sub
Figura 3: La tabella di Word con la numerazione in colonna 1 con formattazione personalizzata a partire dalla seconda riga
Per cambiare il riferimento alla colonna, modificare in questo modo le righe interessate nelle varie macro. Ad esempio per avere la numerazione dalla seconda riga in colonna 3:
.Cell(lRow, 3).Range.Text = _
lRow - 1
oppure:
.Rows(lRow).Cells(3).Range.Text = _
lRow - 1
Figura 4: La tabella di Word con la numerazione in colonna 3 a partire dalla seconda riga
La correzione degli errori intercetta il riferimento a tabelle o colonne non presenti sul documento attivo.
NOTA. Word non dispone nativamente di procedure assolutamente sicure per impedire la visualizzazione e la modifica del codice vb e/o per la protezione
dei documenti. E’ una cosa da tenere sempre presente quando si distribuiscono file con contenuti ritenuti delicati. Ricordate anche che è possibile lanciare il file di Word senza che vengano eseguite le macro.