Come faccio a popolare un elenco da un campo del modulo di controllo del contenuto della sezione ripetuta in Word 2016?


-1

Quindi ho un controllo del contenuto della sezione ripetuta (RSCC) con due controlli del contenuto del testo. Uno è un controllo del contenuto in testo semplice per il nome di un elemento e uno è un controllo del contenuto in testo semplice per una descrizione dell'elemento.

Questo è in un RSCC perché in alcuni casi, dovranno essere scritti più articoli. Mi piacerebbe poter fare riferimento a ciascuno di questi potenziali nomi di articoli più avanti nel documento. Come faccio a fare questo?

Idealmente, l'utente inserisce un nome (come "widget 1"), e successivamente nel documento, c'è un paragrafo che dice qualcosa come "gli elementi –widget 1– blah blah blah ...". Tuttavia, se l'utente inserisce il "widget 1" nel nome dell'oggetto, quindi utilizza RSCC per denominare e descrivere un "widget 2", il paragrafo precedente ora dice "gli elementi –widget 1, widget 2 — blah blah blah ... "e così via. È possibile? In tal caso, come posso farlo?

Risposte:


0

Sono fuori dalla mia profondità su questo - non ho mai nemmeno sentito parlare di RSCC prima di aver visto la tua domanda - ma ho messo insieme qualcosa che potrebbe essere parte della tua soluzione. Presumo che i tuoi dati siano in una tabella e che il tuo campo "nome" sia la colonna 1. Inserisci questo codice VBA:

Sub listControl_1()
    Dim o As Table
    Dim c As Row
    Dim mylist As Variant

    Set o = ActiveDocument.ContentControls.Item(1).Range.Tables(1)
    rownum = 0
    For Each c In o.Rows
        rownum = rownum + 1
        If rownum > 1 Then
            thislen = Len(c.Cells(1).Range.Text)
            If thislen > 0 Then
                thislen = thislen - 1
            End If
            If rownum = 2 Then
                mylist = Mid(c.Cells(1).Range.Text, 1, thislen)
            Else
                mylist = mylist & ", " & Mid(c.Cells(1).Range.Text, 1, thislen)
            End If
        End If
    Next c
    MsgBox mylist
End Sub

Il If rownum > 1 Thentest presuppone che la tabella abbia una riga di intestazione (e la salta, quindi non si ottiene il testo dell'intestazione nell'elenco). Se non hai una riga di intestazione (o se ne hai più di una), modifica il codice di conseguenza. Ogni cella sembra avere un carattere delimitatore alla fine; il codice usa Mid()per toglierlo.

Ciò assembla un elenco separato da virgole dei valori per la colonna 1 della prima tabella e lo visualizza in una finestra di messaggio. Se i tuoi dati non sono in una tabella, non so cosa dirti. Se i tuoi dati sono in una tabella, ma non è il primo nel documento, non so come trovare quello giusto. E, soprattutto, non so come ottenere l'elenco nel tuo documento. Come ho già detto, questa è al massimo una parte della tua soluzione.

Ho copiato il framework del codice VBA da MSDN "Come ottenere un valore dal controllo del contenuto all'interno del controllo del contenuto della sezione Ripetizione" . (C'è più codice lì, che potresti trovare utile.) Nota che il loro codice lo fa . Ho provato a sottrarre 2 dalla lunghezza e ho perso l'ultimo carattere del testo; Non so perché sia ​​diverso. Inoltre noto che il loro codice fa per scrivere i dati nella tabella. Forse puoi usarlo come indizio per capire come ottenere il risultato dalla routine nel tuo documento.Mid(text, 1, Len(text) - 2)c.Cells(columnNumber).Range.Text = someText


Vedo quello che stai suggerendo qui e lo apprezzo, anche se suppongo che dovrei essere più preciso sulla mia formattazione per sviluppare meglio qualsiasi codice VBA potrebbe essere necessario.
Godzilla2y

La tabella da cui sto tentando di estrarre gli elementi è una 2x2 e finisce per essere la terza (per ora) tabella del documento. il nome dell'elemento di riferimento si trova nella colonna di destra nella riga superiore (era l'unico modo in cui potevo mantenere in modo affidabile la formattazione tramite RSCC). Mentre il tuo codice si occupa delle due possibili voci, non posso garantire che l'utente effettuerà solo due voci. Probabilmente ne avranno solo due e Sicuramente (si spera) non ne avranno più di 5.
Godzilla2y,

@ Godzilla2y: non capisco la tua prima frase ("... il nome dell'elemento di riferimento è nella colonna di destra nella riga in alto ..."), e non sono sicuro che sia necessario. Potrebbe essere utile se ci hai mostrato come appare la tua tabella nella tua domanda, usando un blocco di codice (come questo , per esempio). Né capisco "Mentre il tuo codice si occupa delle due possibili voci ..." Il mio codice gestisce un numero qualsiasi di righe; L'ho provato con un tavolo a quattro file (e ha prodotto "mela, banana, ciliegia").
G-Man,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.