Office Guru

Data validation lista automatikus feltöltése munkalapunk chartjaival

2017. március 13. - Office Guru

A néhány hete közzétett automatikus Excel-PowerPoint kapcsolatos poszthoz kapcsolódóan érkezett az egyik kedves Olvasótól egy kérdés, amellyel arra keresi a választ, hogy van-e mód arra, hogy Excelből ne az összes chartot vagy egy specifikusan megnevezett chartot másoljunk át egy PowerPoint diára, hanem a felhasználó kezébe adjuk a választási lehetőséget. Ez is egyértelműen megvalósítható feladat, a következő posztban be is mutatok egy lehetséges irányt.

Szóval adott a következő Excel néhány előre beszúrt példadiagrammal:

listofcharts.jpgSzúrjunk be a Data ribbonfül Data Tools szekciójából egy Data Validationt:

listofcharts1.jpgData Validation Listre lesz szükségünk, amelynek forrása legyen egy üres, később elrejtésre kerülő sheet egy jelenleg még üres tartománya:

listofcharts2.jpgEzután pedig már csak össze kell dobnunk a minimális designt, tehát lesz egy kis magyarázat, a data validation lista plusz egy gomb, amelyhez a PowerPointba másoló kis makrónkat tudjuk majd hozzárendelni.

listofcharts3.jpgNa de itt álljunk is meg, mert mostani posztunk legfontosabb tennivalója következik, azaz megírni azt a kis VBA-kódot, ami majd automatikusan frissíti a Data Validation listánk forrástartományát, így lehetővé téve, hogy a felhasználó az adott Excel-fájlunk aktuális chartjai közül választhasson.

Alt+F11 lenyomásával menjünk át a VBA-editorba, majd essünk is neki a kis kódunk megírásának, méghozzá a változók deklarálásával:

Sub Chartlist()
Dim chartobjs As Long
Dim listobj As String

A chartobjs kreatív nevet viselő változó fogja tárolni Excel fájlunk összes chartját az adott sheeten, a listobj változó pedig az összeszedett chartokat fogja a ciklus során végig tárolni és innen populálódnak majd a tartományunk cellái.

Most jöjjön a ciklusunk, amellyel szépen kitöltjük a Sheet2 megfelelő celláit, azaz a Data Validation lista forrástartományát:

With ActiveWorkbook.Sheets(1)
For chartobjs = 1 To .ChartObjects.Count

Az aktív munkafüzetünk első sheetjén szereplő összes charton fog végigmenni a ciklus az elsőtől az utolsóig, és minden egyes chart esetében a következőt fogja végrehajtani:

listobj = .ChartObjects(chartobjs).Name
Sheet2.Cells(chartobjs, 1) = listobj

Tehát a listobj változót teszi egyenlővé az adott cikluskörnek megfelelő számú chart nevével, majd a nevet beírja a chart sorszámának megfelelő számú cellába az első oszlopban a kettes sheeten.

Aztán megyünk a következő chartra a ciklusban és így tovább:

Next chartobjs
End With
End Sub

Ha megvagyunk a kóddal, akkor a lefuttatás után ezt fogjuk látni a második sheeten:

listofcharts4.jpgÉs ha ezt látjuk a második sheeten, akkor az is egyértelmű, hogy mit látunk az első sheeten:

listofcharts5.jpgInnentől kezdve pedig már csak arra van szükségünk, hogy beolvassuk a kiválasztott chartunk nevét, majd erre a chartra lefuttassuk a másoló makrót és máris a felhasználóra bíztuk az input meghatározását. Fontos megemlíteni a poszt végén, hogy ez egy nagyon alap kód, tehát bőven lehet finomítani még azzal, hogy mondjuk az összes sheeten vizsgálja a chartokat (még egy For ciklus), plusz minden indításnál fusson le a makró, hogy a legördülő menü friss legyen mindig és így tovább. 

A bejegyzés trackback címe:

https://officeguru.blog.hu/api/trackback/id/tr1112336099

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása