Inserire Dati da Userform



  • Inserire Dati da Userform
    di Puoti (utente non iscritto) data: 31/01/2013 10:32:47

    Vi prego aiutatemi vorrei che all'apertura di excel una userform parta prima di excel e chieda di inserire del testo, successivamente il testo digitato dall' utente si va ad inserire nel foglio2 per esempio nella cella G4. Succesivamente questo dato che ho inserito nella cella G4 non può essere più modificato. La userform però deve partire solo se il testo nella cella G4 del foglio2 è diversa da zero.

    Spero di essermi spiegato bene
     
    Private Sub Workbook_Open()
    
    Application.WindowState = xlMinimized
    
    UserForm1.Show
    
    End Sub
    
    Private Sub UserForm_Activate()
    
    Sheets("foglio2").Select
    
    TextBox1.Value = Cells(7, 5).Value 'valore della Cella E5
    
    End Sub
    
    
    -----------------
    
    cosa devo inserire come codice nella userform?
    



  • di HarryBosch data: 31/01/2013 11:27:29

    Per impedire la modifica di una cella devi comunque proteggere il foglio.
    E dovrai inizialmente specificare quali celle vuoi utilizzare in scrittura visto che di default sono tutte impostate come bloccate (vedi proprietà celle --> protezione).

    In apertura puoi utilizzare l'evento che già hai riportato, con un miglioramento per visualizzare l'userform direttamente (Doevents).

    E per la modifica della cella dovresti inserire tipo un pulsante che confermi la scrittura.
    Ti scrivo il codice, ma ti allego anche un file di esempio.
     
    Private Sub Workbook_Open()
        If Sheets("Foglio2").[g4] <> 0 Or Sheets("Foglio2").[g4] = "" Then
            Application.WindowState = xlMinimized
            UserForm1.Show DoEvents
        End If
    End Sub
    
    Private Sub CommandButton1_Click()
    
        With Sheets("Foglio2")
            .Select
            .Unprotect
            .[g4].Value = TextBox1.Value
            .[g4].Locked = True
            .Protect
        End With
        Unload Me
        Application.WindowState = xlNormal
    
    End Sub
    
    



  • di Puoti (utente non iscritto) data: 31/01/2013 11:45:09

    HarryBosch prima di tutto ti volevo ringraziare per il tempo che mi hai dedicato e per il file che mi hai allegato per quanto riguarda il pulsante mi va benissimo solo che mi occorrerebbe se si può che una volta inserito il dato (quindi la cella è piena), salvato excel alla sua riapertura la richiesta di inserimento tramite userform dei dati non avvenga più.



  • di Puoti (utente non iscritto) data: 31/01/2013 12:46:29

    Come è possibile inoltre scegliere la password di protezione perché così basta semplicemente pigiare su rimuovi protezione foglio



  • di HarryBosch data: 31/01/2013 16:02:59

    Allora ti serve il contrario di quello che hai chiesto inizialmente ^_^

    Ovvero, se la cella è vuota, oppure uguale a 0, ti serve la Userform in apertura.
    Se invece contiene già un dato no.

    Devi solo modificare il segno di confronto nella macro che trovi nel "ThisWorkbook":
    If Sheets("Foglio2").[g4] = 0 Or Sheets("Foglio2").[g4] = "" Then

    E per quanto riguarda la protezione puoi certamente inserire una password tramite codice. Devi modificare le due istruzioni Protect e Unprotect che trovi nella routine impostata sul pulsante della Userform:

    .Unprotect Password:="pippo"
    '...
    .Protect Password:="pippo"



  • di Puoti (utente non iscritto) data: 31/01/2013 16:58:48

    Tutto perfetto hai ragione tu avevo sbagliato io a spiegarmi posso prima di chiudere la discussione chiederti ancora come ultima cosa se è possibile nel caso si verifichi la chiusura intenzionale da parte dell'utente prima che venga inserito il dato la possibilità di inserire in automatico un valore di default.



  • di Vecchio Frac data: 31/01/2013 17:41:41

    Sì, ti basta intercettare l'evento Workbook_BeforeClose e impostare così un valore di default alla chiusura del file.







  • di Puoti (utente non iscritto) data: 31/01/2013 19:13:46

    Scusa Vecchio Frac quindi come devo scrivere nel vba in Workbook



  • di Vecchio Frac data: 31/01/2013 20:33:54

    Nell'area codice di ThisWorkbook:

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    range("A1") = valore_di_default
    End Sub






  • di Puoti (utente non iscritto) data: 01/02/2013 00:49:27

    Non funziona stavo provando ma non ci riesco . Io vorrei che se l' utente non inserisce nulla nella userform o esca di proposito, la cella comunque si compili in automatico con un valore di default e successivamente quando si va ad aprire il file xls fa la verifica in quella cella e se trova scritto il valore di default avvisi l' utente che non è possibile utilizzare il file, magari chiudendo la finestra con la X o pigiando su ok impedendone cosi l'utilizzo.

    Il problema e che con

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    range("A1") = valore_di_default
    End Sub


    non funziona il codice mi restiruisce errore forse perche non verifica il valore del foglio2??

    Scrivendo cosi suppongo che faccia il controllo della cella ma non inserire il valore "niente" alla cella

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Sheets("Foglio2").[g4] = "niente" Then
    ActiveWorkbook.Close savechanges:=False
    End If
    End Sub

    Un aiuto per piacere anche a inserire il messaggio "il file non può essere utilizzato premere ok" e poi si chiude excel.
     
    Option Explicit
    
    Private Sub Workbook_Open()
    If Sheets("Foglio2").[g4] = "niente" Then
    ActiveWorkbook.Close savechanges:=False
    Application.Quit
     End If
        If Sheets("Foglio2").[g4] = 0 Or Sheets("Foglio2").[g4] = "" Then
            Application.WindowState = xlMinimized
            UserForm1.Show DoEvents
        End If
    End Sub
    
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Sheets("Foglio2").[g4] = "niente" Then
    ActiveWorkbook.Close savechanges:=False
    Application.Quit
        End If
    End Sub
    



  • di HarryBosch data: 01/02/2013 01:03:02

    Intanto bravo che hai provato...
    Magari domani mattina dò un'occhiata, che ora si annebbia la vista ^_^

    Comunque, un'altra soluzione potrebbe essere quella di impedire la chiusura della Userform qualora il campo sia vuoto (inibendo anche la X in alto) e facendo uscire un messaggio che ti avvisa l'obbligo di inserimento.



  • di Puoti (utente non iscritto) data: 01/02/2013 12:05:01

    Intanto ancora grazie harrybosch per tutto quello che stai facendo. Se è possibile io gradirei sempre che l'utente sia obbligato ad inserire il dato e se nn lo fa appena chiude Excel il dato nella cella assume un volte di default e alla sua riapertura avverte che il file non può essere più utilizzato. Mica è difficile fare una cosa del genere?



  • di HarryBosch data: 02/02/2013 00:42:20

    Continua a sfuggirmi qualcosa nella tua richiesta, o meglio nel tuo intento.
    Prova questa revisione: "inserire dati da userform - 1"
    In pratica se premi il pulsante oppure chiudi la form, nella cella viene inserito un valore impostato di default. Al successivo riavvio un messaggio ti avvisa che se vuoi continuare devi modificare la parola, altrimenti non si accede al foglio.



  • di Puoti (utente non iscritto) data: 06/02/2013 13:32:37

    HarryBosch scusa ma non ci sono stato per lavoro a me servirebbe che quando quella cella ha il valore di defaul avvisi che non è possibile utilizzare più il foglio, questo perchè quella cella ha un importanza vitale per utilizzare l'applicativo altrimenti tutti potrebbero modificare i dati come vogliono semplicemte cambiando il valore in quella cella e io non voglio, quindi per poter riutilizzare il file o avere di nuovo quella cella vuota devono per forza richide l'applicativo a me. Spero di essermi spiegato bene . Confido in un tuo aiuto definitivo e ti ringrazio sempre per tutto quello che fai.



  • di HarryBosch data: 07/02/2013 11:40:16

    Ahhh, ecco il punto che mancava! ^_^
    Ben saprai però che Excel mal si appresta a questo tipo di funzionalità... nel senso che le protezioni sono facilmente superabili, a qualsiasi livello (di foglio o di vba).

    Inoltre le macro in apertura potrebbero non essere attivate...

    Fammi vedere un pò e ti posto il file



  • di Puoti (utente non iscritto) data: 07/02/2013 14:52:17

    HarryBosch se potessi aiutarmi a realizzare il codice te ne sarei grato, conosco i problemi di excel però li ho superati trasformando il file in .exe .



  • di HarryBosch data: 07/02/2013 18:43:18

    Usi "XLtoEXE" per converire Exel in eseguibile?
    Magari abbinato a Inno Setup per installarlo come applicazione...

    Però, così facendo, non riesci a salvare le modifiche sul file eseguibile, qualsiasi aggiunta sarebbe vana.
    Di contro le modifiche si potrebbero registrare su un altro file, sempre Excel, o csv o file di testo, a seconda dell'utilizzo. I dati poi si potrebbero richiamare in ogni momento da questo file di archivio.

    In questo caso però le macro relative all'inserimento obbligatorio risulterebbero inutili



  • di Puoti (utente non iscritto) data: 07/02/2013 20:19:59

    Grazie come sempre per la risposta HarryBosch però non uso "XLtoEXE" ma "Xcell" molto meglio che mi consente anche di salvare direttamente il file in .exe .



  • di HarryBosch data: 08/02/2013 21:45:00

    Vediamo se sono vicino a quanto vorresti fare.
    Questo file che allego funziona così:
    la Form in apertura si apre solo la prima volta oppure se la cella G4 è vuota o pari a zero. Questa form non può essere chiusa con il pulsante X.
    Se non si inserisce nulla e si preme il pulsante, verrà inserito il valore di default e al successivo riavvio il programma non funzionerà.

    Dovrai ovviamente proteggere (per quanto debolmente) il progetto vba e rendere il file eseguibile.
    Non sono riuscito a trovare "Xcell"... dove l'hai scovato?



  • di Vecchio Frac data: 08/02/2013 22:00:52

    @Harry
    Dai un'occhiata qui:
    (www).fileguru.com/apps/mindow_xcel





  • di Puoti (utente non iscritto) data: 12/02/2013 14:57:48

    HarryBosch ti ringrazio per il tempo che mi hai dedicato , come diceva Vecchio Frac Xcell è un software di DoneEx.com lo puoi trovare sul loro sito, se ti occorre qualche compilazione sono a tua completa disposizione . Ritornando al file da te allegato funziona alla grande e fa quello che richiedevo solo che se chiudo direttamente excel e non il form alla riapertura mi richiede di inserire nuovamente il valore è invece non dovrebbe aprirmi più il file avendo aggiunto in teoria il valore "niente" alla cella . Quindi io ho provato ad aggiungere questo codice a qullo da te dato cercando di risolvere il problema, ma non va come posso fare ?
    Ti ringrazio anticipatamente come sempre per la tua cortese disponibilità
     
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Cancel = True
    MsgBox "Il salvataggio avviene in automatico!!", vbInformation '
    
    Dim lReply As Long
    
    If SaveAsUI = True Then
    
    lReply = MsgBox("Non sei autorizzato a salvare con altro nome!!")
    
    Cancel = True '(vbQuestion + vbCancel)
    
    If Cancel = True Then Me.Save '
    If Cancel = True Then Application.Quit 'Chiude dopo aver fatto salva con nome
    Cancel = True
    
    End If
    If Cancel = True Then
    Application.Quit '
    End If
    End Sub
    
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ThisWorkbook.Saved = True
    ActiveWorkbook.Save
    ActiveWorkbook.Close
    End Sub



  • di HarryBosch data: 15/02/2013 00:10:30

    Rieccomi ^_^ quando dici
    "solo che se chiudo direttamente excel e non il form"
    intendi chiudere il file dalla X del foglio?
    Potresti intercettare anche l'evento di chiusura, ovvero, inserire una macro che agisca subito prima di chiudere il foglio, come il piccolo esempio sotto.

    Oppure si potrebbe anche disabilitare la X del foglio stesso.
     
    'da inserire nel ThisWorkbook
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
            If Foglio2.[g4] = "" Then
            Foglio2.[g4] = "niente"
            ActiveWorkbook.Save
            End If
    End Sub



  • di Puoti (utente non iscritto) data: 18/02/2013 08:03:45

    HarryBosch sei stato grandioso funziona tutto complimenti e grazie per tutto quello che hai fatto, appena mi sarà possibile effettuerò una donazione per sostenere questo magnifico forum.

    Cordiali Saluti



  • di HarryBosch data: 18/02/2013 20:53:34

    Ma di niente!
    Per me è già molto gratificante l'entusiasmo di chi riesce a risolvere il proprio thread! ^_^

    Allora alla prossima...



  • di Puoti (utente non iscritto) data: 20/02/2013 13:40:25

    HarryBosch io penso che se tutti aiutassero il prossimo come fai tu (e tanti altri come te in questo forum) il mondo sarebbe migliore . Certamente alla prossima e se nel mio piccolo posso esserti di aiuto in qualche cosa, sono a tua completa disposizione. .

    Cordiali Saluti