[Excel 2003] Iniziare macro dalla cella in cui si trova il pulsante premuto

Anonimo
2013-01-05T16:56:49+00:00

Buongiorno a tutti.

Ho un elenco di siti e forum con Username e password.

PULSANTE   https://skydrive.live.com   ******@hotmail.it   password

PULSANTE   http://www.google.it/       username               password

Ho registrato una macro in Excel 2003 , con riferimenti relativi, che copia la cella con lo Username e poi avvia il sito web corrispondente (questo per avere il nome utente già pronto da incollare).

Poi ho pensato di inserire un pulsante, a sinistra di ogni riga, per avviare la macro che prenda i dati di quella riga. Purtroppo non riesco a far sì che la macro inizi l'esecuzione dalla cella corrispondente alla posizione del pulsante premuto; devo prima portare il cursore nella cella del pulsante, poi la macro funziona bene.

Ho fatto ricerche con "Active.cell" e "Range", ma non ho concluso niente. Avevo anche pensato ad usare il "rilascio" del pulsante, ma non so come fare...

La Macro è questa:

Sub FILL()

'

' FILL Macro

'

'

ActiveCell.Offset(0, 2).Range("A1").Select

Selection.Copy

ActiveCell.Offset(0, -1).Range("A1").Select

Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True

End Sub

Grazie a chi mi vorrà aiutare.

Ciao!

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
Anonimo
2013-01-07T22:24:11+00:00

Ciao dnidny,

ho visto il tuo esempio e ho una buona notizia: ti puoi risparmiare i pulsanti. Visto che ciò che ti proponi sembra essere semplicemente copiare il contenuto della cella a destra di quella contenente il collegamento ipertestuale allora basterà intercettare:

  • Event FollowHyperlink(Target As Hyperlink)

    Membro di Excel.Worksheet

Così:

  1. Clic destro sul nome del Foglio di lavoro (nell'esempio è Foglio1)
  2. Visualizza codice
  3. Seleziona:

Worksheetnella casella Oggetto, quella in alto a sinistra dove si legge: (generale). 4. Seleziona:

FollowHyperlinknella casella Routine, quella in alto a destra dove probabilmente ora si legge: SelectionChange. 5. Ora il cursore è fra le righe della routine, così:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)|End Sub 6. Aggiungi l'istruzione:

Target.Range.Offset(, 1).Copyin modo da ottenere:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

    Target.Range.Offset(, 1).Copy

End Sub

Tutto qui, e i pulsanti non servono più. Fa' sapere se è quello che ti interessava ottenere.

La risposta è stata utile?

6 persone hanno trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2013-01-08T18:16:08+00:00

Ciao dnidny,

grazie del riscontro!

Una "Macro" è una "Routine", perché tutto il codice che scriviamo lo scriviamo in blocchi di istruzioni, di tipo "Sub" o "Function", dette appunto routine. Una macro è una routine, di tipo "Sub", un po' speciale in quanto

  • deve essere accessibile dall'interfaccia utente di Excel (cosa che invece non dovrebbe essere vera per tutte le altre routine di tipo "Sub") allo scopo per esempio di poterla associare a un Pulsante. .
  • non può prevedere parametri, o argomenti.
  • deve essere scritta in un "Modulo", detto anche "Modulo standard", del Progetto VBA.

Anche quella proposta (Worksheet_FollowHyperlink) è una routine, di tipo "Sub", un po' speciale in quanto viene eseguita a seguito dello scatenarsi di un "Evento". È detta appunto routine-evento e può essere scritta solo nel "Modulo di classe" di un oggetto. Nel nostro caso l'oggetto Worksheet.

La risposta è stata utile?

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

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-01-10T15:50:14+00:00

    Un ulteriore grazie per la spiegazione.

    Arrivederci alla prossima... routine!

    Ciao!

    d

    La risposta è stata utile?

    3 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2013-01-08T15:57:44+00:00

    Perfetto! Semplicemente geniale  ;-)

    E' proprio quello che mi proponevo: anzi, meglio.

    Praticamente in ogni zona del foglio ottengo il link/copy, e più rapidamente senza mettere pulsanti!

    Questa, dunque, non è una macro, ma una "routine" che gira nel foglio?

    Grazie per la tua pazienza, disponibilità e indubbia competenza  :-)

    Ciao!

    d

    La risposta è stata utile?

    3 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
  3. Anonimo
    2013-01-07T17:12:45+00:00

    Ho provato la tua macro e funziona benissimo: mi rende nel MsgBox l'indirizzo della cella attiva.

    Ora però ho il problema di fondere le due macro: ho fatto vari tentativi, ma non ce la cavo... :-(

    Public Sub Macro1()

    Dim wsh As Excel.Worksheet

    Dim obj As Excel.Shape

    Dim rng As Excel.Range

    Set wsh = Application.ActiveSheet

    Set obj = wsh.Shapes.Item(Application.Caller)

    Set rng = obj.TopLeftCell

    MsgBox rng.Address

    Set rng = Nothing

    Set obj = Nothing

    Set wsh = Nothing

    ' Qui ci vorrebbe l'istruzione che definisce la cella attiva "rng.Address"

    ' Dopodiché la mia macro partirebbe dalla cella sotto il pulsante...?

    ActiveCell.Offset(0, 2).Range("A1").Select

    Selection.Copy

    ActiveCell.Offset(0, -1).Range("A1").Select

    Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True

    End Sub

    Ecco il file del mio esempio:

    https://skydrive.live.com/redir?resid=AFBDE0079047B00D!4887&authkey=!AE39weXdvt9oI9g

    Purtroppo non ho le basi di sintassi necessarie: mi servirebbe un aiuto in più per completare l'opera...

    Grazie!

    d

    La risposta è stata utile?

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