Paldies Matam, kurš nosūtīja šīs nedēļas Excel jautājumu:
Man ir liela un augoša Excel darbgrāmata (daudz lapu). Drukāšanas laikā kājenē esmu iekļāvis lappušu numurus, tomēr, atrodoties sapulcē, ir arvien grūtāk orientēties. Vai ir veids, kā izdrukāt satura rādītāju, pamatojoties uz Excel darblapu nosaukumiem, lai es un darbinieki varētu ātri pāriet uz lapu #xx?
Šī ir lieliska ideja. Pirmais vienkāršais ieteikums ir lapas nosaukums iekļaut izdrukas kājenēs. Noklikšķinot uz "Pielāgota kājene" dialoglodziņā Lappuses iestatīšana / Galvenes kājene, ir 7 ikonas. Labākā ikona izskatās kā rādītāja karte ar trim cilnēm. Noklikšķinot lodziņā Labajā pusē: un noklikšķinot uz šīs ikonas, lapas nosaukums tiks drukāts uz katras lapas. Tas vien var palīdzēt orientēties pārskatā.
MrExcel patīk ideja par makro, lai izveidotu satura rādītāju. Galvenā problēma ir tā, ka programma Excel neaprēķina, cik darblapā ir drukātu lapu, kamēr neesat veicis drukas priekšskatījumu. Tātad makro ļauj lietotājam uzzināt, ka viņi drīz redzēs drukas priekšskatījumu, un lūdz to noraidīt, noklikšķinot uz pogas Aizvērt.
Makro tiek aplokots katrā darbgrāmatas lapā. Pašreizējā stāvoklī tas apkopo informāciju no katras darblapas nosaukuma. Esmu iekļāvis arī divas citas rindas, kuras tiek komentētas. Ja vēlaties iegūt aprakstu no kreisās galvenes vai no nosaukuma šūnā A1, ir arī parauga rindas, kas jādara arī vienā no tām. Vienkārši komentējiet to, kuru vēlaties izmantot.
Makro aprēķina, cik daudz lapu, pievienojot vienu horizontālo lapu pārtraukumu skaitam (HPageBreaks.count). Tas pievieno vienu vertikālo lapu pārtraukumu skaitam (VPageBreaks.Count). Tas reizina šos divus skaitļus kopā, lai aprēķinātu lappušu skaitu šajā darblapā. Ja kādam lojālam lasītājam ir labāks veids, kā to izdarīt, lūdzu, informējiet mani. Pašreizējā lapu pārtraukumu skaitīšanas metode ir velnišķīgi lēna. Šķiet, ka nevarēju atrast rekvizītu, kas man norādītu, cik drukāto lapu ir, bet jūs domājat, ka programmā Excel būtu viena.
Pēdējais triks bija ienākšana lapu diapazonā. Ja lapa atradās lapās "3 - 4", Excel to uzskatītu par datumu un ievadītu 4. martu. Iestatot šūnu formātu tekstam ar rakstzīmi "@", lapas tiek ievadītas pareizi.
Šeit ir makro:
Sub CreateTableOfContents() ' Copyright 1999.com ' Determine if there is already a Table of Contents TOCFound = False For Each s In Worksheets If s.Name = "Table of Contents" Then TOCFound = True Exit For End If Next s If Not TOCFound Then Sheets.Add Before:=Worksheets(1) ActiveSheet.Name = "Table of Contents" End If ' Set up the table of contents page TOCRow = 7 PageCount = 0 Sheets("Table of Contents").Select Range("A2").Value = "Table of Contents" Range("A6").CurrentRegion.Clear Range("A6").Value = "Subject" Range("A6").ColumnWidth = 36 Range("B6").Value = "Page(s)" Range("B6").ColumnWidth = 12 ' Do a print preview on all sheets so Excel calcs page breaks ' The user must manually close the PrintPreview window Worksheets.Select Msg = "Excel needs to do a print preview to calculate the number of pages. " Msg = Msg & "Please dismiss the print preview by clicking close." Msgbox Msg ActiveWindow.SelectedSheets.PrintPreview ' Loop through each sheet, collecting TOC information For Each s In Worksheets s.Select ' Use any one of the following 3 lines ThisName = ActiveSheet.Name 'ThisName = Range("A1").Value 'ThisName = ActiveSheet.PageSetup.LeftHeader HPages = ActiveSheet.HPageBreaks.Count + 1 VPages = ActiveSheet.VPageBreaks.Count + 1 ThisPages = HPages * VPages ' Enter info about this sheet on TOC Sheets("Table of Contents").Select Range("A" & TOCRow).Value = ThisName Range("B" & TOCRow).NumberFormat = "@" If ThisPages = 1 Then Range("B" & TOCRow).Value = PageCount + 1 & " " Else Range("B" & TOCRow).Value = PageCount + 1 & " - " & PageCount + ThisPages End If PageCount = PageCount + ThisPages TOCRow = TOCRow + 1 Next s End Sub
Zemāk ir ekvivalents makro, kas atjaunināts ar vairākām jaunām makro tehnikām.
Sub CreateTableOfContents() ' Copyright 2002.com ' Determine if there is already a Table of Contents ' Assume it is there, and if it is not, it will raise an error ' if the Err system variable is> 0, you know the sheet is not there Dim WST As Worksheet On Error Resume Next Set WST = Worksheets("Table of Contents") If Not Err = 0 Then ' The Table of contents doesn't exist. Add it Set WST = Worksheets.Add(Before:=Worksheets(1)) WST.Name = "TOC" End If On Error GoTo 0 ' Set up the table of contents page WST.(A2) = "Table of Contents" With WST.(A6) .CurrentRegion.Clear .Value = "Subject" End With WST.(B6) = "Page(s)" WST.Range("A1:B1").ColumnWidth = Array(36, 12) TOCRow = 7 PageCount = 0 ' Do a print preview on all sheets so Excel calcs page breaks ' The user must manually close the PrintPreview window Msg = "Excel needs to do a print preview to calculate the number of pages. " Msg = Msg & "Please dismiss the print preview by clicking close." MsgBox Msg ActiveWindow.SelectedSheets.PrintPreview ' Loop through each sheet, collecting TOC information ' Loop through each sheet, collecting TOC information For Each S In Worksheets If S.Visible = -1 Then S.Select ' Use any one of the following 3 lines ThisName = ActiveSheet.Name 'ThisName = Range("A1").Value 'ThisName = ActiveSheet.PageSetup.LeftHeader HPages = ActiveSheet.HPageBreaks.Count + 1 VPages = ActiveSheet.VPageBreaks.Count + 1 ThisPages = HPages * VPages ' Enter info about this sheet on TOC Sheets("TOC").Select Range("A" & TOCRow).Value = ThisName Range("B" & TOCRow).NumberFormat = "@" If ThisPages = 1 Then Range("B" & TOCRow).Value = PageCount + 1 & " " Else Range("B" & TOCRow).Value = PageCount + 1 & " - " & PageCount + ThisPages End If PageCount = PageCount + ThisPages TOCRow = TOCRow + 1 End If Next S End Sub
Īss jauno makro metožu kopsavilkums jaunākajā makro:
- Reti nepieciešams atlasīt lapu
- Tā vietā, lai aplūkotu katru darbgrāmatas lapu, meklējot lapu ar nosaukumu Satura rādītājs, 2. makro vienkārši pieņem, ka tā ir, un pārbauda mainīgā Err statusu. Ja Kļūda ir kas cits kā 0, mēs zinām, ka lapa nepastāv un tā ir jāpievieno.
- WST ir objekta mainīgais un tiek definēts kā darblapa Satura rādītājs. Tādējādi jebkura atsauce uz darblapām ("Satura rādītājs"). var aizstāt ar WST.
- Šūnu (rindu, kolonnu) konstrukcija ir efektīvāka nekā Range ("A" un TOCRow) kluge. Tā kā Cells () sagaida skaitliskus parametrus, diapazons ("A" un TOCRow) kļūst par šūnām (TOCRow, 1)
- Kvadrātiekavas tiek izmantotas kā saīsināts veids, kā atsaukties uz diapazonu ("A1").