Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 3 su 3

Word, campo nescosto per automazione che non si elimina

  1. #1
    BennyB non è in linea Scolaretto
    Buongiorno.
    Word mi sta facendo venire la nausea. Ogni volta che cerco di automatizzarlo (e ho già realizzato un bel po' di modelli, mio malgrado), presenta sempre problemi assurdi.
    In questo caso, ho inserito un tasto ActiveX per sostituire il valore in un segnalibro.
    Questo è il codice:
    Private Sub TastoLingua_Click()
    Dim iLingua As Integer
    Dim SLRange As Range
    '
    Set SLRange = ActiveDocument.Bookmarks("lingua").Range
    Debug.Print SLRange.Text
    iLingua = Val(SLRange.Text)
    Set SLRange = ActiveDocument.Bookmarks("LinguaSel").Range
    SLRange.Select
    Selection.MoveRight Unit:=wdSentence, Count:=1, Extend:=wdExtend
    Selection.Delete
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
        "SET  lingua " & IIf(iLingua = 1, "2", "1"), PreserveFormatting:=True
    '
    Selection.Text = "PG19/PO"
    '
    Selection.WholeStory
    Selection.Fields.Update
    Selection.HomeKey Unit:=wdStory
    
    End Sub
    
    In pratica, in una cella di una tabella, crea il CAMPO seguente (1):
    { SET lingua 1 \*MERGEFORMAT }

    In questo modo, crea il segnalibro lingua e gli assegna il valore. Alla successiva pressione del tasto, il valore cambia e passa a 2 (o a 1 in caso contrario)

    Nel documento, ci sono poi CAMPI come il seguente (2):
    { IF lingua = 1 "AAA" "BBB" \*MERGEFORMAT }

    Funziona tutto egregiamente, solo che ho un problema: le istruzione per l'eliminazione del segnalibro (queste)
    Set SLRange = ActiveDocument.Bookmarks("LinguaSel").Range
    SLRange.Select
    Selection.MoveRight Unit:=wdSentence, Count:=1, Extend:=wdExtend
    Selection.Delete
    
    eliminano solo la scritta e lasciano al loro posto il CAMPO (1), che quindi viene duplicato ad ogni pressione del tasto.

    Ho provato anche così:
    Set SLRange = ActiveDocument.Bookmarks("LinguaSel").Range
    SLRange.Select
    Selection.Delete
    
    Ma quello che accade è che mi cancella il primo carattere della scritta (la "P") e lascia al suo posto il CAMPO (1).

    Pure così non si elimina niente:
    ActiveDocument.Bookmarks("LinguaSel").Range = ""
    
    Non so proprio come fare. La cosa buffa è che se svolgo le operazioni visualizzando i campi (cioè premendo Alt-F9) la macro funziona benissimo... misteri di WORD.
    Sottolineo che sia il tasto, sia il campo, sono in una tabella, ma in 2 celle diverse.

    Può essere che stia facendo qualche bischerata. Però, il sistema funziona correttamente (semplicemente lascia un CAMPO (1) in più ad ogni azione del tasto, che non è proprio la cosa giusta).

    Se qualcuno ha tempo di guardarci, mi fa un favore.

  2. #2
    BennyB non è in linea Scolaretto
    Nessuno ha qualche suggerimento?

  3. #3
    BennyB non è in linea Scolaretto
    Alla fine, ho trovato una soluzione. Riporto il tutto, magari a qualcuno potrà servire.

    Ho ragionato sui CAMPI e sulla loro sostituzione.
    Con una semplice routine, ho letto il testo del CAMPO impostato e il suo numero, individuando quello che mi occorreva.
    Sub campi()
    Dim Fld As Field
    For Each Fld In ActiveDocument.Fields
        Debug.Print Fld.Code, Fld.Index
    Next
    End Sub
    
    Dopo di che ho selezionato il range del CAMPO in oggetto (1 in questo caso, ma in altri fogli era diverso) sostituendolo con il testo modificato. Questo il codice.
    Set rngTemp = ActiveDocument.Fields(1).Code
    rngTemp.Text = "SET  lingua " & IIf(iLingua = 1, "2", "1")
    ActiveDocument.Fields(1).Update
    
    Il codice complessivo, quindi diviene il seguente:
    Private Sub TastoLingua_Click()
    Dim iLingua As Integer, mess As String
    Dim SLRange As Range, rngTemp As Range
    '
    On Error GoTo errori
    
    Set SLRange = ActiveDocument.Bookmarks("lingua").Range
    Debug.Print SLRange.Text
    iLingua = Val(SLRange.Text)
    
    Set rngTemp = ActiveDocument.Fields(1).Code
    rngTemp.Text = "SET  lingua " & IIf(iLingua = 1, "2", "1")
    ActiveDocument.Fields(1).Update
    
    Selection.WholeStory
    Selection.Fields.Update
    Selection.HomeKey Unit:=wdStory
    
    Fine:
    Selection.HomeKey Unit:=wdStory
    'ActiveDocument.Protect Password:="pippo", NoReset:=False, Type:= _
            wdAllowOnlyReading, UseIRM:=False, EnforceStyleLock:=False
    Exit Sub
    
    errori:
    mess = MsgBox("Errore n°: " & Err.Number & " --> " & Err.Description, vbCritical + vbOKOnly, "CAMBIO LINGUA")
    Resume Fine
    End Sub
    
    Molto semplice, ma ho dovuto spnderci un bel po' di tempo.
    Spero sia d'aiuto.

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Automazione word
    Da CESABAS nel forum Microsoft Access
    Risposte: 1
    Ultimo Post: 05-03-2015, 14:40
  2. automazione word
    Da margiu nel forum Microsoft Access
    Risposte: 6
    Ultimo Post: 08-11-2011, 21:07
  3. Automazione Word
    Da Rob nel forum Microsoft Word
    Risposte: 2
    Ultimo Post: 28-01-2008, 19:37
  4. automazione word
    Da leogio nel forum Microsoft Word
    Risposte: 10
    Ultimo Post: 24-01-2008, 16:29
  5. Elimina campo da codice
    Da cive nel forum Microsoft Word
    Risposte: 3
    Ultimo Post: 24-08-2005, 13:43