Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Ciclo while

  1. #1

    Ciclo while

    Ciao ragazzi, premesso che sono alle prime armi col VB, ho scritto questo codice (si tratta di una macro per word):

    codice:
    Sub AutoNew()
        
        On Error GoTo GestioneErrori
        ActiveDocument.Unprotect Password:="XXX"
        UserForm1.Show
        ActiveDocument.Protect Type:=wdAllowOnlyFormFields, Password:="XXX"
        UserForm2.Show
        ActiveDocument.Save
        UserForm3.Show
        
    GestioneErrori:
        Do While Err.Number = 4198
        ActiveDocument.Save
        Loop
           
    End Sub
    Il problema è questo, se l'utente non salva il documento si verifica l'errore di run-time: 4198.
    Quindi ho pensato di realizzare un ciclo il quale dovrebbe far apparire finche si verifica l'errore la form "salva con nome" di windows.
    Tuttavia eseguendo il codice quando appare il form "salva con nome" se clicco sulla "x" o su "annulla" alla prima mi mostra nuovamente la form del salvataggio ma se riclicco di nuovo sulla x o su annulla, ovviamente si verifica come prima l'errore di runtime, il 4198, e quindi dovrebbe di nuovo eseguire l'istruzione: ActiveDocument.Save, ma questo non accade mostra la mascherina per eseguire il debug.

  2. #2
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    Perchè usi la routine AutoNew?
    Non ti converrebbe usare la AutoClose, che si verifica quando il file viene chiuso?

    Usando questo codice, dovresti riuscire ad ottenere quello che ti serve:

    codice:
    Sub AutoClose()
    
    On Error GoTo Err_Handle
    
    While Not ActiveDocument.Saved
        ActiveDocument.Save
    Wend
    
    Exit Sub
    
    Err_Handle:
        Select Case Err.Number
            Case 4198
                Resume Next
            Case Else
                MsgBox Err.Number & " - " & Err.Description
        End Select
    End Sub
    Boolean

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Re: Ciclo while

    Originariamente inviato da Andrea_BM
    Ciao ragazzi, premesso che sono alle prime armi col VB
    Quale versione? E' obbligatorio indicarla... e anche nel titolo è obbligatorio indicare linguaggio(+versione)...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Quale versione? E' obbligatorio indicarla... e anche nel titolo è obbligatorio indicare linguaggio(+versione)...
    Scusa hai ragione! è che sn nuovo e leggendo "visual basic" credevo che questa sezione fosse dedicata solo al VB.
    Per quanto riguarda la versione si tratta del VBA per word

    Grazie Boolean proverò a fare come hai detto tu! poi ti faccio sapere!

  5. #5
    Ciao Boolean il codice funziona perfettamente grazie mille!

    Perchè usi la routine AutoNew?
    Ho provato con autoclose, però si tratta di un modello con dei moduli da compilare (quelli con sfondo grigio per intendersi tipo i check box ) e quando vado a chiudere il documento tutti i moduli vengono resettati come se non fossero stati compilati.
    Il problema sembrerebbe dovuto ai comandi UnProtect e Protect.
    Tuttavia se uso autonew questo non succede, al limite sapresti dirmi come fare per evitare che con autoclose i moduli vengano resettati?
    Grazie ancora! Ciao!!

  6. #6
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    Il Comando Protect possiede anche un parametro che si chiama appunto NoReset, che consente di specificare se alla protezione del modello i campi vengono resettati o meno.

    Se non vuoi il reset devi mettere questo parametro a True:

    codice:
    ActiveDocument.Protect wdAllowOnlyFormFields, True
    Boolean

  7. #7
    Ah ok perfetto! grazie ancora!!

    Andrea

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.