Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-07-2009, 23:52   #1
john_revelator
Senior Member
 
L'Avatar di john_revelator
 
Iscritto dal: Jul 2007
Messaggi: 1092
[vba word] saltare il primo paragrafo "pieno"

Ciao a tutti. Non essendo per niente pratico del vba relativo a word mi trovo in difficoltà. Spiego rapidamente la mia necessità. Ho un documento che contiene una serie di paragrafi, comprese ovviamente delle righe vuote che potrebbero anche trovarsi all'inizio del documento. Io devo ciclare tutti i paragrafi "pieni" ad esclusione del primo.

Se non ci fossero paragrafi vuoti farei così

Codice:
Sub pieni()
With ActiveDocument
For i = 2 To .Paragraphs.Count
   testo = .Paragraphs(i)
   MsgBox testo
Next i
End With
End Sub
e potrei agevolmente saltare il primo.
Purtroppo nel mio caso sono arrivato a scrivere queste poche righe (correggetemi se esiste un modo diverso per escludere i paragrafi vuoti), ma in questo contesto non so come saltare il primo paragrafo che in pratica è il titolo del documento e non mi occorre. Grazie per l'attenzione.

Codice:
Sub cicla()
For Each p In ActiveDocument.Paragraphs
    If p.Range.Characters.Count > 1 Then
        MsgBox p
    End If
Next p
End Sub
john_revelator è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2009, 00:43   #2
john_revelator
Senior Member
 
L'Avatar di john_revelator
 
Iscritto dal: Jul 2007
Messaggi: 1092
Ho risolto in questo modo.

Codice:
Sub cicla()
Dim p As Paragraph
Dim i As Integer
For Each p In ActiveDocument.Paragraphs
    If p.Range.Characters.Count > 1 Then
        If i = 0 Then
            ActiveDocument.Range.Move wdParagraph, 1
            i = i + 1
        Else
            MsgBox p
        End If
    End If
Next p
End Sub
Visto che ci sono ne approfitto per fare comunque una domanda.
Come faccio a sapere l'indice di un paragrafo, cioè che un determinato paragrafo tanto per dire è il nono piuttosto che il decimo ?
john_revelator è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2009, 01:00   #3
zuper
Senior Member
 
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
Codice:
Sub cicla()
Dim p As Paragraph
Dim i As Integer
Dim a As Integer
a = 1
For Each p In ActiveDocument.Paragraphs
    If p.Range.Characters.Count > 1 Then
        If i = 0 Then
          '  ActiveDocument.Range.Move wdParagraph, 1
            i = i + 1
        Else
        testo = p
        a = a + 1
         MsgBox a & "-" & testo
        End If
    End If
Next p
End Sub
ho commentato la riga in mezzo perchè non so a cosa serve...ma mi pare nn serva a nulla
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi.
L'una o l'altra inutile scandalizzarsi.[plutus]
zuper è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2009, 10:10   #4
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da john_revelator Guarda i messaggi
Ho risolto in questo modo.

Codice:
Sub cicla()
Dim p As Paragraph
Dim i As Integer
For Each p In ActiveDocument.Paragraphs
    If p.Range.Characters.Count > 1 Then
        If i = 0 Then
            ActiveDocument.Range.Move wdParagraph, 1
            i = i + 1
        Else
            MsgBox p
        End If
    End If
Next p
End Sub
Visto che ci sono ne approfitto per fare comunque una domanda.
Come faccio a sapere l'indice di un paragrafo, cioè che un determinato paragrafo tanto per dire è il nono piuttosto che il decimo ?
Codice:
    Dim testoParag As String
    Dim i As Integer
    For i = 2 To ActiveDocument.Paragraphs.Count 'in base 1
        testoParag = ActiveDocument.Paragraphs(i).Range.Text
        If Len(Trim(testoParag)) > 1 Then
            MsgBox testoParag
        End If
    Next i
Forse meglio e più compatto.
Comunque dovresti fare qualcosa di più per controllare i paragrafi ( l'unico controllo che fai è sul conto caratteri, ma possono esserci molti casi di serie di 1 o più caratteri "invisibili", come spazi, vbcrlf, vbcr, ecc... ).

Per quanto riguarda la tua domanda, direi che i paragrafi sono in base 1, perciò ciclando con un For-i, i è il numero di paragrafo nello stesso ordine in cui si trova nel doc.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2009, 10:30   #5
john_revelator
Senior Member
 
L'Avatar di john_revelator
 
Iscritto dal: Jul 2007
Messaggi: 1092
Buongiorno a tutti.
Per prima cosa grazie a entrambi per la solita disponibiltà.

@Marco: stavo provando il tuo codice però sorge un problema. Come accennavo ieri notte devo saltare il titolo del documento che non necessariamente è il primo paragrafo. Stavo facendo delle prove e ho notato che se il titolo si trova nella prima riga del documento il tutto fila liscio mentre se per esempio dò alcuni caratteri di invio a inizio file, il titolo mi viene visualizzato e non escluso. Immagino quindi che il ciclo for che parte da 2 non sia ciò che fa al mio caso.
john_revelator è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2009, 13:14   #6
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da john_revelator Guarda i messaggi
@Marco: stavo provando il tuo codice però sorge un problema. Come accennavo ieri notte devo saltare il titolo del documento che non necessariamente è il primo paragrafo. Stavo facendo delle prove e ho notato che se il titolo si trova nella prima riga del documento il tutto fila liscio mentre se per esempio dò alcuni caratteri di invio a inizio file, il titolo mi viene visualizzato e non escluso. Immagino quindi che il ciclo for che parte da 2 non sia ciò che fa al mio caso.
Beh, in effetti più generico è il caso di utilizzo, più robusto dovrà essere il codice di controllo. Un bel passo avanti si può ottenere condizionando l'inserimento dei paragrafi ritenuti validi, in un array di appoggio.
Alla fine basterà scartare il primo elemento dell'array, che, con ogni probabilità sarà il paragrafo-titolo del doc. :

Codice:
    Dim testoParag As String
    Dim arrayParagrafiOk() As String
    Dim cntArray As Integer
    cntArray = 0
    Dim i As Integer
    For i = 1 To ActiveDocument.Paragraphs.Count
        testoParag = ActiveDocument.Paragraphs(i).Range.Text
        If Len(Trim(testoParag)) > 1 Then
            If cntArray = 0 Then
                ReDim arrayParagrafiOk(0)
            Else
                ReDim Preserve arrayParagrafiOk(cntArray)
            End If
            arrayParagrafiOk(cntArray) = testoParag
            cntArray = cntArray + 1
        End If
    Next i
    
    'ciclo di test : i=0 è il paragrafo del titolo
    For i = 1 To UBound(arrayParagrafiOk)
        MsgBox arrayParagrafiOk(i)
    Next i
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2009, 18:30   #7
john_revelator
Senior Member
 
L'Avatar di john_revelator
 
Iscritto dal: Jul 2007
Messaggi: 1092
Grazie mille Marco. Sei sempre il mio forumista preferito.
Solo una cosa non mi è chiara. Perchè hai definito arrayParagrafiOk() come stringa e non come variant?
john_revelator è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2009, 21:06   #8
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da john_revelator Guarda i messaggi
Grazie mille Marco. Sei sempre il mio forumista preferito.
Solo una cosa non mi è chiara. Perchè hai definito arrayParagrafiOk() come stringa e non come variant?
Perchè in questo caso non ci sono dubbi sul fatto che ogni elemento dell'array vada considerato come stringa.
Variant è il tipo più "comodo" in VB6 / VBA, ciò non vuol dire che si debba usare sempre, anzi, è anche il tipo più oneroso in quanto si forza VB ad una conversione implicita dietro le quinte, anche quando non serve. Meglio sempre usare il tipo dati più adeguato e ricorrere a Variant solo se strettamente necessario.

Ad esempio, in questo caso ( assegnazione diretta degli elementi di un array mediante la funzione "Array()" ) il tipo Variant è praticamente d'obbligo in VBA :

Codice:
    Dim a() As Variant
    a = Array("stringa1", "stringa2", "stringa3") 

    Dim b() As Variant
    b = Array(1, 2, 3)
mentre se cerco di fare :

Codice:
    Dim a() As String
    a = Array("stringa1", "stringa2", "stringa3")

    Dim b() As Integer
    b = Array(1, 2, 3)
otterrei errore in entrambi i casi...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
GTA 6 su PC potrebbe arrivare prima del ...
Da zero al tracciato in secondi: LibreCo...
Il regista Rian Johnson lancia a 12,99 d...
Microsoft stravolge l'app Sicurezza di W...
Mercato smartphone in caduta libera: -20...
Android 17 QPR3 Beta 3 riporta il blocco...
Le 10 offerte TOP in Amazon del weekend:...
Dyson, doppio crollo su Amazon: purifica...
Il 70% delle imprese non vede effetti de...
HillMiles MileCity1 a 616€: la city e-bi...
GAC Aion UT, prima prova: tanta roba a 2...
vivo X300 Pro a 979€: il top di gamma co...
AGIBOT fa ballare 110 Expedition A3 per ...
iPad A16 da 11'' scende a 459€ in tutti ...
Mac mini M6 crolla a 899€ (-180€ rispett...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:15.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v