|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 1075
|
Word: creazione indice analitico automatico
Qua si chiede l'impossibile, secondo me. Ho un testo di oltre 100 pagine dove le parole chiave sono tutte in grassetto, sottolineate e di colore blu.
Word (o qualche altro programma) è in grado di rilevare queste parole e riportarle in un indice analitico (cioè con il numero della pagina in cui è presente quella parola)? Il fatto che queste parole siano formattate diversamente dovrebbe aiutare... Fatemi sapere geni! Ciao
__________________
VENDO PC (clicca qui): ASRock P4VM900-SATA2 appena presa con garanzia + Celeron 2.6ghz + Ram 512mb + altro |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 1075
|
Ragazzi, non mi sono spiegato bene?
Fatemi sapere. Ciao
__________________
VENDO PC (clicca qui): ASRock P4VM900-SATA2 appena presa con garanzia + Celeron 2.6ghz + Ram 512mb + altro |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 1075
|
Up raga. Nessun aiuto?
__________________
VENDO PC (clicca qui): ASRock P4VM900-SATA2 appena presa con garanzia + Celeron 2.6ghz + Ram 512mb + altro |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Ciao. Non conosco praticamente nulla di vba relativo a word.
Posso darti giusto uno spunto di partenza. Codice:
Sub parole()
For Each vword In ActiveDocument.Words
If vword.Underline = 1 And vword.Font.Bold = True And vword.Font.Color = wdColorBlue Then
MsgBox vword
End If
Next
End Sub
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 1075
|
Ciao, cercando come inserire una macro ho trovato nella sezione "Riferimenti" la voce "Inserisci indice"! C'è un Segna voce ma non capisco come si usa. Se fosse possibile dirgli di segnare solo le parole con quei 3 attributi (bold, sottolineato, colore blue) sarei a posto!
ho provato la macro, però noto che mostra le parole non in fila come sono nel file, non vorrei ne perdesse qualcuna. piuttosto ora sovviene questa cosa: molte parole da mettere nell'indice sono nomi di persona quindi nel testo ho in grassetto cose tipo "Paolo Rossi" e la macro legge separatamente Paolo e poi Rossi. E' possibile dirgli di prendere il nome completo, senza spezzarlo? Dai che ci siamo! Ti ringrazio tantissimo, spero riuscirai a darmi una mano per completare i llavoro!
__________________
VENDO PC (clicca qui): ASRock P4VM900-SATA2 appena presa con garanzia + Celeron 2.6ghz + Ram 512mb + altro Ultima modifica di sonicomorto : 01-06-2009 alle 11:31. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Come ti ho scritto non sono molto ferrato col vba di word. Ti consiglio di contattare un moderatore e farti spostare in programmazione dove è più facile che possa ricevere aiuto. Appena posso provo a vedere se riesco ad aiutarti.
|
|
|
|
|
|
#7 | |
|
Member
Iscritto dal: Dec 2007
Città: Milano
Messaggi: 141
|
Quote:
Se lo spazio ha comunque la "SOTTOLINEATURA", puoi indicare solo quella nella ricerca. Il problema che io non ho risolto è definire quella voce come indice, perche inserivo manualmete le parentesi ed i codici, ma se la macro accetta il comando "segna come indice", allora dovresti aver risolto.
__________________
Ciao SaricBlake |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jan 2002
Messaggi: 32712
|
Dietro richiesta di sonicmorto, spostato in programmazione
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Io l'ho risolto così :
Codice:
ListBox1.Clear
Dim parola As Range
Dim strParola As String
Dim voceIndice As String
Dim voceIndiceTrovata As Boolean
Dim numeroPagina As String
For Each parola In ThisDocument.Words
If parola.Underline = wdUnderlineSingle And parola.Font.Bold = True And parola.Font.Color = wdColorBlue Then
strParola = CStr(parola)
'pulizia da marcatori di paragrafo
strParola = Replace(strParola, Chr(13), "")
If Trim(strParola) <> "" Then
If voceIndiceTrovata = False Then
parola.Select
numeroPagina = Selection.Information(wdActiveEndPageNumber)
End If
voceIndice = voceIndice & strParola
End If
voceIndiceTrovata = True
Else
If voceIndiceTrovata = True And Trim(voceIndice) <> "" Then
ListBox1.AddItem (voceIndice & " >> Pag." & numeroPagina)
End If
voceIndice = ""
voceIndiceTrovata = False
End If
Next parola
Uso una listbox ListBox1, dove alla fine mi trovo l'indice analitico completo. L'unica cosa che manca ( il più è già stato fatto ), è sostituire la listbox con un array di stringhe, che servirà poi, alla fine della ricerca a scrivere su una nuova pagina in coda, l'indice analitico stesso... |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Ma sei un fenomeno anche di vba di word. Non ho più parole.
Volevo chiederti se conosci qualche buon libro oppure qualche utile link relativo all'uso del vba in word. A differenza di excel e access non mi sembra che ci sia molta documentazione in merito e mi piacerebbe approfondire. Grazie. |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Per gli altri applicativi che fanno uso di VBA ( Access, Word, ma anche Corel ed altri ) diciamo che mi arrangio... In effetti, come dici tu, c'è molto materiale ( e giustamente ) per Excel, che è lo strumento più duttile, un po' meno per Access, ancora meno per Word, PowerPoint, ed altri. Forse nella collana Mondadori, per la serie "Oltre Ogni Limite", ma non so quanto VBA, e a che livello di profondità venga trattato... E poi il prezzo... Il web senz'altro ( link specifici su Word non ne conosco ), più un uso approfondito del visualizzatore oggetti del VBA Editor, possono fare la differenza. |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 1075
|
Quote:
__________________
VENDO PC (clicca qui): ASRock P4VM900-SATA2 appena presa con garanzia + Celeron 2.6ghz + Ram 512mb + altro |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Nell'esempio ho tre pagine con testo e alcuni titoli. Apri il file Word, abilita le macro, visualizza la barra degli strumenti VB, entra nell'editor e vedi come sta messo il codice... Intanto provalo e vedi se nella ListBox gialla sulla prima pagina l'indice creato è ok : INDICE ANALITICO.zip |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 1075
|
Quote:
Ma dopo come faccio a copiare il testo (ovvero l'indice proprio) visualizzato nella cella gialla? Perchè serve in formato testo per stamparlo i fondo al libretto. Grazie!
__________________
VENDO PC (clicca qui): ASRock P4VM900-SATA2 appena presa con garanzia + Celeron 2.6ghz + Ram 512mb + altro |
|
|
|
|
|
|
#15 | ||
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Menu > Visualizza / Barre degli strumenti / strumenti di controllo Sulla barra degli strumenti di controllo VBA, Click sul pulsante "Modalità Progettazione", poi sul pulsante "Visualizza Codice". Quote:
|
||
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 1075
|
Ciao, eh, se riesci a completarlo se non è troppo lungo mi fai un favore, perchè io davvero non so dove metter mano!
Perdipiù io uso Word 2007 e non sono riuscito a Visualizzare il codice seguend la tua procedura (che probabilmente non hai il 2007)
__________________
VENDO PC (clicca qui): ASRock P4VM900-SATA2 appena presa con garanzia + Celeron 2.6ghz + Ram 512mb + altro |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
In Word 2007 la procedura è :
Pulsante Office ( pulsante rotondo in alto a sn ) : > Opzioni di Word / Impostazioni generali / Mostra scheda sviluppo sulla barra multifunzione. Scheda Sviluppo : > Pulsante Visual Basic oppure ALT+F11. A questo punto siamo nell'editor. Visualizza il nodo "ThisDocument" di Project(nomeProgetto) ed entraci, vedrai il mio codice contenuto. Ora sostituisci tutto il vecchio codice con questo : Codice:
Private Function ArrayVuoto(A() As String) As Boolean
Dim i As Integer
On Error GoTo E
i = UBound(A)
ArrayVuoto = False
Exit Function
E:
ArrayVuoto = True
End Function
Private Sub cmd_creaindice_Click()
Dim arrayVociIndice() As String
Dim parola As Range
Dim strParola As String
Dim voceIndice As String
Dim voceIndiceTrovata As Boolean
Dim numeroPagina As String
Application.ScreenUpdating = False
For Each parola In ThisDocument.Words
If parola.Underline = wdUnderlineSingle And parola.Font.Bold = True And parola.Font.Color = wdColorBlue Then
strParola = CStr(parola)
'pulizia da marcatori di paragrafo
strParola = Replace(strParola, Chr(13), "")
If Trim(strParola) <> "" Then
If voceIndiceTrovata = False Then
parola.Select
numeroPagina = Selection.Information(wdActiveEndPageNumber)
End If
voceIndice = voceIndice & strParola
End If
voceIndiceTrovata = True
Else
If voceIndiceTrovata = True And Trim(voceIndice) <> "" Then
If ArrayVuoto(arrayVociIndice) = True Then
ReDim Preserve arrayVociIndice(0)
Else
ReDim Preserve arrayVociIndice(UBound(arrayVociIndice) + 1)
End If
arrayVociIndice(UBound(arrayVociIndice)) = voceIndice & " >> Pag." & numeroPagina
End If
voceIndice = ""
voceIndiceTrovata = False
End If
Next parola
'Cursore alla fine del documento
Selection.EndKey Unit:=wdStory
'Nuova pagina
Selection.InsertBreak wdPageBreak
'Scrittura indice
Selection.TypeText ("INDICE ANALITICO" & vbCrLf & vbCrLf)
Dim i As Integer
For i = 0 To UBound(arrayVociIndice)
Selection.TypeText (arrayVociIndice(i) & vbCrLf)
Next i
Application.ScreenUpdating = True
End Sub
Adesso la ListBox non serve più, la puoi eliminare. Al suo posto c'è un Array, come già detto, e alla fine del processo l'Indice Analitico viene accodato alla fine del documento, su una nuova pagina. |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
@sonicomorto : posto qui la soluzione finale, dato che si tratta di una piccola modifica al codice precedente.
Quando hai aperto il thread hai parlato di "testo-bold-blu-sottlineato", non hai però menzionato un dettaglio fondamentale : che quelli sono link ! Quindi Word modifica l'apparenza del testo, ma di fatto non ne cambia le proprietà. In un Link blu il colore testo è ancora su Automatico. Perciò per gestire un testo-bold-blu-sottlineato, che sia link oppure no, modificare questa linea : Codice:
If parola.Underline = wdUnderlineSingle And parola.Font.Bold = True And parola.Font.Color = wdColorBlue Then Codice:
If (parola.Underline = wdUnderlineSingle And parola.Font.Bold = True And parola.Font.Color = wdColorBlue) Or (parola.Hyperlinks.Count) > 0 Then |
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 1075
|
Quote:
Grazie infinite, funziona perfettamente!! Creato l'indice copio le voci in excel per ordinarle in ordine alfabetico! Non avrei mai pensato che un lavoro del genere fosse possibile! Sei un genio! Complimenti!
__________________
VENDO PC (clicca qui): ASRock P4VM900-SATA2 appena presa con garanzia + Celeron 2.6ghz + Ram 512mb + altro |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:46.




















