Quando si utilizzano più fogli di lavoro, Chris si chiede se esiste un modo per “bloccare” lo scorrimento di tutti i fogli di lavoro. Ad esempio, se scorre su Foglio1 fino a quando le righe da 100 a 140 e le colonne da G a P sono visualizzate, quando passa a Foglio2 (o qualsiasi altro foglio di lavoro) vorrebbe che le stesse righe e colonne fossero mostrate su quelle fogli di lavoro.

L’unico modo per eseguire questa operazione è tramite l’uso di macro. Quello che deve accadere è che la macro deve determinare quali righe e colonne sono visibili quando un foglio è disattivato (essere lasciato) e quindi impostare la visualizzazione del foglio attivato (quello che stai per raggiungere) sulle stesse righe e colonne. Le seguenti macro, aggiunte al modulo ThisWorkbook, eseguono esattamente questa operazione.

Dim grngSelection As Range Dim gintScrollColumn As Integer Dim glngScrollRow As Long

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

If TypeName(ActiveSheet) = "Worksheet" Then         On Error Resume Next         With ActiveWindow             Sh.Range(grngSelection.Address).Select             .ScrollColumn = gintScrollColumn             .ScrollRow = glngScrollRow         End With     End If End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

Dim oSheet As Object     If TypeName(Sh) = "Worksheet" Then         Set oSheet = ActiveSheet         Application.EnableEvents = False         Sh.Activate         With ActiveWindow             gintScrollColumn = .ScrollColumn             glngScrollRow = .ScrollRow             Set grngSelection = .RangeSelection         End With         oSheet.Activate         Application.EnableEvents = True     End If End Sub

Notare l’uso delle variabili al di fuori dei gestori di eventi. Queste variabili vengono utilizzate per passare i valori della colonna, della riga e dell’area selezionata dal gestore SheetDeactivate al gestore SheetActivate.

Ovviamente potresti non volere una soluzione automatica. Invece, potresti volere che l’utente esegua un passaggio specifico per attivare se i fogli di lavoro sono sincronizzati. Questo può essere fatto aggiungendo la seguente macro a un modulo normale nella tua cartella di lavoro:

Global WindowScrollRow Global WindowScrollCol Global WindowSyncOn As Boolean

Public Sub WindowLock()

If Not WindowSyncOn Then         WindowScrollRow = ActiveWindow.VisibleRange.Row         WindowScrollCol = ActiveWindow.VisibleRange.Column         Application.StatusBar = "WindowSync: ON"

Else         Application.StatusBar = ""

End If     WindowSyncOn = Not WindowSyncOn End Sub

Tutto ciò che fa questa macro è controllare lo stato della variabile globale WindowSyncOn. Se il valore è False, le impostazioni correnti per la riga visibile in alto e la colonna visibile più a sinistra vengono memorizzate in variabili globali. L’impostazione di queste variabili viene quindi utilizzata dal seguente gestore di eventi, aggiunto al modulo ThisWorkbook:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

If WindowSyncOn Then         If Not ActiveWindow Is Nothing Then             ActiveWindow.ScrollRow = WindowScrollRow             ActiveWindow.ScrollColumn = WindowScrollCol         End If     End If End Sub

La macro controlla semplicemente l’impostazione della variabile WindowSyncOn e, se è True (è stata impostata), la macro imposta quale riga e colonna si trovano nella parte superiore e sinistra della finestra attiva.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (3860) si applica a Microsoft Excel 97, 2000, 2002 e 2003.