Pagina 1 di 2 12 UltimaUltima
Risultati da 1 a 30 di 32

Discussione: Macro che crea un nuovo foglio e con imputbox lo nomina



  1. #1
    L'avatar di Ghibly69
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Roma
    Età
    48
    Messaggi
    64
    Versione Office
    Excel 2010
    Likes ricevuti
    0
    Likes dati
    2

    Macro che crea un nuovo foglio e con imputbox lo nomina

    Non credo di violare il regolamento in quanto non è una domanda... è solo condivisione di una informazione.
    in caso lo sia mi scuso e cancellate il post.


    A chi può servire....
    Si parlava di una macro che facesse questo lavoro..
    l'ho trovata in rete e ho fatto l'aggiunta della imputbox.
    All'apertura della impbox crea il foglio con il numero e poi la cambia con il nome che scrivi mettendolo in sequenza.

    Sicuramente si può migliorare...
    il numero del foglio lo da in base pregressiva di excel, anche se lo cancelli excel prosegue con la numerazione interna.

    Codice: 
    Dim nome As Variant  
       
     Sub CreaFoglio()  
         Sheets.Add  
         ActiveSheet.Select  
         nome = InputBox("Inserisci il nome del Foglio", "NOME FOGLIO")  
         R = nome  
         ActiveSheet.Name = R & Worksheets.Count '<-- mette il numero al nome foglio  
          Sheets(R & Worksheets.Count).Select   '<--- seleziona il foglio  
          Sheets(R & Worksheets.Count).Move _  
          After:=Sheets(Worksheets.Count)  
     End Sub
    Ultima modifica fatta da:scossa; 06/01/16 alle 19:19 Motivo: inserito tag CODE

  2. #2

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1015
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Ciao,

    Citazione Originariamente Scritto da Ghibly69 Visualizza Messaggio
    ....
    Sicuramente si può migliorare...
    Direi che quanto meno andrebbe inserito un controllo sulla validità del nome; come saprai ci sono delle limitazioni sui caratteri utilizzabili nel nome di un foglio (: \ / ? * [ ] non sono validi), quindi bisogna prendere in considerazione che se nella inputbox venisse usato uno di questi caratteri il codice andrebbe in errore.

    Invito te, o chiunque ne avesse voglia, a provare a migliorare il codice alla luce di questa considerazione.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  3. #3
    L'avatar di ninai
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Barcellona P.G.
    Età
    55
    Messaggi
    1654
    Versione Office
    2010 PC
    Likes ricevuti
    890
    Likes dati
    184
    umhhh, sento "puzza" di regexp ........ , menomale che io sono "immune":166::166::190:
    "So che spiegare il proprio problema, in modo comprensibile, richiede un certo impegno ed è un lavoro "palloso", ma qualcuno lo deve pur fare ....., indovina chi?" (Cit. "Scossa")

  4. #4
    L'avatar di Ghibly69
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Roma
    Età
    48
    Messaggi
    64
    Versione Office
    Excel 2010
    Likes ricevuti
    0
    Likes dati
    2
    Citazione Originariamente Scritto da ninai Visualizza Messaggio
    umhhh, sento "puzza" di regexp ........ , menomale che io sono "immune":166::166::190:
    ;) cosa è il regexp ?

  5. #5

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1015
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Citazione Originariamente Scritto da ninai Visualizza Messaggio
    umhhh, sento "puzza" di regexp ........ , menomale che io sono "immune":166::166::190:
    No, non pretendo tanto :243:
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  6. #6

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1015
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Citazione Originariamente Scritto da Ghibly69 Visualizza Messaggio
    ;) cosa è il regexp ?
    E' l'abbreviazione (regex) per Regular Expression, una libreria alla base di quasi tutte le routine "trova e sostituisci" presenti nei vari text-editor ed altri ambienti di sviluppo.
    Nel VBA di Excel le regex non sono native ma la libreria "Microsoft VBScript Regular Expression 5.5" deve essere inserita "manualmente" nel progetto come ("early binding") oppure referenziata ("late binding").
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  7. #7
    L'avatar di rollis13
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Cordenons
    Messaggi
    812
    Versione Office
    2016 64bit
    Likes ricevuti
    146
    Likes dati
    53

  8. #8

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1015
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Citazione Originariamente Scritto da rollis13 Visualizza Messaggio
    Grazie per la segnalazione.
    Però, considerando che non è una richiesta di aiuto, direi che non si possa considerare un'infrazione del regolamento (a meno che non chieda nell'altro forum di migliorare il codice).
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  9. #9
    L'avatar di rollis13
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Cordenons
    Messaggi
    812
    Versione Office
    2016 64bit
    Likes ricevuti
    146
    Likes dati
    53
    @ scossa, certamente, va da se che le mie eventuali segnalazioni non sono intese come richieste di censura ma solamente un'integrazione ad un'omissione dell'utente; da parte di un utente è una forma di cortesia nel rispetto di una eventuale restrizione prevista dal regolamento di un forum segnalare la presenza di altri post identici.

  10. #10

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1015
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Citazione Originariamente Scritto da rollis13 Visualizza Messaggio
    da parte di un utente è una forma di cortesia nel rispetto di una eventuale restrizione prevista dal regolamento di un forum segnalare la presenza di altri post identici.
    :286::286:
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  11. #11
    L'avatar di Ghibly69
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Roma
    Età
    48
    Messaggi
    64
    Versione Office
    Excel 2010
    Likes ricevuti
    0
    Likes dati
    2
    Citazione Originariamente Scritto da rollis13 Visualizza Messaggio
    @ scossa, certamente, va da se che le mie eventuali segnalazioni non sono intese come richieste di censura ma solamente un'integrazione ad un'omissione dell'utente; da parte di un utente è una forma di cortesia nel rispetto di una eventuale restrizione prevista dal regolamento di un forum segnalare la presenza di altri post identici.
    E' vero Rollis, non ho pensato ad avvertire anche nell'altro forum, sorry!

    comunque è solo informativo il post, se si amplia la soluzione la posto anche nell'ltro per conoscenza del popolo del forum, non è una richiesta di aiuto ... in entrambi i forum.

    (non ti sfuge nulla hehehe) :246:

  12. #12

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1015
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Bene, chiarito il punto cross-post vogliamo dedicarci a migliorare quel codice o siamo qui a smacchiare i leopardi? :167:
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  13. #13
    L'avatar di Ghibly69
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Roma
    Età
    48
    Messaggi
    64
    Versione Office
    Excel 2010
    Likes ricevuti
    0
    Likes dati
    2
    girando in rete ho trovato questo in un post del 2012
    ....ma non funziona.... e non va neanche in debug.
    in rosso quello che ho inserito

    Codice: 
    Dim nome As Variant
    Dim CaratteriVietati As String
    Sub CreaFoglio()
    
    Sheets.Add
    ActiveSheet.Select
    nome = InputBox("Inserisci il nome del Foglio", "NOME FOGLIO")
    CaratteriVietati = ": \ / ? * [ ]"
    Cr = CaratteriVietati
        For I = 1 To 38
            Crv = Mid(Cr, I, 1)
    If InStr(nome, Crv) > 0 Then
    messagebox = "ERRORE. Non sono permessi numeri o caratteri non convenzionali"
            End If
    Next I
    R = nome
    ActiveSheet.Name = R & Worksheets.Count '<-- mette il numero al nome foglio
    Sheets(R & Worksheets.Count).Select '<--- seleziona il foglio
    Sheets(R & Worksheets.Count).Move _
    After:=Sheets(Worksheets.Count)
    End Sub

  14. #14

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2808
    Versione Office
    Excel 2013
    Likes ricevuti
    1020
    Likes dati
    979
    Sostituisci:
    Codice: 
    messagebox = "ERRORE. Non sono permessi numeri o caratteri non convenzionali"
    
    con
    
    MsgBox  "ERRORE. Non sono permessi numeri o caratteri non convenzionali", vbCritical, "ATTENZIONE"
    Exit Sub

  15. #15
    L'avatar di Ghibly69
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Roma
    Età
    48
    Messaggi
    64
    Versione Office
    Excel 2010
    Likes ricevuti
    0
    Likes dati
    2
    Ok, inserisce bene il nome del foglio " Prova1 " (nome + numero interno di excel )
    ma ATTENZIONE se si inserisce il carattere vietato da il messaggio ma entra in loop...
    non so dove mettere le mani!!

    Codice: 
    Dim nome As Variant
    Dim CaratteriVietati As String
    Sub CreaFoglio()
    
    Sheets.Add
    ActiveSheet.Select
    nome = InputBox("Inserisci il nome del Foglio", "NOME FOGLIO")
    CaratteriVietati = ": \ / ? * [ ]" '<-- caratteri non ammessi
    Cr = CaratteriVietati
        For I = 1 To 8
            Crv = Mid(Cr, I, 1)
    If InStr(nome, Crv) > 0 Then
    allert = MsgBox("ERRORE. Non sono permessi numeri o caratteri non convenzionali", vbInformation)
            End If
    Next
    R = nome
    ActiveSheet.Name = R & Worksheets.Count '<-- mette il numero al nome foglio
    Sheets(R & Worksheets.Count).Select '<--- seleziona il foglio
    Sheets(R & Worksheets.Count).Move _
    After:=Sheets(Worksheets.Count)
    End Sub
    Per correttezza sposto questa mezza soluzione anche nell'altro forum...

    REGEXP ho dato una letta ma mi è venuto il mal di testa!!

  16. #16

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2808
    Versione Office
    Excel 2013
    Likes ricevuti
    1020
    Likes dati
    979
    Una volta trovato il carattere vietato devi inserire
    Codice: 
     exit sub
    Inviato dal mio GT-I9301I utilizzando Tapatalk

  17. #17
    L'avatar di Textomb
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    47
    Messaggi
    171
    Versione Office
    Excel 2016
    Likes ricevuti
    93
    Likes dati
    11
    Premesso che le variabili andrebbero tutte dimensionate...
    Non serve quasi mai selezionare gli oggetti per fare delle azioni...
    Rivedendo la tua macro ho eliminato qualche istruzione di troppo.
    Inoltre l'aggiunta del foglio l'ho spostata alla fine della routine, dopo che è stata verificata la correttezza del nome digitato nell'inputbox.

    Codice: 
    Sub CreaFoglio()
    Dim Nome As String
    Dim NoChr As String
    Dim n As Long
    NoChr = "():\/?*[]"
        Nome = InputBox("Inserisci il nome del Foglio", "NOME FOGLIO")
        ' Verifico la correttezza dei caratteri digitati...
            For n = 1 To Len(Nome)
               If InStr(NoChr, Mid(Nome, n, 1)) > 0 Then
                   MsgBox "Il carattere " & Mid(Nome, n, 1) & " non è ammesso!!", vbCritical
                   Exit Sub
               End If
            Next
            
            With Sheets.Add(after:=Worksheets(Worksheets.Count))
                .Name = Nome & Worksheets.Count
            End With
                
     End Sub
    Secondo me però si può fare di meglio...

  18. I seguenti 3 utenti hanno dato un "Like" a Textomb per questo post:


  19. #18
    L'avatar di Ghibly69
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Roma
    Età
    48
    Messaggi
    64
    Versione Office
    Excel 2010
    Likes ricevuti
    0
    Likes dati
    2
    Secondo me però si può fare di meglio...
    Ho appena visto la differenza tra un Veterano e un junior ,io ! ;)
    domani me lo guardo per bene.

    ..vediamo chi raccoglie la sfida.

    Togliere la numerazione automatica che excel da al foglio-
    anche se cancelli il foglio che si è appena fatto excel mantiene la sua numerazione.

    a forza di provare sono arrivato al foglio 64

  20. #19
    L'avatar di Textomb
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    47
    Messaggi
    171
    Versione Office
    Excel 2016
    Likes ricevuti
    93
    Likes dati
    11
    Citazione Originariamente Scritto da Ghibly69 Visualizza Messaggio
    ..vediamo chi raccoglie la sfida.

    Togliere la numerazione automatica che excel da al foglio-
    anche se cancelli il foglio che si è appena fatto excel mantiene la sua numerazione.

    a forza di provare sono arrivato al foglio 64
    Non ho capito cosa vuoi ottenere...

    Sviluppando la stessa routine utilizzando le RegExp (prima citate...) diventerebbe una cosa del genere.
    Riconosco però che non è semplice.

    Codice: 
    Sub CreaFoglio()
    Dim Nome As String
        Nome = InputBox("Inserisci il nome del Foglio", "NOME FOGLIO")
            If Not RExVerNm(Nome) Then
                With Sheets.Add(after:=Worksheets(Worksheets.Count))
                .Name = Nome & Worksheets.Count
                End With
            Else
                MsgBox "Caratteri non ammessi", vbCritical
            End If
     End Sub
    Codice: 
    Function RExVerNm(Nm As String) As Boolean
    Dim objRegExp As Object
        Set objRegExp = CreateObject("vbscript.regexp")
        objRegExp.Global = True
        objRegExp.Pattern = "\(|\)|:|\\|\/|\?|\*|\[|\]"
        If objRegExp.test(Nm) = True Then RExVerNm = True
    End Function
    funzionerà...? :251:

  21. #20

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1015
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Un approccio diverso: delegare, tramite un'opportuna gestione degli errori, la verifica della validità al VBA stesso:

    Codice: 
    Sub CreaFoglio()
      'by scossa
      Dim ws As Worksheet
      Dim vRet As VbMsgBoxResult
      Dim Nome As Variant
      
      On Error GoTo exit_point
      Application.ScreenUpdating = False
      Set ws = Sheets.Add(after:=Worksheets(Worksheets.Count))
      Do
        Err.Clear
        Nome = Application.InputBox("Inserisci il nome del Foglio", "NOME FOGLIO", Type:=2 + 4)
        If Nome = "" Or Nome = False Then
          Err.Raise vbObjectError + 513
        Else
          On Error Resume Next
          ws.Name = Nome & "_" & Worksheets.Count
          If Err.Number <> 0 Then
            vRet = MsgBox("sono presenti caratteri non ammessi!", vbCritical + vbRetryCancel, "ERRORE")
            If vRet <> vbRetry Then Exit Do
          End If
        End If
      Loop While Err.Number <> 0
    exit_point:
      If Err.Number <> 0 Then
        Application.DisplayAlerts = False
        ws.Delete
        Application.DisplayAlerts = True
      End If
      Application.ScreenUpdating = True
      Set ws = Nothing
     End Sub
    Ultima modifica fatta da:scossa; 07/01/16 alle 00:53
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  22. I seguenti utenti hanno dato un "Like"


  23. #21
    L'avatar di rollis13
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Cordenons
    Messaggi
    812
    Versione Office
    2016 64bit
    Likes ricevuti
    146
    Likes dati
    53
    ... e ci sarà anche da verificare che la lunghezza del nome non superi i 31 caratteri, oltre ai caratteri illeciti.

  24. #22

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1015
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Citazione Originariamente Scritto da rollis13 Visualizza Messaggio
    ... e ci sarà anche da verificare che la lunghezza del nome non superi i 31 caratteri, oltre ai caratteri illeciti.
    Nel mio codice tale controllo è "insito": qualsiasi nome non valido verrà segnalato e l'inputbox verrà riproposta.
    Eventualmente si può modificare il messaggio da
    "sono presenti caratteri non ammessi!"
    a
    "caratteri non ammessi o lunghezza eccessiva!"

    Poi volendo basta un ulteriore If...Then per gestire due messaggi diversi.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  25. #23
    L'avatar di rollis13
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Cordenons
    Messaggi
    812
    Versione Office
    2016 64bit
    Likes ricevuti
    146
    Likes dati
    53
    Vero, in effetti avevo verificato ma poi mi ero accorto che accorciava i "mega" numeri con la notazione scientifica esponenziale così il nome continuava a star sotto i 31 caratteri.

  26. #24

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1015
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Citazione Originariamente Scritto da rollis13 Visualizza Messaggio
    Vero, in effetti avevo verificato ma poi mi ero accorto che accorciava i "mega" numeri con la notazione scientifica esponenziale così il nome continuava a star sotto i 31 caratteri.
    Per evitare la conversione basta cambiare
    Nome = Application.InputBox("Inserisci il nome del Foglio", "NOME FOGLIO", Type:=2+4)
    in
    Nome = Application.InputBox("Inserisci il nome del Foglio", "NOME FOGLIO", Type:=2)

    Ripropongo il codice modificato:
    Codice: 
    Sub CreaFoglio()
      'by scossa
      
      Dim ws As Worksheet
      Dim vRet As VbMsgBoxResult
      Dim Nome As String
      
      On Error GoTo exit_point
      Application.ScreenUpdating = False
      Set ws = Sheets.Add(after:=Worksheets(Worksheets.Count))
      Do
        Err.Clear
        Nome = Application.InputBox("Inserisci il nome del Foglio", "NOME FOGLIO", Type:=2)
        If Nome = "" Or Nome = False Then
          Err.Raise vbObjectError + 513
        Else
          On Error Resume Next
          ws.Name = Nome & "_" & Worksheets.Count
          If Err.Number <> 0 Then
            vRet = MsgBox("caratteri non ammessi o lunghezza eccessiva!", vbCritical + vbRetryCancel, "ERRORE")
            If vRet <> vbRetry Then Exit Do
          End If
        End If
      Loop While Err.Number <> 0
    exit_point:
      If Err.Number <> 0 Then
        Application.DisplayAlerts = False
        ws.Delete
        Application.DisplayAlerts = True
      End If
      Application.ScreenUpdating = True
      Set ws = Nothing
     End Sub
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  27. #25

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1015
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Una piccola modifica per rendere più esplicativo il messaggio di errore:

    Codice: 
    Sub CreaFoglio()
      'by scossa
      
      Dim ws As Worksheet
      Dim vRet As VbMsgBoxResult
      Dim Nome As Variant
      
      On Error GoTo exit_point
      Application.ScreenUpdating = False
      Set ws = Sheets.Add(after:=Worksheets(Worksheets.Count))
      Do
        Err.Clear
        Nome = Application.InputBox("Inserisci il nome del Foglio", "NOME FOGLIO", Type:=2 + 4)
        If Nome = "" Or Nome = False Then
          Err.Raise vbObjectError + 513
        Else
          On Error Resume Next
          ws.Name = Nome & "_" & ThisWorkbook.Worksheets.Count
          If Err.Number <> 0 Then
            vRet = MsgBox(Err.Description, vbCritical + vbRetryCancel, "ERRORE")
            If vRet <> vbRetry Then Exit Do
          End If
        End If
      Loop While Err.Number <> 0
    exit_point:
      If Err.Number <> 0 Then
        Application.DisplayAlerts = False
        ws.Delete
        Application.DisplayAlerts = True
      End If
      Application.ScreenUpdating = True
      Set ws = Nothing
     End Sub
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  28. #26
    L'avatar di Ghibly69
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Roma
    Età
    48
    Messaggi
    64
    Versione Office
    Excel 2010
    Likes ricevuti
    0
    Likes dati
    2
    ...mi sanguina il naso a leggere il codice... hehehe

    quello che ho capito è scritto a lato, e in rosso quello che assolutamente mi è oscuro.

    Codice: 
    Sub CreaFoglio()
      'by scossa
      
      Dim ws As Worksheet      '<--- dichiaro ws come foglio di lavoro
      Dim vRet As VbMsgBoxResult    '<--- dichiaro vRet come ...???
      Dim Nome As String         '<--- dichiaro Nome variabile di testo
      
      On Error GoTo exit_point    '<--- in caso di errore vai alla riga exit_point saltando tutto
      Application.ScreenUpdating = False   '<--- evito il saltellamento delle schermate
      Set ws = Sheets.Add(after:=Worksheets(Worksheets.Count))   '<--- dico a ws che diventerà il foglio creato 
      Do
        Err.Clear   '<--- ?????
        Nome = Application.InputBox("Inserisci il nome del Foglio", "NOME FOGLIO", Type:=2) '<--- ????
        If Nome = "" Or Nome = False Then '|___ ????
          Err.Raise vbObjectError + 513   '|
        Else
          On Error Resume Next   '<--- in caso di errore vai avanti lo stesso
          ws.Name = Nome & "_" & Worksheets.Count '<--- ws prende il nome con il numero di sequenza
          If Err.Number <> 0 Then  '<--- se il numero errori è diverso da zero allora..
            vRet = MsgBox("caratteri non ammessi o lunghezza eccessiva!", vbCritical + vbRetryCancel, "ERRORE")
            If vRet <> vbRetry Then Exit Do  '<--- ???
          End If
        End If
      Loop While Err.Number <> 0
    exit_point:
      If Err.Number <> 0 Then
        Application.DisplayAlerts = False
        ws.Delete
        Application.DisplayAlerts = True
      End If

  29. #27

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1015
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Citazione Originariamente Scritto da Ghibly69 Visualizza Messaggio
    ...mi sanguina il naso a leggere il codice... hehehe

    quello che ho capito è scritto a lato, e in rosso quello che assolutamente mi è oscuro.
    Codice: 
    Sub CreaFoglio()
      'by scossa
      
      Dim ws As Worksheet      '<--- dichiaro ws come foglio di lavoro
      Dim vRet As VbMsgBoxResult    '<--- dichiaro vRet come ...??? atto a ricevere una delle costanti (Long) della classe VBA.VbMsgBoxResult (*)
      Dim Nome As String         '<--- dichiaro Nome variabile stringa
      
      On Error GoTo exit_point    '<--- in caso di errore vai all'etichetta exit_point saltando tutto
      Application.ScreenUpdating = False   '<--- evito l'aggiornamento dello schermo (così non mostra il foglio aggiunto dall'istruzione sotto) 
      Set ws = Sheets.Add(after:=Worksheets(Worksheets.Count))   '<--- assegno a ws un riferimento al foglio creato 
      Do
        Err.Clear   '<--- ????? resetta l'oggetto Err (Err.Number = 0, etc...)
        Nome = Application.InputBox("Inserisci il nome del Foglio", "NOME FOGLIO", Type:=2) '<--- ???? 2 = l'input sarà una stringa
        If Nome = "" Or Nome = False Then '|___ ???? se ho cliccato su "Annulla", o la X rossa, o non ho scritto nulla nella finsetra dell'input
          Err.Raise vbObjectError + 513   '|         sollevo un errore, con conseguente salto all'etichetta exit_point
        Else
          On Error Resume Next   '<--- in caso di errore vai avanti lo stesso
          ws.Name = Nome & "_" & Worksheets.Count '<--- ws prende il nome con il numero di sequenza
          If Err.Number <> 0 Then  '<--- se il valore della proprietà Err.Number è diverso da 0 (cioè l'istruzione ws.Name = Nome .... ha generato un errore) 
            vRet = MsgBox(Err.Description, vbCritical + vbRetryCancel, "ERRORE") ' mostra una msgbox con la descrizione dell'errore
            If vRet <> vbRetry Then Exit Do  '<--- ??? se nella msgbox NON ho premuto "riprova" esco dal ciclo e poi elimino il foglio
          End If
        End If
      Loop While Err.Number <> 0 'ripeti il ciclo finché l'istruzione ws.Name = .... genera un errore
    exit_point:
      If Err.Number <> 0 Then ' se il valore della proprietà Number dell'oggetto Err è diverso da 0 (nel nostro caso avviene solo se è stata eseguita l'istruzione Err.Raise)
        Application.DisplayAlerts = False
        ws.Delete 'elimino il foglio che avevo aggiunto
        Application.DisplayAlerts = True
      End If
    (*) Dichiarando vRet come VbMsgBoxResult anziché semplicamente Long consentiamo all'intellisense di suggerire gli appropriati valori attesi (vbYes, vbNo .......)
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  30. #28
    L'avatar di Ghibly69
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Roma
    Età
    48
    Messaggi
    64
    Versione Office
    Excel 2010
    Likes ricevuti
    0
    Likes dati
    2
    non funziona,
    apre la imputbox, ti fa inserire il nome (non controlla caratteri vietati) e poi niente altro...
    File Allegati File Allegati

  31. #29

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1015
    Versione Office
    .
    Likes ricevuti
    366
    Likes dati
    0
    Citazione Originariamente Scritto da Ghibly69 Visualizza Messaggio
    non funziona,
    apre la imputbox, ti fa inserire il nome (non controlla caratteri vietati) e poi niente altro...
    Dovresti precisare che ti riferisci a questo codice:
    Codice: 
    Sub CreaFoglio1()
    Dim nome As String
    Dim NoChr As String
    Dim n As Long
    NoChr = "():\/?*[]"
        nome = InputBox("Inserisci il nome del Foglio", "NOME FOGLIO")
        ' Verifico la correttezza dei caratteri digitati...
            For n = 1 To Len(nome)
               If InStr(NoChr, Mid(nome, n, 1)) > 0 Then
                   MsgBox "Il carattere " & Mid(nome, n, 1) & " non è ammesso!!", vbCritical
                   Exit Sub
               End If
            Next
            
            With Sheets.Add(After:=Worksheets(Worksheets.Count))
                .Name = nome & Worksheets.Count
            End With
                
     End Sub
    che comunque fa esattamente quello che deve fare (controlla che non ci siano caratteri non validi etc...), per cui dovresti essere più preciso nel descrivere cosa non funzionerebbe.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  32. #30
    L'avatar di Ghibly69
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Roma
    Età
    48
    Messaggi
    64
    Versione Office
    Excel 2010
    Likes ricevuti
    0
    Likes dati
    2
    scusa Scossa, ho sbagliato file....

    questo è l'ultimo fatto.


    apre la imputbox, ti fa inserire il nome (non controlla caratteri vietati) e poi niente altro...
    File Allegati File Allegati

Discussioni Simili

  1. [Risolto] Macro che crea nel foglio tre un record dopo un altro record
    Di Mcmatt nel forum Domande su Excel VBA e MACRO
    Risposte: 5
    Ultimo Messaggio: 16/03/17, 10:34
  2. [Risolto] Macro per creare un nuovo foglio e copiarvi il contenuto di un foglio precedente
    Di gianfranco lazzini nel forum Domande su Excel VBA e MACRO
    Risposte: 3
    Ultimo Messaggio: 01/02/17, 12:48
  3. Creare nuovo foglio estraendo campi da uno precedente
    Di Federico2010 nel forum Domande su Excel in generale
    Risposte: 7
    Ultimo Messaggio: 07/10/16, 21:43
  4. Macro per creare nuovo foglio excel
    Di sgnappi nel forum Domande su Excel VBA e MACRO
    Risposte: 32
    Ultimo Messaggio: 26/09/16, 16:19
  5. Risposte: 2
    Ultimo Messaggio: 23/07/16, 18:27

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •