Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

In VBA Excel, copiare nomi segnalibri di un documento Word

298 views
Skip to first unread message

Fabio Pagni

unread,
Oct 23, 2006, 12:35:40 PM10/23/06
to
Salve a tutti. Sto usando Office 2002 e la mia necessità è la
seguente:

Ho un documento Word nel quale a ciascun titolo è associato un
segnalibro, con un nome specifico creato secondo determinate
convenzioni. Quello che voglio fare è costruire un foglio Excel
contenente (tra le altre cose) le relazioni "titolo paragrafo-nome
segnalibro". Per fare questo ho approntato la struttura del foglio
Excel ed ho approntato un pulsante che lancia la mia macro di
acquisizione dati (il tutto è parametrizzato, usando un worksheet
"setup" con il nome del documento ed il percorso).

Cosa faccio:

Sub AggiornaDati()
Dim wrd As Object
Dim percorsoDocumento As String
Dim nomeDocumento As String

percorsoDocumento = Sheets("Setup").Cells(3, 9)
nomeDocumento = Sheets("Setup").Cells(4, 9)

'se il percorso è specificato...
If Trim(nomeDocumento) <> "" Then
'...e non termina con backslash, lo aggiungo
If Right(percorsoDocumento, 1) <> "\" Then
percorsoDocumento = Trim(percorsoDocumento) + "\"
End If
'altrimenti, setto il percorso alla path del file Excel
Else
percorsoDocumento = Application.ActiveWorkbook.Path + "\"
End If

If Trim(nomeDocumento) = "" Then
MsgBox "Specificare il nome del documento Word nel foglio Setup!",
vbCritical
Exit Sub
End If

nomeDocumento = Trim(nomeDocumento)

IsWordRunning = ApplicationIsRunning("Word.Application")
If IsWordRunning = True Then
Set wrd = GetObject(, "Word.Application")
Else
Set wrd = CreateObject("Word.Application")
End If

' wrd.Visible = True
wrd.Documents.Open (percorsoDocumento + nomeDocumento)
------>wrd.Selection.GoTo What: wdGoToBookmark<------
wrd.Selection.Find.ClearFormatting
wrd.Selection.Find.Replacement.ClearFormatting
With wrd.Selection.Find
.Text = ","
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
wrd.Selection.Find.Execute Replace:=wdReplaceAll

wrd.Selection.WholeStory
wrd.Selection.Copy
Sheets("Foglio1").Select
Range("A1").Select
ActiveSheet.PasteSpecial Format:="Testo", Link:=False, DisplayAsIcon:=
_
False
wrd.Quit
Set wrd = Nothing

End Sub

Lasciando perdere il fatto che la procedura non è terminata, e non è
nemmeno così che funzionerà :-P , io so che la riga evidenziata è
sbagliata. Quale sintassi devo adottare per far sì che funzioni?

Grazie mille per il supporto
Fabio Pagni

Tiziano Marmiroli

unread,
Oct 23, 2006, 12:56:29 PM10/23/06
to
Fabio Pagni wrote:
> Salve a tutti. Sto usando Office 2002 e la mia necessità è la
> seguente:
>
> Ho un documento Word nel quale a ciascun titolo è associato un
> segnalibro, con un nome specifico creato secondo determinate
> convenzioni.

> ------>wrd.Selection.GoTo What: wdGoToBookmark<------

> Lasciando perdere il fatto che la procedura non è terminata, e non è


> nemmeno così che funzionerà :-P , io so che la riga evidenziata è
> sbagliata. Quale sintassi devo adottare per far sì che funzioni?

Io non ho capito cosa vorresti ottenere con quell'istruzione, ma ho
capito che ha a che fare col modello di oggetti di Word e non di Excel,
quindi faresti meglio a chiedere su microsoft.public.it.office.word
specificando meglio cosa vuoi ottenere.

Magari prima di postare fai una ricerca tipo:
http://groups.google.com/groups?as_q=bookmarks&as_ugroup=microsoft.public.it.office.word
per vedere se trovi l'ispirazione.

--
Tiziano Marmiroli
Microsoft MVP - Office System

elby

unread,
Oct 23, 2006, 6:39:46 PM10/23/06
to
Ciao Fabio
Credo che manchi l'argomento Name nel metodo GoTo dell'oggetto
Selection
Prova qualcosa come
Selection.GoTo What:=wdGoToBookmark, Name:="MioSegnalibro"
Ovviamente non so se questo risolve i tuoi problemi; forse ti serve
la proprietà BookmarkID della selezione corrente dopo che con un
istruzione VBA avrai spostato la selezione a comprendere il titolo
comprendente il segnalibro. La proprietà BookmarkID ti restituisce un
valore Long corrispondente all'indice dell'insieme Bookmarks
dell'ActiveDocument; grazie all'indice potrai risalire al nome del
bookmark associato al titolo con una istruzione del tipo
activeDocument.Bookmarks(1).Name riferito al primo segnalibro.
Ciao Elio
Fabio Pagni ha scritto:

elby

unread,
Oct 23, 2006, 6:40:06 PM10/23/06
to
Ciao Fabio
Credo che manchi l'argomento Name nel metodo GoTo dell'oggetto
Selection
Prova qualcosa come
Selection.GoTo What:=wdGoToBookmark, Name:="MioSegnalibro"
Ovviamente non so se questo risolve i tuoi problemi; forse ti serve
la proprietà BookmarkID della selezione corrente dopo che con un
istruzione VBA avrai spostato la selezione a comprendere il titolo
comprendente il segnalibro. La proprietà BookmarkID ti restituisce un
valore Long corrispondente all'indice dell'insieme Bookmarks
dell'ActiveDocument; grazie all'indice potrai risalire al nome del
bookmark associato al titolo con una istruzione del tipo
activeDocument.Bookmarks(1).Name riferito al primo segnalibro.
Ciao Elio
Fabio Pagni ha scritto:

> Salve a tutti. Sto usando Office 2002 e la mia necessità è la

Fabio Pagni

unread,
Oct 24, 2006, 4:16:09 AM10/24/06
to
ciao e grazie per l'aiuto.

@Tiziano: ho postato sul NG Excel perché io so come fare operazioni
sui bookmark dal VBA di Word, il problema è come farle da Excel, dato
che la sintassi del comando con i due punti non è accettata dal VBA di
Excel. Proverò cmq a chiedere aiuto anche nell'altro NG.
Quello che voglio fare con quell'istruzione è cercare il bookmark
successivo alla posizione del cursore. All'apertura del documento Word
il cursore è come se si trovasse all'inizio. In pratica equivale
all'operazione "Vai a..Segnalibro" effettuabile dall'interfaccia utente
di Word.
Quello che intendo fare è, una volta posizionato il cursore,
selezionare il titolo e copiarlo nella clipboard. Il resto dovrebbe
essere facile.

@elby: grazie dell'aiuto. in effetti l'istruzione che hai postato è
proprio quella che intendo fare, ma la sintassi con i due punti e
l'uguale non mi viene accettata dal VBA di Excel, per cui volevo sapere
se avevate idea di come fare.

Grazie di nuovo
Fabio


elby ha scritto:

Tiziano Marmiroli

unread,
Oct 24, 2006, 6:03:50 AM10/24/06
to
Il 24 Oct 2006 01:16:09 -0700, Fabio Pagni ha scritto:

> @Tiziano: ho postato sul NG Excel perché io so come fare operazioni

> sui bookmark dal VBA di Word, il problema č come farle da Excel, dato
> che la sintassi del comando con i due punti non č accettata dal VBA di
> Excel.

Neanche da quello di Word. O meglio: i due punti servono a separare due
istruzioni scritte sulla stessa riga.

wrd.Selection.GoTo What:=wdGoToBookmark

elby

unread,
Oct 24, 2006, 6:46:41 AM10/24/06
to
Ciao Fabio
Non credo sia un problema di VBA di Excel o di Word. Il VBA è unico
cambiano solo le librerie di oggetti. Una volta che in Excel hai
caricato la libreria di Word in riferimenti la sintassi è uguale (
Automation) a parte la qualificazione completa fino alla applicazione
madre degli oggetti dell'applicazione ospite ( nel tuo caso word).
Piuttosto osservo solo ora, grazie al post di Tiziano, che nella tua
istuzione manca il segno uguale dopo i due punti.
Fammi sapare se hai risolto.
Fabio Pagni ha scritto:

Fabio Pagni

unread,
Oct 24, 2006, 7:31:44 AM10/24/06
to
avevo tolto l'uguale perché mi dava errore di sintassi. da qualche
parte sul NG avevo trovato un esempio senza l'uguale e l'avevo copiato.

alla fine mancava il riferimento alla libreria di Word nei
riferimenti...

grazie a tutti e due x l'aiuto

ciao, alla prossima

0 new messages