Захваљујући Матту који је послао овонедељно Екцел питање:
Имам велику и све већу Екцел радну свеску (пуно листова). Бројеве страница сам убацио у подножје током штампања, али је све теже и теже се кретати када смо на састанку. Да ли постоји начин за штампање садржаја на основу имена Екцел-овог радног листа, тако да ја и особље можемо брзо да отворимо страницу #кк?
Ово је сјајна идеја. Први једноставан предлог је да укључите име листа у подножја вашег исписа. Када кликнете на „Прилагођено подножје“ у дијалогу Подешавање странице / Подножје заглавља, има 7 икона. Крајња десна икона изгледа као индексна картица са три картице. Кликом на одељак Десно: и притиском на ту икону доћи ће до исписа имена листа на сваком листу. Само ово може помоћи у кретању кроз извештај.
МрЕкцелу се свиђа идеја да имате макро за креирање садржаја. Главни проблем је што Екцел не израчуна колико је одштампаних страница на радном листу док не направите преглед штампе. Дакле, макро даје кориснику до знања да ће ускоро видети преглед штампе и тражи од њега да га одбаци кликом на дугме за затварање.
Макро петља кроз сваки лист у радној свесци. У тренутном стању прикупља информације из имена сваког радног листа. Такође сам уврстио две друге линије које су коментарисане. Ако бисте радије добили опис из левог заглавља или из наслова у ћелији А1, постоје и узорци редова који ће обавити било који од њих. Само коментирајте ону коју желите да користите.
Макро рачуна колико страница додаје додавањем једне броју водоравних прелома страница (ХПагеБреакс.цоунт). Додаје један броју вертикалних прелома страница (ВПагеБреакс.Цоунт). Множи ова два броја заједно да би израчунао број страница на том радном листу. Ако било који верни читалац има бољи начин да то учини, јавите ми. Тренутни метод пребројавања прелома страница је ђаволски спор. Чини ми се да нисам могао да пронађем својство које ми говори колико има одштампаних страница, али помислили бисте да би Екцел укључио једну.
Последњи трик је био улазак у опсег страница. Да је лист на страницама „3 - 4“, Екцел би ово третирао као датум и ушао 4. марта. Постављањем формата ћелије на текст са знаком "@", странице правилно улазе.
Ево макронаредбе:
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
Испод је еквивалентни макро, ажуриран са неколико нових макро техника.
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
Кратак резиме нових макро техника у новијим макроима:
- Ретко је потребно одабрати лист
- Уместо да прелистава сваки лист у радној свесци тражећи лист под називом Садржај, други макро једноставно претпоставља да је тамо и проверава статус променљиве Ерр. Ако је Ерр нешто друго осим 0, знамо да лист не постоји и да га треба додати.
- ВСТ је променљива објекта и дефинисана је као радни лист Садржаја. Дакле, свако упућивање на радне листове („Садржај“). може се заменити са ВСТ.
- Конструкција Ћелије (ред, колона) је ефикаснија од клаже Ранге ("А" & ТОЦРов). Будући да Целлс () очекује нумеричке параметре, Ранге ("А" & ТОЦРов) постају ћелије (ТОЦРов, 1)
- Углате заграде користе се као скраћени начин упућивања на опсег ("А1").