Visualizzazione delle stesse celle su fogli di lavoro diversi (Microsoft Excel)
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.