Word - Numero progressivo nella colonna della tabella - VBA

Riepilogo
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.

Questo articolo è stato utile?

Siamo spiacenti che questo non sia stato utile.

Ottimo. Grazie per il tuo feedback.

Quanto sei soddisfatto di questo articolo?

Grazie per il feedback, ci aiuta a migliorare il sito.

Quanto sei soddisfatto di questo articolo?

Grazie per il tuo feedback.

Ciao con VBA come faccio a distinguire i valori all'interno di un cella in una tabella Word mi spiego meglio

 esempio nella prima colonna mi trovo questi valori   il mio desiderata è questo qui sotto (insomma distinct) ovviamente questo devve essere realizzato all'interno della prima colonna

pippo

pippo

pippo

pluto

pluto

pluto

paperino

pippo

pluto

paperino

cicci

cicci

pucci

pucci 

cicci

pucci


 

Questo commento è stato utile?

Siamo spiacenti che questo non sia stato utile.

Ottimo. Grazie per il tuo feedback.

Quanto sei soddisfatto di questo commento?

Grazie per il feedback, ci aiuta a migliorare il sito.

Quanto sei soddisfatto di questo commento?

Grazie per il tuo feedback.

Relativamente alla prima cella della prima colonna:

Public Sub m()

On Error GoTo RigaErrore
    
     Dim lRow As Long
     Dim s As String
     Dim ss() As String
     Dim lng As Long
    
     s = ""
    
     With ThisDocument.Tables(1)
        ss = Split(.Cell(1, 1).Range.Text, Chr(13))
        For lng = 0 To UBound(ss())
            If InStr(s, ss(lng)) = 0 Then
                s = s & ss(lng) & vbNewLine
            End If
        Next
        .Cell(1, 1).Range.Text = s
     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

Se devi farlo per tutte le celle della prima colonna (qui 3, modifica il numero con il tuo numero di righe):

Public Sub m()

On Error GoTo RigaErrore
    
     Dim lRow As Long
     Dim s As String
     Dim ss() As String
     Dim lng As Long
     Dim lRiga As Long
    
     With ThisDocument.Tables(1)
        For lRiga = 1 To 3
            s = ""
            ss = Split(.Cell(lRiga, 1).Range.Text, Chr(13))
            For lng = 0 To UBound(ss())
                If InStr(s, ss(lng)) = 0 Then
                    s = s & ss(lng) & vbNewLine
                End If
            Next
            .Cell(lRiga, 1).Range.Text = s
        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

NOTA. La tua domanda NON aveva nulla a che fare con l'articolo Wiki. Per favore, la prossima volta posta una domanda nella Community. Grazie.

--
Mauro Gamberini
Microsoft© MVP (Excel)
http://www.maurogsc.eu

Questo commento è stato utile?

Siamo spiacenti che questo non sia stato utile.

Ottimo. Grazie per il tuo feedback.

Quanto sei soddisfatto di questo commento?

Grazie per il feedback, ci aiuta a migliorare il sito.

Quanto sei soddisfatto di questo commento?

Grazie per il tuo feedback.

 
 

Informazioni articolo del forum


Ultimo aggiornamento 29 aprile 2022 Visualizzazioni 3.210 Si applica a: