Bytte hoder i en Frozen Row

May 26  by Eliza

Tim fikk noen regneark som har to separate deler (la oss kalle dem øvre og nedre seksjoner) som har litt forskjellige kolonneoverskriftene. Han frosset den øverste raden for å holde den øvre delen overskrifter synlig mens du blar nedover, men etter å ha rullet forbi et visst punkt Tim ender opp med å se på nedre delen data med øvre delen overskrifter fremdeles på toppen. Han ville gjerne vite om det er en måte å bytte den frosne overskriftsraden for å vise den nedre delen overskrifter når han ruller ned til det punktet at bare lavere delen data viser.

Ja, det er en måte å gjøre dette på, men det innebærer bruk av makroene. Før du vurderer en makro-basert løsning, kan det være lurt å vurdere restrukturering dine data, slik at hver av seksjonene er på forskjellige regneark. (Fra et designperspektiv, ville dette være den enkleste løsningen.) Hvis dette ikke er mulig, så må du se på makroer.

En enkel tilnærming er å bare endre det som er lagret i øverste rad (rad 1) av regnearket, avhengig av hva rad er valgt. For eksempel vil følgende makro gjøre endringer i den øverste raden basert på hvor den aktive cellen er plassert. Hvis det er før rad 40, blir deretter ett sett av topptekstene stappet inn i den første rad; hvis etter rad 40 da et annet sett med overskrifter er fylt.

Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Dim iBottomData As Integer

iBottomData = 40

Hvis ActiveCell.Row <iBottomData Deretter
Celler (1, 1) .Value = "etternavn"
Celler (1, 2) .Value = "fornavn"
Celler (1, 3) .Value = "Adresse"
Celler (1, 4) .Value = "Balance"
Else
Celler (1, 1) .Value = "Account"
Celler (1, 2) .Value = "Sales Rep"
Celler (1, 3) .Value = "Status"
Celler (1, 4) .Value = ""
End If
End Sub

Å bruke makroen, bare sørg for at du plasserer den i kodevinduet for regnearket som inneholder de to data seksjoner. Du bør også endre verdien tilordnet iBottomData variabel å reflektere radnummer hvor bunndatadelen starter.

Hvis du ønsker å faktisk endre den frosne rad som du flytter ned regnearket, så makroen må være litt mer robust. Egentlig er det to makroer som følger (både gå, igjen, i koden vinduet for regnearket), og de blir kastet inn i handlingen som du vil endre valgt celle og som du høyreklikker på regnearket.

Private Sub Worksheet_BeforeRightClick (ByVal _
Target As Range, Avbryt Som Boolean)
Application.ScreenUpdating = False
ActiveWindow.FreezePanes = False
ActiveWindow.Split = False
Application.EnableEvents = False
Application.Goto Cells (1, 1), bla: = True
Med ActiveWindow
.SplitColumn = 0
.SplitRow = 1
Avslutt med
ActiveWindow.FreezePanes = True
Application.Goto Cells (Target.Row - 1, _
Target.Column), rull: = sant
Application.EnableEvents = True
On Error Resume Next 'må aktiverer du arrangementer
Application.EnableEvents = False
ActiveCell.Offset (-1, 1 - Target.Column) .Velg
'Så høyreklikk menyen ikke popup
'Bare hvis dette er den andre header rad.
Avbryt = True
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Application.ScreenUpdating = False
Hvis Cells (Target.Row, 1) .Value <> "TITLE2" Then Exit Sub
ActiveWindow.FreezePanes = False
ActiveWindow.Split = False
Application.Goto Cells (Target.Row, 1), bla: = True
Med ActiveWindow
.SplitColumn = 0
.SplitRow = 1
Avslutt med
ActiveWindow.FreezePanes = True
On Error Resume Next 'må aktiverer du arrangementer
Application.EnableEvents = False
ActiveCell.Offset (1, 1 - Target.Column) .Velg
Application.EnableEvents = True
End Sub

Den Worksheet_SelectionChange hendelseshåndterer flytter automatisk frosne split til under den andre raden av overskrifter når aktiv cellepekeren treffer den linjen. Denne linjen er oppdaget i If-setning som sjekker om den første cellen i raden inneholder teksten "TITLE2" eller ikke. (Obviouly, dette bør endres for å gjenspeile det som virkelig vil være i den første cellen.)

Den Worksheet_BeforeRightClick hendelseshåndterer flytter den frosne split tilbake til det første settet med overskrifter, men forlater den aktive cellen på raden over det andre settet med overskrifter.

Du bør forstå at begge de makro løsninger som presenteres i dette tipset anta at du faktisk bla gjennom regnearket og endre den valgte cellen som du går. (Med andre ord, er du trykke på Pil ned for å gjøre din rulling.) Hvis du bare å endre hva som vises i regnearket ved hjelp av det vertikale rullefeltet, da de frosne overskrifter vil ikke endre fordi du ikke endrer valgt celle og arrangementet handlers aldri utløse.

Skape en mer omfattende løsning ville være utenfor rammen av dette tipset fordi det ville innebære grensesnitt med selve operativsystemet. Hvis du er interessert i å gå denne ruten, men kanskje et greit utgangspunkt være denne siden på Chip Pearson webområde:

http://www.cpearson.com/excel/DetectScroll.htm

ExcelTips er din kilde for kostnadseffektiv Microsoft Excel trening. Dette tipset (3446) gjelder for Microsoft Excel 97, 2000, 2002, og 2003. Du kan finne en versjon av dette tipset for Båndet av Excel (Excel 2007 og senere) her: Bytte hoder i en Frozen Row.