Macro per Inserimento nominativi in cartella Excel: nuovo foglio di lavoro + aggiunta a elenco

Ciao a tutti,

sto cercando di creare una cartella di lavoro con Excel per l'inserimento di nominativi con relativa scheda anagrafica (rappresentata da foglio di lavoro) partendo da un modello.

 

In pratica alla fine avrei:

 

1° foglio: MENU con elenco nominativi

2° foglio: modello foglio di lavoro (scheda nominativo)

3° foglio: scheda nominativo "Anna"

......

x° foglio: scheda nominativo "Zuzzurro"

 

Ho realizzato una macro posta su un pulsante nel foglio MENU che:

 

1) crea un foglio di lavoro chiedendo tramite popup il nome da inserire

2) ordina i fogli di lavoro in ordine alfabetico

 

VORREI DA EXCEL:

3) che in caso clicco su ANNULLA interrompesse la macro

4) che inserisse il nome (indicato per il nuovo foglio di lavoro) in un elenco nel foglio MENU, ordinando questo elenco in ordine alfabetico

 

Questo è il codice della macro attuale da me preparata (cercando pezzi di codice qua e la......:

 

Sub Crea_Scheda()
         Dim CurrentSheetName As String
         Dim N As Integer
         Dim M As Integer
         Dim FirstWSToSort As Integer
         Dim LastWSToSort As Integer
         Dim SortDescending As Boolean

 

 

    CurrentSheetName = ActiveSheet.Name

 

'Add New Sheet
        Sheets.Add

 

'Make sure the name is valid
        On Error Resume Next

 

'Get the new name
        ActiveSheet.Name = InputBox("Digita il nome della persona")

 

'Keep asking for name if name is invalid
    Do Until Err.Number = 0
        Err.Clear
        ActiveSheet.Name = InputBox("" _
          & vbCrLf & "Nome non valido o Cliente esistente" _
          & vbCrLf & "" _
          & vbCrLf & "Assegna un nome alla nuova scheda")
    Loop
    On Error GoTo 0

 

'Go back to where you started
'Not needed if you don't want to return
'to where you started but want to stay
'on the New Sheet
    Sheets(CurrentSheetName).Select

 

SortDescending = False

         If ActiveWindow.SelectedSheets.Count = 1 Then
              FirstWSToSort = 1
              LastWSToSort = Worksheets.Count
         Else
              With ActiveWindow.SelectedSheets
 For N = 2 To .Count
 
Exit Sub

 Next N
 FirstWSToSort = .Item(1).Index
 LastWSToSort = .Item(.Count).Index
 End With
 End If

 

For M = FirstWSToSort To LastWSToSort
 For N = M To LastWSToSort
 If SortDescending = True Then
 If UCase(Worksheets(N).Name) > UCase(Worksheets(M).Name) Then
 Worksheets(N).Move Before:=Worksheets(M)
 End If
 

Else
 If UCase(Worksheets(N).Name) < UCase(Worksheets(M).Name) Then
 Worksheets(N).Move Before:=Worksheets(M)

 End If
 

End If

 Next N

 Next M

 

End Sub

 

Grazie a chi avrà la pazienza di aiutarmi!

 

Informazioni domanda


Ultimo aggiornamento febbraio 27, 2018 Visualizzazioni 2.080 Si applica a:
Risposta

Mi pare tutto ok ora.. anche la soluzione di mettere il nome in maiuscolo è ottima!

 

Per essere funzionale sarebbe utile completare il file con:

- gestione eliminazione fogli da elenco in menu (magari con warning prima di eliminare..)

- dopo la creazione del foglio, visualizzarlo (e non riportare a Modello).

 

P.S.: ho notato che se nascondi Modello (cosa poco importante o superflua) crea Modello(2), Modello(3).

 

Grazie.

 

Rimodificato:

http://www.maurogsc.eu/esempiforum13/elencaordinafogli.zip


Per eliminare il foglio, se facciamo click sul nome foglio scateniamo l'hiperlink. Possiamo creare una UserForm che gestisce la cosa, ma non credo sia difficile utilizzare il click con il tasto destro sull'etichetta del foglio da eliminare e selezionare Elimina. In alternativa, una macro da attivare con CTRL+a (vedi sempre l'esempio modificato). In questo caso selezioni il foglio da eliminare(dalla linguetta o dal menu) e quindi premi CTRL+a.

 

Puoi, adesso, anche nascondere il modello.

--
Mauro Gamberini
Microsoft© MVP (Excel)
http://www.maurogsc.eu

La risposta è risultata utile a 1 persona

·

Il problema è stato risolto?

Siamo spiacenti che questo non sia stato d'aiuto.

Fantastico! Grazie per aver scelto questa risposta.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento, ci aiuta a migliorare il sito.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento.