Condividi tramite

Macro rinomina foglio

Anonimo
2022-09-25T07:35:27+00:00

Salve.

Ho il seguente codice che uso quando ho un Foglio che voglio rinominare automaticamente in base al valore di una cella.

Funziona perfettamente.

Se inavvertitamente nella in A1 di un Foglio inserisco un "nome" già esistente ovviamente mi dà errore.

Vorrei però che mi comparisse una finestra con un messaggio di errore scelto da me (per esempio "ERRORE: Questo nome esiste già"). Per il resto mi va bene così.

Grazie a chi vorrà darmi un aiuto.

Giuseppe


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Set Target = Range("A1")

If Target = "" Then Exit Sub

Application.ActiveSheet.Name = VBA.Left(Target, 31)

Exit Sub

End Sub


Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Eleuterio Tedeschi 18,590 Punti di reputazione Moderatore volontario
2022-09-25T10:44:18+00:00

Salve.

Ho il seguente codice che uso quando ho un Foglio che voglio rinominare automaticamente in base al valore di una cella.

Funziona perfettamente.

Se inavvertitamente nella in A1 di un Foglio inserisco un "nome" già esistente ovviamente mi dà errore.

Vorrei però che mi comparisse una finestra con un messaggio di errore scelto da me (per esempio "ERRORE: Questo nome esiste già"). Per il resto mi va bene così.

Grazie a chi vorrà darmi un aiuto.

Giuseppe

Io la scriverei così:

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, [A1]) Is Nothing Then 

    If ActiveSheet.Name = [A1].Value Or [A1].Value = "" Then 

        If [A1].Value = "" Then 

            MsgBox "La cella è vuota", vbInformation 

        Else 

            MsgBox "Nome esistente", vbInformation 

        End If 

    Else 

        On Error Resume Next 

        ActiveSheet.Name = [A1].Text 

        If Err.Number > 0 Then 

            MsgBox "Inserire un nome valido", vbCritical, "Errore!" 

            Err.Clear 

        End If 

        On Error GoTo 0 

    End If 

End If 

End Sub

Intercetti nomi uguali e cella vuota ed ottieni il messaggio che volevi, inoltre nell'assegnazione del nome controlli anche che non vengano usati caratteri non ammessi,

ciao.

La risposta è stata utile?

2 persone hanno trovato utile questa risposta.
0 commenti Nessun commento

10 risposte aggiuntive

Ordina per: Più utili
  1. Eleuterio Tedeschi 18,590 Punti di reputazione Moderatore volontario
    2022-09-25T11:02:14+00:00

    Nel quesito ho letto che gli occorre per un Foglio specifico,

    ciao.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Gianfranco55 25,190 Punti di reputazione Moderatore volontario
    2022-09-25T10:54:36+00:00

    ciao

    una curiosità

    Private Sub Worksheet_Change(ByVal Target As Range)

    lo devi mettere una per foglio o sbaglio

    se lo metti in

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    non è meglio?

    la cella A1 di qualsiasi foglio verrà intercettata.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2022-09-25T10:48:19+00:00

    Grazie Gianfranco.

    Faccio due osservazioni:

    1. Con il tuo codice nel Modulo "Questa Cartella di lavoro" ogni Foglio della cartella cambia nome quando cambia il Valore della Cella A1 nello stesso Foglio . Invece io vorrei un codice nel Modolo del Foglio da usare solo in quei Fogli per i quali voglio che assumano il nome di una determinata cella.
    2. Anche con il tuo codice se cambio la cella A1 cambia il nome del Foglio.

    Giuseppe

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Gianfranco55 25,190 Punti di reputazione Moderatore volontario
    2022-09-25T10:26:32+00:00

    Ciao

    pur non essendo esperto

    mi permetto di sconsigliarti di utilizzare

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    ogni qualvolta tocchi un cella lanci la macro

    e mi sembra esagerato.

    prova a mettere nella cartella di lavoro

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
    
        If Sh.Name <> Sh.Range("A1").Text Then 
    
            On Error Resume Next 
    
                Sh.Name = Sh.Range("A1").Text 
    
            On Error GoTo 0 
    
        End If 
    
    End Sub
    

    oppure

      Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
    
        If Not Intersect(Target, Range("A1")) Is Nothing Then 
    
        On Error Resume Next 
    
            If Target <> "" And Target.Count = 1 Then 
    
                ActiveSheet.Name = Target.Value 
    
                 End If 
    
        End If 
    
    End Sub
    

    La risposta è stata utile?

    0 commenti Nessun commento