percuoco, 02/02/2013 10:20:
ciao luigibix.
allora:
per il range da visualizzare ti faccio l'esempio della prima data di marzo. se faccio doppio click su 4/3/13 la "zona" del foglio che mi serve da vedere sullo schermo è T116:AG123 e così via per le altre date.
un'altra cosa. il doppio click non funziona su tutti i fogli. ad esempio, sul calendario di marzo se faccio il doppio click sulle date si apre la formula di conteggio, ma non trasferisce la visualizzazione sulla relativa zona del calendario. ho pensato che questo problema fosse dovuto al fatto che le macro non fossero attivate, ma anche dopo aver provveduto non accade niente.
puoi darmi delle indicazioni per come procedere?
Ciao Vittorio.
ho controllato il mese di marzo ed effettivamente era sballati i range di destinazione perchè marzo inizia con il giorno 4 e finisce con il giorno 28. Quindi la macro andava "settata" con valori ad hoc per quel mese.
Io ho corretto l'errore, però, dato che mi hai chiesto come funziona la macro, riporto a seguire la spiegazione dei vari passaggi, così ti cimenti tu e provi ad aggiustare la cosa.
Naturalmente, qualora non riuscissi, ti darò una mano.
Dunque, noterai che la macro ripete periodicamente le stesse istruzioni, questo perchè il tuo foglio è fondamentalmente suddiviso in 5 macrozone dettate dal tipo di attività da adempiere (gp, tp, tfr, ecc...).
Lo schema fisso delle istruzioni ha questa spiegazione:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(ActiveCell, Range("j4:j102")) Is Nothing Then 'se la cella su cui clicchi non si trova nel range j4:j102 allora
Exit Sub 'esci dalla macro
Else ' invece
If Not Intersect(ActiveCell, Range("j4:j56")) Is Nothing Then 'se la cella su cui clcchi si trova nel range j4:j121
For Each CELLA In Range("x116:x256") ' per ogni cella contenuta nel range x116:x247
If CELLA.Value = ActiveCell Then ' se la cella lì contenuta ha lo stesso valore della cella che clicchi allora
CELLA.Select 'selezionala
Application.Goto Reference:=CELLA, scroll:=True 'visualizza la cella in posizione A1
End If 'chiudi la condizione "SE"
Next 'ripeti il ciclo di ricerca per il range specificato (j4:j21)
Ho volutamente alterato alcuni range, giusto per permetterti di sperimentare.
Per quanto riguarda le altre due macro, altro non sono che delle utility che ho creato per, rispettivamente, cancellare i collegamenti ipertestuali che c'erano prima (nel range j4:ad 890, ossia tutti quelli che avevi creato tu nel foglio), e ricostituirli, corretti, nel range che mi interessava, ossia ac116:ad890.
Ora (e spiego questo per anticipare un problema che si è posto con il tuo ultimo quesito), di norma è bene non unire le celle e le colonne, perchè mettono in crisi excel.
Infatti, nel nostro caso, io ho dovuto selezionare il range ac116:ad890 nonostante, apparentemente, la cella che contiene il valore (torna all'elenco..ecc) sia in AC, perchè le colonne ac:ad sono unite, e quindi excel si confonde ed ha bisogno di soluzioni ad hoc.
cmq, per spiegare la macro:
Sub dfsdfsd()
For Each CELLA In Range("J4:AD890") ' per ogni cella nel range j4:ad890
Hyperlinks.Delete ' cancella tutti i collegamenti ipertestuali
Next
For Each cella2 In ActiveSheet.Range("ac116:aD890") ' in ogni cella contenuta nel range ac116:ad890
Set MYC = Cells(1, 1) 'setta come destinazione del collegamento la cella A1
If cella2.Value = "TORNA AL CALENDARIO DELLE DISPONIBILITA'" Then 'se la cella nel range indicato ha il testo "Torna al calendario delle disponibilità allora...
ActiveSheet.Hyperlinks.Add Anchor:=cella2, Address:="", SubAddress:=MYC.Address 'aggungi il collegamento ipertestuale alla cella con il valore richiesto
'il collegamento punterà alla stessa pagina (address:=""), con destinazione (Subaddress) settata ad hoc (MYC"
End If 'esci dalla condizione SE
Next 'ripeti le istruzioni per ogni cella incontrata nel range indicato (ac116:ad890)
End Sub
Per tornare al problema delle celle unite, la struttura del tuo foglio rende imprecisa la visualizzazione da te richiesta.
Quindi, per ora, non riesco a trovare un modo per visualzzare il range T:AD relativo al giorno selezionato.
Come ti dicevo, inoltre, nel mio monitor io vedo ben oltre il range (per l primo marzo, ad esempio) t116:ad123.
Magari, invece, dimmi tu qual'è il range che visualizzi, così al limite cerco di lavorare sullo zoom della pagina piuttosto che sugli offset.
(gli offset sono delle istruzioni che puntano a dx, sx, su o giu' rispetto alla cella specificata).
Esempio: cells(1,1).offset(3,1).select
significa:
rileva la cella nella prima riga e nella prima colonna (A1), e seleziona la cella alla terza riga sottostante ed una colonna a destra (B4).
Fammi sapere
Un saluto
[Modificato da luigibix 02/02/2013 11:42]
Luigi Bix
Casa: Windows Vista - Excel 2007 (ver. 12.0.06665.5003) SP3
Ufficio: Windows Xp - Excel 2007 (ver. 12.0.06665.5003) SP3