isolare celle con collegamenti esterni
Hai un problema con Excel? 
isolare celle con collegamenti esterni
di marxitpa data: 13/05/2015 08:26:52
Ho un foglio con la presenza di molte celle contenenti 'collegamenti esterni'.
Come fare per cancellare tutte le altre celle, cioè quelle non conteneti i collegamenti?
di alfrimpa data: 13/05/2015 13:43:35
Ciao Marxipta
Prova a guardare questo link se ti può essere d'aiuto
h t t p://www.vbforums.com/showthread.php?479089-Excel-VBA-HowTo-quot-IsHyperlink-quot-function-**-gt-SUPER-lt-**-RESOLVED
Alfredo
di marxitpa data: 13/05/2015 15:19:28
grazie alfrimpa ma non mi sembra risolva la mia richiesta.
di alfrimpa data: 13/05/2015 15:25:37
Si certo è ovvio.
Il mio era solo uno spunto che poi andrebbe adattato alle tue esigenze.
Se ho un po' di tempo provo a farlo io.
Alfredo
di alfrimpa data: 13/05/2015 15:36:18
Ciao
La sub sottostante cancella il contenuto delle celle del range indicato esclusi i collegamenti ipertestuali.
La macro e la function vanno copiate ed incollate in un modulo standard.
Io l'ho provata e sembra funzionare.
Spero di aver compreso bene la tua richiesta.
Alfredo
Sub TEST_IsHyperlink()
Dim aCell As Range
For Each aCell In ActiveSheet.Range("A1:A7").Cells 'Da modificare il range
If IsHyperlink(aCell) = False Then
aCell.ClearContents
End If
Next aCell
End Sub
Function IsHyperlink(aCell As Range) As Boolean
Dim i As Long
i = 0
On Error Resume Next
i = Len(aCell.Parent.Hyperlinks(aCell.Value).Name)
On Error GoTo 0
If i > 0 Then
IsHyperlink = True
Else
IsHyperlink = False
End If
End Function
|
di marxitpa data: 13/05/2015 17:43:55
grazie alfrimpa per l'impegno. Purtroppo mi cancella tutte le celle anche quelle dove è presente collegamento...
di alfrimpa data: 13/05/2015 18:19:47
Mah strano a a me ha cancellato solo le celle senza collegamenti.
Magari l'unica cosa che posso dire è di allegare un tuo file di esempio.
Alfredo
di alfrimpa data: 13/05/2015 18:37:37
Ciao
Prova ad inserire la funzione IsHyperlink() sul tuo foglio
=IsHyperlink(TuaCella) e verifica che restituisca falso se la della contiene testo normale e vero se contiene un collegamento esterno.
Alfredo
di alfrimpa data: 13/05/2015 19:10:05
A me funziona perfettamente
La sottoindicata istruzione restituisce proprio il nome del collegamento per cui se scriviamo
i = Len(aCell.Parent.Hyperlinks(aCell.Value).Name ed i è maggiore di 0 ci troviamo in presenza di un collegamento ipertestuale.
Diversamente (cioè con un testo normale) il codice andrebbe in debug ma l'istruzione
On Error GoTo 0 lo evita.
Spero di essere stato chiaro (almeno questo è quello che ho capito io
Alfredo
aCell.Parent.Hyperlinks(aCell.Value).Name |
di marxitpa data: 13/05/2015 19:29:47
ho allegato il file. Ho lasciato solo alcune celle con link esterni e quelle senza.
Nel file reale sono migliaia
di marxitpa data: 13/05/2015 19:34:00
devono restare solo le celle con presenza del link.
di alfrimpa data: 13/05/2015 19:38:13
Ho provato il tuo file e tutto funziona perfettamente.
E' stato cancellato il contenuto di tutte le celle che non contenevano collegamenti ipertestuali.
Ma tu che prove hai fatto per dire che non funzionava?
Alfredo
di alfrimpa data: 13/05/2015 19:55:54
Cit.: "devono restare solo le celle con presenza del link."
Ed infatti a me restano solo quelle.
Alfredo
di marxitpa data: 13/05/2015 21:15:49
non me ne volere ma ... sono un principiante.
Io inserisco tutto il codice che hai segnalato e adatto il Range("A1:A7") in Range("A1:A300") .
Mi elimina tutte le 300 celle (con link o senza) della prima colonna.
Non ho capito il "inserire la funzione IsHyperlink() sul tuo foglio
=IsHyperlink(TuaCella) ..."
dove lo devo inserire
di alfrimpa data: 13/05/2015 21:48:05
Ciao Marxitpa
Non preoccuparti; principianti lo siamo stati tutti (ed io talvolta mi sento ancora tale).
Dunque, come dicevo, devi copiare/incollare la sub e la function (entrambe) in un modulo standard.
Poi modifica il Range con la zona che ti interessa (ad es. A1:L300 o quel che è).
Lancia la macro TEST_Hyperlink().
Non occorre altro; la macro passa in rassegna ogni cella del Range interessato e se il suo contenuto non è un collegamento ipertestuale lo cancella.
Per quanto riguarda l'altra domanda era solo per verificare se i tuoi siano reali collegamenti ipertestuali.
Supponiamo che in A1 ci sia un collegamento ipertestuale se scrivi sul foglio di lavoro
=IsHyperlink(A1) questa restituirà VERO; diversamente restituirà FALSO (ma questo a te non serve; era solo per spiegare).
Questa funzione viene utilizzata all'interno della Sub per verificare se il contenuto della cella del Range interessato è o meno un collegamento ipertestuale.
Spero di essere stato chiaro.
Alfredo
di marxitpa data: 14/05/2015 05:59:13
ho allegato file reale. A me cancella tutto e non riesco a spiegarmi perchè.
Fatto la verifica per tutte le celle con =IsHyperlink(A1) e mi ritorna sempre FALSO
grazie per la pazienza ...
di alfrimpa data: 14/05/2015 12:47:37
Ciao Marxipta
Ho cambiato completamente strada e forse con uno stratagemma sono riuscito a risolvere
Ho dapprima determinato il codice del colore del font delle celle contenenti i collegamenti ipertestuali che è 16711680
Poi con la semplice sottostante macro ho cancellato tutte le celle che hanno un colore del font diverso.
Nel file che ti ho allegato ti ho messo anche un pulsante che ti lancia la macro.
Piccola raccomandazione: le celle unite, se non strettamente, necessarie, vanno evitate come la peste!!! Questo perché il VBA quando le incontra dà errore di esecuzione.
Quindi prima di lanciare la macro ho dovuto individuarle e togliere l'unione delle celle (che comunque erano tutte vuote).
Fai sapere.
Alfredo
Sub EliminaNoCollegamenti()
Dim miorange As Range
Dim cll As Range
Set miorange = Range("a1:c1320")
For Each cll In miorange
If cll.Font.Color <> 16711680 Then
cll.ClearContents
End If
Next cll
End Sub |
di marxitpa data: 14/05/2015 12:57:31
Grazie alfrimpa, funziona !!!
di lepat (utente non iscritto) data: 14/05/2015 21:04:17
allegare il file subito fa perdere meno tempo a tutti
di marxitpa data: 15/05/2015 20:14:33
scusa lepat se ho fatto perdere un po' del tuo tempo prezioso.
di marxitpa data: 15/05/2015 20:23:33
a proposito lepat ... se trovi un po' di tempo fai un giro e verifica quante sono le risposte con molti interventi ... ma che sono senza files allegati.
di alfrimpa data: 15/05/2015 22:52:11
Si Marx hai ragione nel dire che vi sono molte discussioni con molti interventi senza file allegati ma io credo che è interesse di chi pone il quesito, oltre ad avere la soluzione, sia quello di ottenerla nel più breve tempo possibile.
E la presenza di un file "esplicativo" può, come diceva Lepat, ridurre drasticamente i tempi di attesa.
Un saluto.
Alfredo
di marxitpa data: 16/05/2015 06:36:05
grazie alfrimpa e mi scuso per i miei ultimi commenti.
Cosa mi ha fatto perdere il controllo ... il modo "allegare il file subito fa perdere meno tempo a tutti" e i tempi ... quando ormai la discussione era chiusa.
Vuoi Approfondire?