Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[WORD Macro] Funzione SE

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[WORD Macro] Funzione SE

Postdi elpapy » 10/09/09 14:59

Ciao Ragazzi,
complimenti per il forum!? è veramente piacevole vedere con quanta competenza e "velocità" rispondete ai vari quesiti.
Da molto tempo cerco di trovare una soluzione a questo problema (da risolvere con una macro che utilizzi la funzione SE o IF...):
Ho un documento Word formattato in modo tale che tutte le righe sono un paragrafo e che alla posizione 47 di ogni riga o non c'è scritto nulla oppure c'è il n. "1".
Ora vorrei far analizzare con la macro che se non c'è nulla passare alla riga successiva, ma se per caso in posizione 47 c'è il n. "1" a partire da quel punto e tornando indietro fino a inizio riga diventi tutto grassetto e inserisca sopra una riga vuota.
Naturalmente la macro che fa già questo la uso, solo che devo spostarmi manualmente nel documento all'inizio delle righe con l'1 e attivare la macro che mi seleziona, fa il grassetto e inserisce la riga vuota.
Sarebbe bello fare il tutto con la ricerca automatica , che ne dite?
Non mi sarebbe difficile con le funzioni in Excel :) , ma in Word non ho tanta esperienza :oops: sulle macro in VB...
Grazie e spero di essere stato chiaro.
Giuseppe
Avatar utente
elpapy
Newbie
 
Post: 4
Iscritto il: 10/09/09 12:31

Sponsor
 

Re: [WORD Macro] Funzione SE

Postdi Anthony47 » 10/09/09 15:27

Ciao elpapy e benvenuto nel forum.
Ti do' dei pezzi presi dalle mie poche macro word, credo che possano essere uno spunto utile:
Codice: Seleziona tutto
Selection.HomeKey Unit:=wdStory   'va all' inizio

Selection.MoveRight Unit:=wdSentence, Count:=1 'muove in avanti di un paragrafo

Selection.MoveRight Unit:=wdCharacter, Count:=111, Extend:=wdExtend  'muove con estensione della selezione

Altre cose come il codice per fare grassetto o aggiungere una riga lo puoi registrare. Scoprirai facilmente che esiste anche MoveLeft, e che Extend ha sia la possibilita' di selezionare il testo oggetto del move (ad esempio per applicare il bold alla selezione) o solo di spostare il cursore (ad esempio per inserire una riga).
Mi limito a questi spunti perche' in questo periodo post-ferie mi ritrovo con troppi impegni e sto' sacrificando le risposte sul forum, e comunque mi pare che hai una certa conoscenza di vba. L' help on line ti aiutera' molto.

Posta ancora per altro aiuto o per far conoscere la tua soluzione.

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [WORD Macro] Funzione SE

Postdi elpapy » 10/09/09 15:53

Grazie Anthony,
ti ringrazio per il tuo sollecito intervento che conferma quanto dicevo prima.
Purtroppo quelle tue informazioni sono già in mio possesso, diciamo e ribadisco che ho bisogno di un aiuto sulle tre righe di codice che mi permettano di dire:
Vai alla posizione 47 e controlla se c'è il n. 1; se non c'è vai avanti alla riga successiva e ripeti la ricerca:
se c'è il n. 1 invece "selection.moveleft ecc. " poi ci risiamo, solo come impostare la ricerca condizionale in riferimento alla posizione 47 della riga.
Comunque grazie..
Spero che si faccia avanti qualcun altro che in questo momento ha magari più tempo a disposizione.
Giuseppe
Avatar utente
elpapy
Newbie
 
Post: 4
Iscritto il: 10/09/09 12:31

Re: [WORD Macro] Funzione SE

Postdi elpapy » 11/09/09 07:54

Sub STAMPADISTINTA2()

' Macro registrata il 10/09/2009 da A
'
Dim strTemp As String
Selection.MoveRight Unit:=wdCharacter, Count:=48
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
strTemp = Selection.Text
If strTemp = "1" Then
Selection.MoveLeft Unit:=wdCharacter, Count:=48, Extend:=wdExtend
Selection.Font.Bold = True
Selection.Font.Name = "Courier New"
Selection.Font.Color = wdColorRed
Selection.MoveLeft Unit:=wdCharacter, Count:=2
Selection.TypeParagraph
Selection.MoveDown Unit:=wdLine, Count:=1
End If
End Sub

Questo è il codice che fa il necessario, ma non riesco a trovare la soluzione per il loop fino alla fine del documento.
Grazie a chiunque volesse darmi una mano..
Giuseppe
Avatar utente
elpapy
Newbie
 
Post: 4
Iscritto il: 10/09/09 12:31

Re: [WORD Macro] Funzione SE

Postdi Anthony47 » 12/09/09 02:29

Brevissimamente:
Codice: Seleziona tutto
Dim AD As Document
Dim DP As Object
Set AD = ActiveDocument
Set DP = AD.BuiltInDocumentProperties
LineNum= DP("Number Of Lines")    'Calcola numero linee
   For I=LineNum to 1 step -1

'    Posizioni il cursore all' inizio riga:
    Selection.GoTo What:=wdGoToLine, Which:=wdGoToFirst, Count:=I, Name:=""   
'qui inserisci le tue istruzioni
   Next I


Conosci i comandi per debug? (fondamentalmente: F8 per eseguire passo passo)

Di piu' non riesco a fare, stasera.
Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [WORD Macro] Funzione SE

Postdi Anthony47 » 14/09/09 01:49

A me questa funziona
Codice: Seleziona tutto
Sub papy()
Posit1 = 48     'Posizione DOPO la quale si trova 1
Dim AD As Document    'vedi http://support.microsoft.com/kb/211455/en-us
Dim DP As Object
Set AD = ActiveDocument
Set DP = AD.BuiltInDocumentProperties
LineNum = DP("Number Of Lines")   'Calcola numero linee
For I = LineNum To 1 Step -1
 Selection.GoTo What:=wdGoToLine, Which:=wdGoToFirst, Count:=I, Name:=""
 Selection.MoveRight Unit:=wdCharacter, Count:=Posit1 - 1, Extend:=wdMove
 Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
 If Selection.Text = "1" Then
  Selection.MoveLeft Unit:=wdCharacter, Count:=Posit1, Extend:=wdExtend
  Selection.Font.Bold = True
  Selection.Font.Name = "Courier New"
  Selection.Font.Color = wdColorRed
  Selection.MoveLeft Unit:=wdCharacter, Count:=2
  Selection.TypeParagraph
 End If
Next I

End Sub

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [WORD Macro] Funzione SE

Postdi elpapy » 14/09/09 15:03

GRAZIE!?!?!? Anthony ;)
ho implementato nella macro il tuo codice ed è perfetto!
Avevo provato FOR...NEXT ma nel senso di 1 To 20...30.. in discesa.. e non andava
invece ho imparato che ..in salita.. è possibile e funziona pure!
Beh! grazie veramente..
Ciao
Giuseppe
Avatar utente
elpapy
Newbie
 
Post: 4
Iscritto il: 10/09/09 12:31

Re: [WORD Macro] Funzione SE

Postdi Anthony47 » 14/09/09 22:09

Devi lavorare all' indietro perche' il numero di righe cambia in corso d' opera e in avanti ti sballerebbe tutto...

Ciao, alla prossima.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[WORD Macro] Funzione SE":


Chi c’è in linea

Visitano il forum: Marius44 e 13 ospiti