Macro Crea foglio con collegamento



  • Macro Crea foglio con collegamento
    di Simodome91 (utente non iscritto) data: 14/12/2015 18:16:55

    Buona sera;

    Sono 2 settimane che litigo con il computer per una macro....non ditelo mai a lui ma l'unica colpa è la mia inesperienza.

    Scherzi a parte vi espongo il mio problema:

    Ho due file di excel chiamati:

    -"Lista"
    -"Allegati"

    In "lista" ho un elenco di nomi nel foglio "elenco" dalla cella "e12" fino alla cella "e500"

    Quando faccio doppio click su uno di quei nomi si dovrebbe creare un foglio su "allegati" con il nome nella cella cliccata seguendo queste regole:

    - Se la cella è vuota creare una msgbox con scritto "cliccare nome"
    - Se il foglio con il nome della cella cliccata in "allegati" esiste aprirmi quel foglio
    - Se il foglio con il nome della cella cliccata non esiste creare il foglio in "allegati" copiando il foglio "base"

    La sensazione dovrebbe essere che al doppio click mi indirizza sul foglio con quel nome senza accorgermi se esiste oppure no.

    Vi ringrazio per la disponibilità.

    Simone
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'Doppio click
       If Not Application.Intersect(Target, Range("E12:E500")) Is Nothing Then ActiveCell.Select 'Range doppio click + Seleziona cella attiva
    Selection.Copy
    Range("A1").Select
    ActiveSheet.Paste
        
        
    Dim Nomegara As String 'Crea valore Nomegara
       Nomegara = Workbooks("lista.xlsm").Sheets("elenco").Range("a1") 'Imposta valore Nomegara su cella A1 del foglio calendario
    
     If ? Then
     
    Sheets(Nomegara).Select
    
    Else
    
       
     Worksheets.Add 'Aggiungi foglio
       ActiveSheet.Name = Nomegara 'Rinomina foglio con A1 del foglio calendario
       ActiveSheet.Select 'Seleziona foglio attivo
       ActiveSheet.Move After:=Workbooks("InfoGara.xlsx").Sheets(1)
       
    End If
    
    Cancel = True
    
    End Sub 'Fine
    
    
    



  • di patel data: 14/12/2015 18:59:07

    allega un file di esempio da testare





  • di Simodome91 (utente non iscritto) data: 14/12/2015 19:54:59

    Chiedo scusa per non averlo allegato prima.

    Ho creato subito un file di esempio.
    Grazie per l'attenzione

    Simone



  • di patel data: 15/12/2015 09:31:28

    la fantasia non ti manca, metti insieme istruzioni un po' a caso.
    Non sarebbe più semplice inserire il foglio Base direttamente in lista.xlsm e poi copiarlo e rinominarlo ?
    In tal modo eviteresti di aprire ogni volta il file InfoGara.xlsx, cosa che hai tralasciato nella tua macro.
    Supponendo una tua risposta positiva prova questa macro 
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'Doppio click
    On Error GoTo errore
    If Not Application.Intersect(Target, Range("E12:E500")) Is Nothing Then
     Sheets(Target.Text).Select ' se il foglio esiste lo seleziona altrimeni va a errrore
     Exit Sub
    errore:
      Application.DisplayAlerts = False ' evita gli alert, hai dei nomi nel foglio base e verranno duplicati
      Sheets("Base").Copy After:=Sheets(Sheets.Count) ' copia base e lo posiziona in fondo
      Sheets(Sheets.Count).Name = Target.Text ' rinomina il foglio copiato
    Application.DisplayAlerts = True ' ripristina gli alert
    End If
    End Sub






  • di Simodome91 (utente non iscritto) data: 15/12/2015 10:09:10

    Dopo una settimana di follia ho fatto un bel casino; effettivamente il mio file copiava il doppio click su "a1": lo selezionava, copiava e rinominava il foglio con la cella "a1"....non sono riuscito a fare meglio..

    Grazie per la risposta sei stato gentilissimo...più tardi lo provo e ti faccio sapere... se possibile potresti spiegarmi la macro cosi che io possa apprendere?

    Ancora grazie per avermi dedicato il tuo tempo

    Simone



  • di Simodome91 (utente non iscritto) data: 15/12/2015 12:48:37

    Innanzitutto ti ringrazio per il tempo dedicato, ho provato la macro e funziona, però avrei esigenza di avere questo documento in un altro foglio se possibile.


    In aggiunta vorrei chiedere un ulteriore aiuto (se non rompo troppo);

    Avviare la macro da un icona:

    Se io in "g12" creassi un icona che potesse indirizzarmi ad un altro foglio in questo modo:

    - L'icona si rinomina con la cella "e" della riga corrispondente (se l'icona si trova in "g22" si rinomina come la cella "e22" quando la clicco)

    e poi facesse lo stesso lavoro della macro funzionante tenendo come riferimento il nome dell'icona.

    Grazie mille per avermi aiutato.

    Simone



  • di Simodome91 (utente non iscritto) data: 15/12/2015 12:49:57

    Scusatemi: avrei esigenza di avere questi fogli in un altro documento*



  • di Simodome91 (utente non iscritto) data: 15/12/2015 12:54:18

    Scusa ancora per il disturbo: Ho notato che cliccando una cella vuota lui crea comunque un foglio dandomi errore e nominandole base(2)

    Grazie ancora

    Simone



  • di patel data: 15/12/2015 16:30:48

    per evitare l'errore cliccando su una cella vuota
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'Doppio click
    On Error GoTo errore
    If Not Application.Intersect(Target, Range("E12:E500")) Is Nothing Then
     Sheets(Target.Text).Select ' se il foglio esiste lo seleziona altrimeni va a errrore
     Exit Sub
    errore:
      if target.Text = "" then exit sub
      Application.DisplayAlerts = False ' evita gli alert, hai dei nomi nel foglio base e verranno duplicati
      Sheets("Base").Copy After:=Sheets(Sheets.Count) ' copia base e lo posiziona in fondo
      Sheets(Sheets.Count).Name = Target.Text ' rinomina il foglio copiato
      Application.DisplayAlerts = True ' ripristina gli alert
    End Sub






  • di Simodome91 (utente non iscritto) data: 15/12/2015 23:34:45

    Grazie per le risposte;

    Ho modificato appena la macro attivando il foglio che si trova sulla stessa cartella per far si che apra o crei il foglio su un altro file; ancora grazie per la disponibilità.

    Simone
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'Doppio click
    On Error GoTo errore
    If Not Application.Intersect(Target, Range("E12:E500")) Is Nothing Then
     Workbooks("InfoGara.xlsx").Activate
     Sheets(Target.Text).Select ' se il foglio esiste lo seleziona altrimeni va a errrore
     Exit Sub
    errore:
      If Target.Text = "" Then Exit Sub
      Application.DisplayAlerts = False ' evita gli alert, hai dei nomi nel foglio base e verranno duplicati
      Sheets("Base").Copy After:=Sheets(Sheets.Count) ' copia base e lo posiziona in fondo
      Sheets(Sheets.Count).Name = Target.Text ' rinomina il foglio copiato
      Application.DisplayAlerts = True ' ripristina gli alert
    End If
    End Sub