Kezdőlap › Fórumok › Excel programozás › Hivatkozás tömbkonstans elemeire VBA
- This topic has 5 hozzászólás, 2 résztvevő, and was last updated 8 years, 3 months telt el by 7even.
-
SzerzőBejegyzés
-
2016-09-04-09:47 #2950
Sziasztok!
Létrehoztam egy tömbkonstanst a munkafüzetemben (pl. dolgozok). Hogyan lehet erre hivatkozni makró subrutinban? Lehet egyáltalán? Egy ciklusba szeretném berakni, hogy végig lépkedjen a tömb elemein(pl. a dolgozók nevein), ami egy feliratszűrőt állítana be egy pivotmező adott oszlopában, majd PDF-be menti külön-külön ahány név van. A PDF működik, meg az egész ha külön bekérem a nevet inputboxba, de egyszerre nem megy sajnos.
Mert gondolom ez így nem működik:
Dim tomb as string
tomb= array (dolgozok)De ez sem:
Dim elem As PivotItem
For Each elem In ActiveSheet.PivotTables(„Kimutatás1”).PivotFields(„Név”).PivotItems
ActiveWorkbook.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, …stb
Next- A témakör módosításra került: 8 years, 4 months telt el-7even.
2016-09-05-15:10 #2954Röviden és érthetően, annyi lenne a kérdésem, hogy
1. Lehet-e hivatkozni a munkafüzetben létrehozott tömbökre VBA-ban? Ha igen hogyan?
2. Hogyan tudom meghatározni, hogy egy adott érték, egy egydimenziós tömbnek hányadik eleme?
pl: ennek a tömbnek hányadik eleme „Kovács Béla”?Dim nevek(1 To 4) As String
nevek(1) = „Kovács András”
nevek(2) = „Tóth Zsuzsanna”
nevek(3) = „Kovács Béla”
nevek(4) = „Kiss József”nev = inputbox („Kérem a nevet!”) ‘Jelen esetben Kovács Béla
msgbox „nev & „a tömbnek” & ? & „eleme.”Előre is nagyon szépen köszönöm!
2016-09-06-00:10 #2955Szia!
Én ezt találtam erre. Kipróbáltam, nekem működött
Előtte csináltam egy „nevek” nevű tömbkonstanst a névkezelőbe.={"Kovács András";"Tóth Zsuzsanna";"Kovács Béla";"Kiss József"}
A névkezelőből kolvasni egy töb elemeit az Evaluate függvénnyel lehet, ami a szögletes zárójel is egyben.
Sub get_array_from_named_range() Dim arr arr = [nevek] MsgBox (arr(1, 1)) MsgBox (arr(2, 1)) pos = WorksheetFunction.Match("Kovács András", arr, 0) MsgBox pos End Sub
Definiáltam egy dinamikus tömböt, majd beleolvastam a „nevek” tartományt
A tömb egy oszlopos lett, és az elemek egymás alatt, de sor,oszlop indexxel érhetők el úgy, hogy az oszlop index mindig 1-es
Tehát kiolvasom egy tömbváltozóba a névkonstans tömböt, majd abból kiolvasom az első sor első oszlop elemét, majd a második sor első elemét.A tömbben keresni lehet a megvalósított munkalapfügvényekkel is.
Ezt csinálom a második részben a match függvényel.erre gondoltál?
Imi
2016-09-06-06:53 #2958Igen, erre gondoltam. Mit össze keresetem mindenhol, de sehol nem bukkantam rá. Pedig az Evaluate függvénnyel már dolgoztam is. A Match pedig pofátlanul logikusnak tűnik, mert a legtöbb angol fórumon inkább csak a min és max elemet keresték, de úgy tűnik igazolódni látszik, hogy sok esetben a legegyszerűbb megoldás a legkézenfekvőbb
Ezer köszönet. Örülök, hogy van ez a fórum. Persze még mindig nem működik valamiért, de nagyon sokat segítettél! Így néz ki egyébként a kis rutinom, aminek nem tetszik sem a nevek.Count, a nevek(i)-nél pedig azt mondja, hogy a tartományon kívül esik:Sub ment()
Dim nevek
nevek = [dolgozok]
t = UserForm1.TextBox3.Value ‘ Melyik hónapra szeretnénk a kimutatást? Ha üres, összes hónapra, azaz éves.If t <> „” Then
For i = 1 To nevek.Count
i = nevek(i)
ActiveSheet.PivotTables(„Kimutatás1”).PivotFields(„Hónap”).PivotFilters.Add Type:=xlCaptionEquals, Value1:=t
ActiveSheet.PivotTables(„Kimutatás1”).PivotFields(„Név”).PivotFilters.Add Type:=xlCaptionEquals, Value1:=i
fname = Left(ActiveWorkbook.Name, 8)
ChDir („c:\temporary\Munkaidő”)
ActiveWorkbook.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=i & ” ” & t & ” ” & fname & ” ” & Date, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
ActiveSheet.PivotTables(„Kimutatás1”).PivotFields.ClearAllFilters
i = WorksheetFunction.Match(i, nevek, 0)
Next iElse
For i = 1 To nevek.Count
i = nevek(i)
ActiveSheet.PivotTables(„Kimutatás1”).PivotFields(„Név”).PivotFilters.Add Type:=xlCaptionEquals, Value1:=i
fname = Left(ActiveWorkbook.Name, 8)
ChDir („c:\Users\Andras\Documents”)
ActiveWorkbook.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=i & ” ” & „éves” & ” ” & fname & ” ” & Date, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=FalseActiveSheet.PivotTables(„Kimutatás1”).PivotFields(„Név”).ClearAllFilters
i = WorksheetFunction.Match(i, nevek, 0)
Next iEnd If
ActiveSheet.PivotTables(„Kimutatás1”).PivotFields.ClearAllFilters
End Sub
- A hozzászólás módosításra került: 8 years, 4 months telt el-7even.
2016-09-06-16:07 #2963Ha tömbökkel foglalkozol és keveset tudsz róluk akkor nézz át egy összefoglalót pl. itt
http://www.cpearson.com/excel/vbaarrays.htmA konkrét esetben a tömb számossága vagy elemszáma:
count=Ubound(nevek)
És ahogy a fenti válaszban írtam, az elvileg egy oszlopos dinamikus tömböt is két dimenziósként kezeli, aminek az oszlop része mindig 1-es.
Tehát a nevek(i) nem lesz jó, de jó lesz:nevek(i,1)
Imre
- A hozzászólás módosításra került: 8 years, 4 months telt el-horvimi.
2016-09-07-06:57 #2973Igen. Köszönöm szépen. Jelzem, most már mindkettő működik, tehát a For ciklus is, hála Neked, illetve a PivotItem-es megoldás is. Azaz most már mindkét módon tudok szűrni, akár tömb elemre hivatkozva akár pivot elemre hivatkozva is.
Elnézést a sok kínlódásért, de most már megtanultam és természetesen átolvasom az ajánlott forrásodat is.
Köszönöm! -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.