Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Nel Formula 1 Technology and Media Centre di Biggin Hill, la velocità delle monoposto si trasforma in dati, immagini e decisioni in tempo reale grazie all’infrastruttura Lenovo che gestisce centinaia di terabyte ogni weekend di gara e collega 820 milioni di spettatori nel mondo
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
Il nuovo gimbal mobile DJI evolve il concetto di tracciamento automatico con tre modalità diverse, un modulo multifunzionale con illuminazione integrata e controlli gestuali avanzati. Nel gimbal è anche presente un'asta telescopica da 215 mm con treppiede integrato, per un prodotto completo per content creator di ogni livello
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


Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce Recensione Pura 80 Pro: HUAWEI torna a stupire c...
Opera Neon: il browser AI agentico di nuova generazione Opera Neon: il browser AI agentico di nuova gene...
Microlino, simbolo italiano della mobili...
Apple disattiverà la sincronizzaz...
Google lancia l'allarme: attenzione ai m...
Primo test drive con Leapmotor B10: le c...
'Non può essere un robot': l'uman...
Monopattino elettrico Segway Ninebot Max...
Syberia Remastered è disponibile:...
Sony scopre che tutti i modelli AI hanno...
Amazon nasconde un -15% su 'Seconda Mano...
Due occasioni Apple su Amazon: iPhone 16...
Verso la fine della TV tradizionale? I g...
Cassa JBL a 39€, portatili, smartphone, ...
Cometa interstellare 3I/ATLAS: la sonda ...
Jensen Huang e Bill Dally di NVIDIA prem...
Il futuro della birra è green: H...
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: 17:49.


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