Discussione:
Segnalibri e inserimento testo
(troppo vecchio per rispondere)
casanmaner
17 anni fa
Permalink
Ciao a tutti vi pongo questo problema che non sono riuscito a risolvere
(sicuramente per la mia scarsa conoscnza degli oggetti word).
Ho un sengalibro inserito in un certo paragrafo. Vorrei inserire del testo
in corrispondenza del segnalibro (tramite una procedura vba che va a
prendere il testo da inserire da una listbox di una userform).
Fino a qui non ci sono stati grossi problemi. Eseguo questo codice:
ActiveDocument.Bookmarks("Titolo").Range.InsertAfter Trim(.List(.ListIndex,
11))

Però se per caso vado a ripetere il comando, come è logico che sia visto che
effettuo un inserimento di testo (InsertAfter), quanto prima inserito viene
manutenuto e viene aggiunto nuovamente altro testo.

Come potrei fare in modo che il testo eventualmente inserito in precedenza
venga "sostituito" con il nuovo testo?

Ho provato ma non ci sono proprio riuscito.

Ciao
Giovanni Zezza
17 anni fa
Permalink
Post by casanmaner
Ho un sengalibro inserito in un certo paragrafo. Vorrei inserire del testo
in corrispondenza del segnalibro (tramite una procedura vba che va a
prendere il testo da inserire da una listbox di una userform).
E facciamo finta che la cosa abbia un senso.
Post by casanmaner
Come potrei fare in modo che il testo eventualmente inserito in precedenza
venga "sostituito" con il nuovo testo?
Ho provato ma non ci sono proprio riuscito.
Hai un Range, che cosa puoi non riuscire a fare? o che cosa hai mai
provato, per non riuscire a fare quello che vuoi?

Puoi cancellare il testo precedente (metodo Range.Delete) prima di inserire
il nuovo (con questo, viene naturalmente eliminato anche il segnalibro, ma
che ti frega? hai un range!, lo reinserisci: metodo Range.Bookmarks.Add);

Puoi sostituire il testo (questo può disturbare la formattazione e
cancellare il segnalibro, ma tanto HAI UN RANGE, li rimetti a posto):
Range.Text = "nuovo testo";

Puoi... HAI UN RANGE! ...

Ciao.
casanmaner
17 anni fa
Permalink
Post by Giovanni Zezza
E facciamo finta che la cosa abbia un senso.
Perdona ma tu come fai a dire che non avrebbe senso senza sapere perché ho
una user form con dei dati da inserire in un documento word? Mah?
Comunque ho una carta intesta (un modello impostato in un certo modo), che
mi fa da "lettera". In questa carta intesta ci sono degli spazi dedicati al
nome e indirizzo dei clienti.
Ovviamente non ricordo a memoria gli indirizzi dei miei clienti e quindi
vado a ricercare i dati nei vari archivi di contabilità o fiscali dove sono
inserite la varie anagrafiche dei clienti.
Queste anagrafiche non sono "accessibili" da programmi esterni.
Allora ho creato una anagrafica in Outlook.
A questo punto però non ho risolto il "problema" di dover comunque andare in
Outlook, guardare qual è l'indirizzo del cliente, scrivere questo indirizzo
nel documento nuovo.
Per questo ho creato una procedura che preleva i dati da outlook, li passa
ad una listbox della
user form che richiamo tramite una barra dei menù personalizzata che viene
creata quando creo un nuovo documento dal modello. Ho anche impostato,
considerato che ho diverse cartelle contatti, la possibilità di scegliere da
quale di queste cartelle andare a prendere i nomi.
Tramite il doppio click sulla list box vado ad inserire i dati presenti nel
documento in base ai segnalibri che ho inserito.
Esempio
Titolo
CongomeNome
Indirizzo
Città
.... altre informazioni varie
Post by Giovanni Zezza
Puoi... HAI UN RANGE! ...
Che io avessi un range a disposizione l'avevo capito. Infatti stavo cercando
di partire dal renge del sengalibro. Il problema è che non conoscendo a
fondo
gli oggetti, i metodi e le proprieta di word, trovo più difficolta rispetto,
ad es., ad Excel a gestire questi tipi di range.
Ho provato e riprovato e a "intercettare" solo il testo che vorrei eliminare
ma non ci sono riuscito.
Immagino benissimo che si possa eliminare testo (ad es. range.delete wdword,
1 elimina una parola in avanti) e quant'altro. Il problema è
come fare ad eliminare solo un certo testo che però non è detto sia sempre
composto dallo stesso numero di lettere e parole. Possibilmente senza andare
ad eliminare i segnalibro che mi servono come riferimento in punti specifici
del documento.
Detto questo e se ne avrai voglia, ovviamente, tu come faresti ad es. per
eliminare il seguente testo da un paragrafo:
Egr. Dott.
tenuto conto che vi è un sengalibro, di nome "Titolo", che precede il
suddetto testo. Segnalibro che mi serve per individure dove inserire nel
documento la c.d. formula di cortesia che si usa nelle lettere, prima del
nominativo della persona a cui si sta scrivendo.

Provando e riprovando avrei trovato questa soluzione che però non mi
soddisfa pienamente perché prevede la selezione dell'"oggetto". Cosa che
normalmente, se posso, evito.
ActiveDocument.Bookmarks("x").Select
Selection.MoveDown Unit:=wdParagraph, Count:=1, Extend:=wdExtend
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Delete
Selection.Bookmarks.Add "x"


ciao

P.s. ma se tu in un NG fiscale chiedessi se e a che condizioni si possono
detrarre gli interessi passivi dell'abitazione principale io ti rispondessi
che c'è il TUIR riterresti utile la mia risposta? ;-)
casanmaner
17 anni fa
Permalink
Ulteriore particolare. Nell'eliminare quel dato testo non dovrei andare ad
eliminare il paragrafo per eliminare eventualmente altri dati presenti nel
paragrafo successivo.
ciao
casanmaner
17 anni fa
Permalink
Post by casanmaner
Ulteriore particolare. Nell'eliminare quel dato testo non dovrei andare ad
eliminare il paragrafo per eliminare eventualmente altri dati presenti nel
... voleva essere " non dovrei andare ad eliminare il paragrafo per evitare
di eliminare altri dati presenti nei paragrafi successivi"
ciao
Giovanni Zezza
17 anni fa
Permalink
casanmaner, nel messaggio
Post by casanmaner
Perdona ma tu come fai a dire che non avrebbe senso senza sapere perché ho
una user form con dei dati da inserire in un documento word? Mah?
E a che cosa mi servirebbe saperlo?

Avendo una user form con dei dati da inserire in un documento word, io
risolverei il problema in tutt'altro modo, e mai e poi mai ricorrerei
a dei segnalibri, sistema che continua a sembrarmi insensato
precisamente in relazione al problema che hai (sono certo che i
segnalibri sono la soluzione perfetta per altri problemi).

Ci sono, ne sono certo, almeno quattro diversi modi, tutti più
semplici e intelligenti, per risolvere il medesimo problema (i campi
modulo, per esempio, non sono pensati esattamente a questo scopo?).

È ben vero, comunque, che io non sono la misura di tutte le cose.
Sicché, "facciamo finta che la cosa abbia un senso".
Post by casanmaner
Che io avessi un range a disposizione l'avevo capito. Infatti stavo
cercando di partire dal renge del sengalibro. Il problema è che non
conoscendo a fondo gli oggetti, i metodi e le proprieta di word, trovo
più difficolta rispetto, ad es., ad Excel a gestire questi tipi di
range.
Mi sembra che la documentazione di Word sia dov'è sempre stata. Non è
che devi imparare tutto in una volta: ti tieni aperto l'help, alla
struttura oggetti, e man mano che ti serve qualcosa ci guardi.
Post by casanmaner
Ho provato e riprovato e a "intercettare" solo il testo che vorrei
eliminare ma non ci sono riuscito.
Ma hai capito che cos'è un Range? il Range definisce già una porzione
di testo.

E hai capito che cos'è un segnalibro? il segnalibro individua un
Range, cioè una porzione di testo, non un punto nel testo.

Se definisci il segnalibro come il testo su cui vuoi intervenire, non
hai più bisogno di andartelo a cercare in giro.
Post by casanmaner
Detto questo e se ne avrai voglia, ovviamente, tu come faresti ad es. per
Egr. Dott.
tenuto conto che vi è un sengalibro, di nome "Titolo", che precede il
suddetto testo.
E perché definisci il segnalibro come qualcosa che "precede" il testo,
invece che quello che esattamente lo individua? non sarebbe più
semplice?
Post by casanmaner
Provando e riprovando avrei trovato questa soluzione che però non mi
soddisfa pienamente perché prevede la selezione dell'"oggetto". Cosa che
normalmente, se posso, evito.
ActiveDocument.Bookmarks("x").Select
Selection.MoveDown Unit:=wdParagraph, Count:=1, Extend:=wdExtend
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Delete
Selection.Bookmarks.Add "x"
Dim Brano as Range
Set Brano = ActiveDocument.Bookmarks("x").Range

E da lì fai quello che vuoi con Brano.

Brano.MoveDown...

Se vuoi tutti i paragrafi di un Range, puoi usare la proprietà
Paragraphs, invece di muoverti in su e in giù. Se il Range è
collassato, Range.Paragraphs(1) ti restituisce comunque tutto il
paragrafo in cui è contenuto.

Quindi:

Set Brano = Set Brano = ActiveDocument.Bookmarks("x").Range
Set Brano = Brano.Paragraphs(1)
Brano.MoveEnd Unit:=wdCharacter, Count:=-1
Brano.Delete
Brano.Bookmarks.Add "x"

Tutto questo a prescindere dal fatto che usare i segnalibri per questo
lavoro non ha un gran senso, e che usarli in questo modo non è molto
intelligente: perché il segnalibro "Titolo" non si può riferire a
tutto il titolo (tutto "Egr. Dott.", "Egr. Sig." o quel che è) invece
che al punto prima o dopo? da cui:

Brano.Text = "Gentile Signora"

e fine della storia.
Post by casanmaner
P.s. ma se tu in un NG fiscale chiedessi se e a che condizioni si possono
detrarre gli interessi passivi dell'abitazione principale io ti rispondessi
che c'è il TUIR riterresti utile la mia risposta? ;-)
Certamente più utile che la spiegazione parziale e approssimativa che
si può dare in un messaggio su un gruppo. Sì, il riferimento alla
documentazione ufficiale è sempre utile.

Ciao.
casanmaner
17 anni fa
Permalink
Post by Giovanni Zezza
casanmaner, nel messaggio
Post by casanmaner
Perdona ma tu come fai a dire che non avrebbe senso senza sapere perché ho
una user form con dei dati da inserire in un documento word? Mah?
E a che cosa mi servirebbe saperlo?
Perché senza sapere cosa uno vuol fare è difficile decidere se ciò che sta
facendo sia la cosa migliore.
Se invece non interessa sapere allora forse non sarebbe il caso di fare
commenti.
Post by Giovanni Zezza
Avendo una user form con dei dati da inserire in un documento word, io
risolverei il problema in tutt'altro modo, e mai e poi mai ricorrerei
a dei segnalibri, sistema che continua a sembrarmi insensato
precisamente in relazione al problema che hai (sono certo che i
segnalibri sono la soluzione perfetta per altri problemi).
Evidentemente sei più bravo di me e hai una maggiore esperienza.
Però dire "facciamo finta che la cosa abbia un senso" non è utile.
Io sono abituato a lavorare con excel e a nominare i campi che mi
interessano in modo che il riferimento sia univoco.
Evidentemente questa forma mentis mi porta a ricreare la medesima situazione
in word.
Magari non sarà il modo migliore di agire ma, considerato che non ho
tantissimo tempo per apprendere il nuovo linguaggio (da qui a pochi giorni
non avrò molto tempo per giocare e mi dovrò edicare allo studio della nuova
finanziaria), al momento mi limito a cercare di ragionare come sono abituato
a fare.
Post by Giovanni Zezza
Ci sono, ne sono certo, almeno quattro diversi modi, tutti più
semplici e intelligenti, per risolvere il medesimo problema (i campi
modulo, per esempio, non sono pensati esattamente a questo scopo?).
Infatti ho anche un modello impostato con dei campi modulo.
Però ho anche la necessità di avere un documento più libero e non vincolato
ad un documento con campi modulo però già impostato in quanto ad alcuni
spazi che vorrei che rimanessero così senza andare a doverli ricreare
tramite codice.
Post by Giovanni Zezza
Mi sembra che la documentazione di Word sia dov'è sempre stata. Non è
che devi imparare tutto in una volta: ti tieni aperto l'help, alla
struttura oggetti, e man mano che ti serve qualcosa ci guardi.
Sarà forse perché sono abituato a libri di testo un po' meno schematici ma
le istruzioni di Word (ma anche quelle di Excel e Outlook in generale) non
sono il massimo per comprendere di primo acchito ciò che riferiscono. E non
è che non le ho guardate per cercare di capire come muovermi.
Post by Giovanni Zezza
Ma hai capito che cos'è un Range? il Range definisce già una porzione
di testo.
E hai capito che cos'è un segnalibro? il segnalibro individua un
Range, cioè una porzione di testo, non un punto nel testo.
Magari sbagliando partivo dal significato di sengalibro.
Il quale serve per segnare il punto (la pagina in un normale libro) in cui
si è arrivati in un libro.
Leggendo quanto scritto da Maurizio ho capito che, in word, può contenere
anche un dato testo.
Post by Giovanni Zezza
Se definisci il segnalibro come il testo su cui vuoi intervenire, non
hai più bisogno di andartelo a cercare in giro.
Io inizialmente non ho alcun testo. Ho solo degli "spazi" vuoti.
La mia intezione è scrivere in un dato spazio del documento un dato testo.
Spazio che identifico tramite un segnalibro.
A te potrà non sembrare intelligente ma accetta questa situazione.
Post by Giovanni Zezza
E perché definisci il segnalibro come qualcosa che "precede" il testo,
invece che quello che esattamente lo individua? non sarebbe più
semplice?
Credo che oramai avrai capito il perché. Non so se sarebbe più semplice. Al
momento non sono in grado di saperlo.
Se un domani, conoscendo meglio lo strumento mi renderò conto che non è più
semplice modificherò la strategia.
Al momento ragiono così.
Post by Giovanni Zezza
Post by casanmaner
P.s. ma se tu in un NG fiscale chiedessi se e a che condizioni si possono
detrarre gli interessi passivi dell'abitazione principale io ti rispondessi
che c'è il TUIR riterresti utile la mia risposta? ;-)
Certamente più utile che la spiegazione parziale e approssimativa che
si può dare in un messaggio su un gruppo. Sì, il riferimento alla
documentazione ufficiale è sempre utile.
Sono certo che poi verresti e chiederesti come comportarti nello specifico
;-)
ciao e grazie comunque
Giovanni Zezza
17 anni fa
Permalink
casanmaner, nel messaggio
Post by casanmaner
Perché senza sapere cosa uno vuol fare è difficile decidere se ciò che sta
facendo sia la cosa migliore.
"Che cosa", non "perché"; rileggi quello che hai scritto: "senza
sapere PERCHÉ ho una user form...". Che cosa volevi fare l'ho capito
dalla prima riga del tuo messaggio, ed è esattamente per quello che
volevi fare che stimo inappropriato, o comunque non ottimale, lo
strumento che hai scelto. Il "perché" è irrilevante.
Post by casanmaner
Io sono abituato a lavorare con excel e a nominare i campi che mi
interessano in modo che il riferimento sia univoco.
Evidentemente questa forma mentis mi porta a ricreare la medesima situazione
in word.
O cambi la forma mentis, o usi gli strumenti che, in Word, ti
consentono di mantenerla (e non sono i segnalibri). Ricreare, in Word,
la medesima situazione, vuol dire usare altri mezzi (e ci sono: campi
modulo, variabili documento...).
Post by casanmaner
Io inizialmente non ho alcun testo. Ho solo degli "spazi" vuoti.
La mia intezione è scrivere in un dato spazio del documento un dato testo.
Spazio che identifico tramite un segnalibro.
Non ha nessuna importanza se, all'inizio, il segnalibro è collassato
in un punto. Prendi il range relativo e cominci a scrivere, perché
devi muoverti in giro? nel momento in cui ci hai scritto qualcosa,
puoi ridefinire il segnalibro in modo che contenga il testo scritto,
così che, al successivo intervento (se si rendesse necessario), non
c'è bisogno di spostarsi.

Sub test2()
Dim AD As Document
Dim bmk As Word.Bookmark
Dim bmkrng As Word.Range
Set AD = ActiveDocument
Set bmk = AD.Bookmarks.Item("BMK1")
Set bmkrng = bmk.Range
bmkrng.Text = "Ma vieni!!!!! :-)"
bmkrng.Bookmarks.Add "BMK1"
End Sub

Dopo l'inserimento (o l'assegnazione alla proprietà Text), il Range
viene esteso a tutto il testo inserito.

Se ti disturba il fatto di ridefinire il segnalibro, fa in modo (come
ti è stato suggerito) che all'inizio il segnalibro contenga uno spazio
finale (o lo stesso segno di paragrafo), che non modifichi mai, in
modo che il segnalibro resti definito:

Sub test2()
Dim AD As Document
Dim bmk As Word.Bookmark
Dim bmkrng As Word.Range
Set AD = ActiveDocument
Set bmk = AD.Bookmarks.Item("BMK1")
Set bmkrng = bmk.Range
bmkrng.MoveEnd Unit:=wdCharacter, Count:=-1
bmkrng.Text = "Ma vieni!!!!! :-)"
End Sub
Post by casanmaner
Post by Giovanni Zezza
E perché definisci il segnalibro come qualcosa che "precede" il testo,
invece che quello che esattamente lo individua? non sarebbe più
semplice?
Credo che oramai avrai capito il perché.
No, francamente non mi riesce proprio di capirlo.
Post by casanmaner
Sono certo che poi verresti e chiederesti come comportarti nello specifico
Sono certo che, se nello specifico avessi dichiarato di volermi
comportare in un modo che tu reputi stupido, mi diresti "stai facendo
una cosa stupida".

Ciao.
casanmaner
17 anni fa
Permalink
Post by Giovanni Zezza
O cambi la forma mentis, o usi gli strumenti che, in Word, ti
consentono di mantenerla (e non sono i segnalibri). Ricreare, in Word,
la medesima situazione, vuol dire usare altri mezzi (e ci sono: campi
modulo, variabili documento...).
Ripeto ... quando avrò compreso meglio lo strumento potrò anche cambiare
forma mentis.
Al momento non ho le risorse (leggi tempo) necessarie.
In questo momento avevo bisogno di una soluzione che non riuscivo a trovare.
Tutto qui.
Post by Giovanni Zezza
Post by casanmaner
Io inizialmente non ho alcun testo. Ho solo degli "spazi" vuoti.
La mia intezione è scrivere in un dato spazio del documento un dato testo.
Spazio che identifico tramite un segnalibro.
Non ha nessuna importanza se, all'inizio, il segnalibro è collassato
Per fare un esempio quando dici che il segnalibro è collassato non è che ne
comprenda a pieno il significato.
Immagino che intenda dire che non contiene alcun testo. Ma tutto ciò parte
dal presupposto che il segnalibro contenga del testo. Presupposto che, come
ho detto non conoscevo. Come ho detto, ho ragionato sul significato
letterale del termine (anche qui viene fuori la mi forma mentis in base alla
quale ragiono sul significato letterale che le parole hanno).
Post by Giovanni Zezza
Sono certo che, se nello specifico avessi dichiarato di volermi
comportare in un modo che tu reputi stupido, mi diresti "stai facendo
una cosa stupida".
Ti direi come comportarti .... perché immagino che chi pone un quesito è
perché non conosce la materia.
Grazie ancora e ciao
Giovanni Zezza
17 anni fa
Permalink
casanmaner, nel messaggio
Post by casanmaner
Per fare un esempio quando dici che il segnalibro è collassato non è che ne
comprenda a pieno il significato.
Intendo dire che il corrispondente Range è collassato, e che cosa
significa che un Range è collassato ti dovrebbe essere chiaro dal
metodo Range.Collapse: un Range collassato (o compresso) è un Range in
cui il punto iniziale coincide con il punto finale.

Dal momento che la selezione (oggetto Selection) non è altro che un
tipo particolare di Range, hai anche una rappresentazione visiva
immediata di quello che succede: normalmente la selezione è compressa:
punto iniziale e punto finale coincidono con il punto in cui è il
cursore; puoi però estenderla selezionando parole, paragrafi, fino
all'intero documento. Una volta estesa puoi ricomprimerla (e puoi
farlo facendo coincidere l'inizio con la fine, (Range.Collapse
wdCollapseEnd), o viceversa, la fine con l'inizio (Range.Collapse
wdCollapseStart)), e così via.

Un Range ("intervallo") è definito da un punto iniziale (Start) e da
un punto finale (End); se punto iniziale e punto finale coincidono si
dice che il Range è "compresso". È un'idea perfettamente analoga a
quella geometrica di "segmento", che "degenera" ("collassa", "si
comprime"...) in un punto quando il punto iniziale e quello finale
coincidono.

Ciao.
Giovanni Zezza
17 anni fa
Permalink
Giovanni Zezza, nel messaggio
Post by Giovanni Zezza
Set Brano = Set Brano = ActiveDocument.Bookmarks("x").Range
Set Brano = Brano.Paragraphs(1)
Set Brano = Brano.Paragraphs(1).Range
Post by Giovanni Zezza
Brano.MoveEnd Unit:=wdCharacter, Count:=-1
Brano.Delete
Brano.Bookmarks.Add "x"
Ciao.
casanmaner
17 anni fa
Permalink
Post by Giovanni Zezza
Giovanni Zezza, nel messaggio
Post by Giovanni Zezza
Set Brano = Set Brano = ActiveDocument.Bookmarks("x").Range
Set Brano = Brano.Paragraphs(1)
Set Brano = Brano.Paragraphs(1).Range
Post by Giovanni Zezza
Brano.MoveEnd Unit:=wdCharacter, Count:=-1
Brano.Delete
Brano.Bookmarks.Add "x"
Grazie proverò anche così
ciao
Post by Giovanni Zezza
Ciao.
Maurizio Borrelli
17 anni fa
Permalink
"***@tin.it" wrote in message news:***@4ax.com:

[...]
Post by Giovanni Zezza
Ma hai capito che cos'è un Range? il Range definisce già una porzione
di testo.
E hai capito che cos'è un segnalibro? il segnalibro individua un
Range, cioè una porzione di testo, non un punto nel testo.
Ciao Giovanni.

Le cose non stanno esattamente cosi'. Un segnalibro puo' identificare
anche un punto nel testo. E' il caso dei segnalibri vuoti. La seguente:

Property Empty As Boolean
sola lettura
Membro di Word.Bookmark

serve proprio a questo. Leggi cosa dice in proposito la guida:

"Un segnalibro vuoto serve a contrassegnare un punto, ovvero una
selezione compressa, anziché un testo."

--
Ciao :o) Microsoft MVP (Excel)
Maurizio https://mvp.support.microsoft.com/profile/Maurizio.Borrelli
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) http://spdmb.spaces.live.com
 X       RIO - Risorse in italiano per gli utenti di office
-------- http://www.riolab.org
casanmaner
17 anni fa
Permalink
Post by Maurizio Borrelli
Le cose non stanno esattamente cosi'. Un segnalibro puo' identificare
Property Empty As Boolean
sola lettura
Membro di Word.Bookmark
"Un segnalibro vuoto serve a contrassegnare un punto, ovvero una selezione
compressa, anziché un testo."
Quindi quello che è il significato letterale del termine :-)
Comunque il fatto che il segnalibro in word possa contenere del testo è
sicuramente molto utile e rende "inutile" la soluzione che avevo trovato la
quale, però, aveva una sua logica nel momento in cui non sapevo di poter
"popolare" il segnalibro stesso. Visto che al sengalibro posso assegnare un
testo e che una volta individuato il range in cui lo stesso si trovava posso
comunque reimpostarlo nello stesso "spazio" (come fatto nell'ultimo esempio
di Giovanni) utilizzerò questo metodo che sicuramente è più "logico".
Per fare un altro esempio di un concetto che non mi è chiaro (e che è
riportato nel testo della guida da te indicato) è quello di "selezione
compressa". E una terminologia che ho incontrato, ad es. in collapse dove si
dice che un intervallo o una selezione viene compressa ("Comprimere un
intervallo o una selezione ..."), ma che non mi rende l'idea di cosa voglia
significare materialmente. Magari prima o poi ci arriverò :-)

Comunque ancora grazie a tutti e due
ciao
Post by Maurizio Borrelli
--
Ciao :o) Microsoft MVP (Excel)
Maurizio https://mvp.support.microsoft.com/profile/Maurizio.Borrelli
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) http://spdmb.spaces.live.com
X RIO - Risorse in italiano per gli utenti di office
-------- http://www.riolab.org
Maurizio Borrelli
17 anni fa
Permalink
Ciao casanmaner.
Post by casanmaner
Post by Maurizio Borrelli
"Un segnalibro vuoto serve a contrassegnare un punto, ovvero una
selezione compressa, anziché un testo."
Quindi quello che è il significato letterale del termine :-)
Esatto.
...
Si', pero'...

Pero' piu' logico, in questo caso, sarebbe usare un altro mezzo messo a
disposizione da Word. Uno di quelli cui faceva allusione l'ottimo e
bizzoso Giovanni. Le proprieta' oppure le variabili del documento.

Personalmente uso le proprieta' quando voglio che i valori variabili
siano accessibili all'utente, le variabili negli altri casi e il tuo
caso pare proprio adatto all'uso di variabili.

Vuoi provare a meditare sulla questione da solo, per un po'? Poi
eventualmente ripassi per chiarimenti...
Post by casanmaner
Per fare un altro esempio di un concetto che non mi è chiaro (e che è
riportato nel testo della guida da te indicato) è quello di "selezione
compressa". E una terminologia che ho incontrato, ad es. in collapse
dove si dice che un intervallo o una selezione viene compressa
("Comprimere un intervallo o una selezione ..."), ma che non mi rende
l'idea di cosa voglia significare materialmente. Magari prima o poi ci arriverò :-)
Se passi in visualizzazione "Struttura" ti sara' immediatamente chiaro.
Osserva i pulsanti:

[ + ] Espandi
[ - ] Comprimi

e prova un po' a giocarci.

--
(Facci sapere se e eventualmente come hai risolto. Grazie.)

Ciao :o) Microsoft MVP (Excel)
Maurizio https://mvp.support.microsoft.com/profile/Maurizio.Borrelli
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) http://spdmb.spaces.live.com
 X       RIO - Risorse in italiano per gli utenti di office
-------- http://www.riolab.org
casanmaner
17 anni fa
Permalink
Post by Maurizio Borrelli
Pero' piu' logico, in questo caso, sarebbe usare un altro mezzo messo a
disposizione da Word. Uno di quelli cui faceva allusione l'ottimo e
bizzoso Giovanni. Le proprieta' oppure le variabili del documento.
Personalmente uso le proprieta' quando voglio che i valori variabili siano
accessibili all'utente, le variabili negli altri casi e il tuo caso pare
proprio adatto all'uso di variabili.
Diciamo che in quegli "spazi" potrei anche voler inserire dei dati non
prelevati per forza di cose dall'elenco dei clienti.
Cerco la flessibilità perché non è detto che non debba scrivere qualcosa a
qualcuno che al momento non ho "profilato", ma di cui ho comunque i dati
(magari non ho interesse di creare l'anagrafica).
Le proprietà le utilizzo per memorizzare dati che non ho modo di lasciare
nel documento.
Ad es. nel modello a cui sto lavorando (beh adesso sarebbe anche completo
volendo)
ho creato una proprietà "Contatti_Default" dove memorizzo il nome
dell'ultima cartella contatti di outlook utilizzata. Il dato viene
modificato tramite l'onaction
di un combobox della barra degli strumenti personalizzata. In pratica vado a
dare a CustomDocumentProperties("Contatti_Default") il testo presente nella
combobox. Il modello poi viene salvato e all'apertura di un nuovo documento
successivo viene riproposto come "predefinito" il nome della cartella
utilizzata per ultimo.

Per quanto riguarda le variabili di documento ho provato a cercare nelle
istruzioni e ho trovato quanto segue:

''''
Codici di campo: campo DocVariable
{ DOCVARIABLE "Nome" }

Consente di inserire la stringa assegnata a una variabile di documento. Ogni
documento contiene un insieme di variabili alle quali è possibile
aggiungerne altre e fare riferimento ad esse utilizzando Visual Basic,
Applications Edition. Con questo campo è possibile visualizzare il contenuto
delle variabili di documento nel documento.

Istruzioni

"Nome"
Il nome della variabile di documento

Nota Per ulteriori informazioni sulle variabili di documento, vedere
l'argomento relativo alla proprietà Variables nella Guida di Visual Basic,
Applications Edition. Se la Guida non è installata, rieseguire il programma
di installazione.

'''

E' questo a cui ti riferisci con variabili documento?
Post by Maurizio Borrelli
Vuoi provare a meditare sulla questione da solo, per un po'? Poi
eventualmente ripassi per chiarimenti...
Ma certo. Di solito cerco di risolverle da solo le cose. Proprio quando vedo
che non riesco a nulla chiedo possibili chiarimenti.
Post by Maurizio Borrelli
Se passi in visualizzazione "Struttura" ti sara' immediatamente chiaro.
[ + ] Espandi
[ - ] Comprimi
e prova un po' a giocarci.
Ok ci giocherò e vedrò di "materializzare" il concetto.
Grazie e ciao
Maurizio Borrelli
17 anni fa
Permalink
Post by casanmaner
Post by Maurizio Borrelli
Pero' piu' logico, in questo caso, sarebbe usare un altro mezzo messo
a disposizione da Word.
[...]
Post by casanmaner
Post by Maurizio Borrelli
Le proprieta' oppure le variabili del documento.
[...]
Post by casanmaner
Diciamo che in quegli "spazi" potrei anche voler inserire dei dati non
prelevati per forza di cose dall'elenco dei clienti.
Cerco la flessibilità
[...]

Nessuno meglio di te sa quel che ti serve. Ho fatto un azzardo quando ho
detto cosa fosse, secondo me, piu' logico usare perche' effettivamente
non ho del tutto chiaro quali siano i tuoi scopi.
Post by casanmaner
Per quanto riguarda le variabili di documento ho provato a cercare nelle
Codici di campo: campo DocVariable
{ DOCVARIABLE "Nome" }
Consente di inserire la stringa assegnata a una variabile di documento.
Ogni documento contiene un insieme di variabili alle quali è possibile
aggiungerne altre e fare riferimento ad esse utilizzando Visual Basic,
Applications Edition.
[...]
Post by casanmaner
E' questo a cui ti riferisci con variabili documento?
Si'. Quando scrivo "variabili del documento" mi riferisco proprio alle
"variabili del documento". :D

--
Ciao :o) Microsoft MVP (Excel)
Maurizio https://mvp.support.microsoft.com/profile/Maurizio.Borrelli
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) http://spdmb.spaces.live.com
 X       RIO - Risorse in italiano per gli utenti di office
-------- http://www.riolab.org
casanmaner
17 anni fa
Permalink
Post by Maurizio Borrelli
[...]
Post by casanmaner
Diciamo che in quegli "spazi" potrei anche voler inserire dei dati non
prelevati per forza di cose dall'elenco dei clienti.
Cerco la flessibilità
[...]
Nessuno meglio di te sa quel che ti serve. Ho fatto un azzardo quando ho
detto cosa fosse, secondo me, piu' logico usare perche' effettivamente non
ho del tutto chiaro quali siano i tuoi scopi.
Molto semplicemente un modellino di "lettera" su "carta" che ho
personalizzato dove ho unaprima sezione formattata (margini di pagina e
rientri dei praragrafi) in modo che piegando in tre il foglio i dati quali
Cognome Nome/Denominazione, Indirizzo, Cap e Città, siano visibili nelle
buste con finestra.
Il resto del corpo, in una seconda sezione con differenti margini di pagina
e rientri differenti dei paragrafi, libero per scrivere ciò che si vuole.
La necessità (comodità) visto che ho iniziato ad utilizzare Outlook per
impegni, appuntamenti e contatti è quella di non dover di volta in volta
andare a leggermi gli indirizzi per poi riportarli, magari sbagliando, a
mano (a tasti).
A questo punto lo scoglio per me era di capire dove andare ad inserire
questi dati. Insomma trovare il range.
Con excel avrei nominato delle celle e avrei inserito li i dati. Ma Excel
non è fatto per scrivere :-)
Con word i riferimenti sono più "labili" per così dire.
Avevo, in questi giorni, già impostato un modello con dei campi/modulo che
però è protetto e il cui testo, inserito in un modulo campo dedicato al
corpo della lettera, non è formattabile a piacere (a meno che non mi sia
reso conto che sia possibile per la mia ignoranza nell'uso di word). Ero
partito da un modello con i moduli campo già impostati e mi sono limitato ad
aggiungere la form (che avevo già creato per un programmino che utilizzo per
la fatturazione e che ho semplicemente "adeguato" alle nuove esigenze).
Con i campi/modulo è stato più semplice in quanto hanno un riferimento
univoco. Ho dovuto solo cercare qual era il linguaggio per "popolarli"
Però volevo anche un modellino più libero sul quale avere la possibilità di
maggiore elasticità rispetto alla formattazione del corpo del testo ma
mantenendo la possibilità di andare ad inserire i dati dei clienti dalla
form che comunque avevo già creato. Sai com'è si cerca sempre l'economia di
scala :-)
Per questo motivo ero partito dai segnalibro. Ho ragionato, magari male per
carità, che se avessi avuto dei riferimenti (i segnalibro) non sarebbe stato
difficile inserire il testo in corrispodenza di quei riferimenti. E infatti
non è stato difficile inserire semplicemente il testo in corrispondenza del
sengalibro.
Però mi sono reso conto che, come è ovvio che sia, il testo non veniva
sostituito ma aggiunto. Quindi se per errore avessi richiamato i dati di un
cliente e poi avessi dovuto chiamare quelli di un altro poi avrei dovuto
cancellare a mano i dati già inseriti. Da qui la mia necessità di sostituire
in quei paragrafi il testo eventualmente già presente.
Poi la lettera quando sarà fatta e finità e salvata nella cartellina del
cliente di turno non avrà più bisogno di un nuovo inserimento dei dati del
cliente. Una volta fatta e spedita sarà solo archiviata.
Il resto della storia è nota e grazie al vostro intervento alla fine ho ciò
che voglio :-)
Post by Maurizio Borrelli
[...]
Post by casanmaner
E' questo a cui ti riferisci con variabili documento?
Si'. Quando scrivo "variabili del documento" mi riferisco proprio alle
"variabili del documento". :D
Immagino :-) ... volevo solo una conferma che l'argomento nella guida fosse
proprio quello :-)))
Mi sembra di capire che le variabili del documento possano essere create e
gestite sola da vba anche se possono essere "recuperate" nel documento
tramite l'inserimento dei campi DocVariable.
Possono essere utili per memorizzare dati necessari all' "automazione" del
documento. Cosa che magari con excel facevo semplicemente memorizzando in
celle diciamo di "sistema" dove andare a memorizzare "variabili" che poi mi
potevano servire per gestire altre operazioni.

ciao
Maurizio Borrelli
17 anni fa
Permalink
[...]
Post by casanmaner
Il resto della storia è nota e grazie al vostro intervento alla fine ho
ciò che voglio :-)
Questo ci riempie tutti di gioia e di soddisfazione! Grazie.
Post by casanmaner
Mi sembra di capire che le variabili del documento possano essere create
e gestite sola da vba anche se possono essere "recuperate" nel documento
tramite l'inserimento dei campi DocVariable.
Possono essere utili per memorizzare dati necessari all' "automazione"
del documento. Cosa che magari con excel facevo semplicemente memorizzando
in celle diciamo di "sistema" dove andare a memorizzare "variabili" che poi
mi potevano servire per gestire altre operazioni.
Ciao casanmaner.

Solo da VB, si' pero'... Non serve scrivere codice da eseguire. E'
sufficiente digitare l'istruzione nella finestra Immediata. Per esempio
digitando l'istruzione (e completando l'immissione con Invio):

activedocument.Variables.Add "Pippo","Pluto"

crei una nuova variabile di nome "Pippo" e le assegni il valore "Pluto".
La verifica la farai (sempre nella finestra Immediata e sempre
concludendo con Invio) con l'istruzione:

?activedocument.Variables.Item("Pippo").Value

Dopo di che potrai usare tale variabile nel documento mediante il codice
di campo DOCVARIABLE:

{ DOCVARIABLE "Pippo" }

e si leggera':

Pluto

E se vorrai sapere se il documento contiene variabili:

?activedocument.Variables.Count

--
Ciao :o) Microsoft MVP (Excel)
Maurizio https://mvp.support.microsoft.com/profile/Maurizio.Borrelli
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) http://spdmb.spaces.live.com
 X       RIO - Risorse in italiano per gli utenti di office
-------- http://www.riolab.org
Giovanni Zezza
17 anni fa
Permalink
Maurizio Borrelli, nel messaggio
Post by Maurizio Borrelli
Property Empty As Boolean
sola lettura
Membro di Word.Bookmark
"Un segnalibro vuoto serve a contrassegnare un punto, ovvero una
selezione compressa, anziché un testo."
Che è semplicemente il caso limite di un Range, un Range collassato (o
"compresso"), cioè in cui il punto iniziale coincide con il punto
finale. Cioè, un segnalibro individua sempre un Range, eventualmente
un Range compresso.

La proprietà Empty (non a caso, di sola lettura) è solo una
scorciatoia; invece di verificare che inizio e fine del Range
associato coincidono, o eventualmente che Range.Text = "", si può
controllare la proprietà.

Ciao.

Maurizio Borrelli
17 anni fa
Permalink
...
Ciao casanmaner.

Un modo per sostituire il testo di un segnalibro e' il seguente:

Sub test()
Dim bmk As Word.Bookmark
Dim rng As Word.Range

Set bmk = ActiveDocument.Bookmarks.Item("BMK1")
Debug.Print "'"; bmk.Range.Text; "'"

Set rng = bmk.Range
With bmk
rng.SetRange .Start, .End - 1
End With
rng.Text = "Pippo"
Debug.Print "'"; bmk.Range.Text; "'"

Set rng = Nothing
Set bmk = Nothing
End Sub

Prova ad esempio con un segnalibro assegnato alla parola "Topolino ".
Nota lo spazio, facente parte del segnalibro. Sostituendo "Topolino",
senza lo spazio, con "Pippo", sempre senza lo spazio, non viene toccato
lo spazio finale e cosi' non si perde il segnalibro.

--
(Facci sapere se e eventualmente come hai risolto. Grazie.)

Ciao :o) Microsoft MVP (Excel)
Maurizio https://mvp.support.microsoft.com/profile/Maurizio.Borrelli
-------- Spazio personale di Maurizio Borrelli
?SPQR(C) http://spdmb.spaces.live.com
 X       RIO - Risorse in italiano per gli utenti di office
-------- http://www.riolab.org
casanmaner
17 anni fa
Permalink
Grazie Maurizio credo di aver trovato la soluzione anche grazie al tuo
esempio che mi ha fatto capire come "funziona" un segnalibro.
Ho creato questa macro che sostituisce (dovrebbe sostituire) il testo dopo
un segnalibro (non
assegnato ad una parola ma semplicemente inserito in un paragrafo "vuoto")
senza eliminarlo e senza eliminare i paragrafi successivi:

'--
Sub test2()
Dim AD As Document
Dim bmk As Word.Bookmark
Dim bmkrng As Word.Range
Dim Par As Paragraph


Set AD = ActiveDocument
Set bmk = AD.Bookmarks.Item("BMK1")
Set bmkrng = bmk.Range
Set Par = bmk.Range.Paragraphs(1)
bmkrng.SetRange bmkrng.Start, Par.Range.End - 1
bmkrng.Text = "Ma vieni!!!!! :-)"
End Sub
'--

Adesso faccio altri test e vedo se funziona bene o se necessita di
correzioni.

Grazie e ciao
Continua a leggere su narkive:
Loading...