Macro Crea foglio con collegamento
Hai un problema con Excel? 
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 |
Vuoi Approfondire?