- Samsung Galaxy A55 - új év, régi stratégia
- Yettel topik
- Honor 200 - kétszázért pont jó lenne
- Honor 200 Pro - mobilportré
- Youtube Android alkalmazás alternatívák reklámszűréssel / videók letöltése
- Huawei Watch GT 5 Pro - egészség + stílus
- Samsung Galaxy S21 és S21+ - húszra akartak lapot húzni
- iPhone topik
- Apple Watch
- Mi nincs, grafén akku van: itt a Xiaomi 11T és 11T Pro
-
Mobilarena
A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Új hozzászólás Aktív témák
-
Fferi50
Topikgazda
válasz
Richard #43135 üzenetére
Szia!
A Workbook BuiltinDocumentProperties tulajdonság Title és Author értékét megváltoztathatod makróval a közzététel előtt. Pl:ThisWorkbook.BuiltinDocumentProperties("Title")="Minta"
ThisWorkbook.BuiltinDocumentProperties("Author")="Senki"
Utána pedig visszaírod az eredetit.
Szerintem nézd meg még azIncludeDocProperties:=True helyett a False -ra
állítást, lehet, hogy ez is segít, ha csak elrejteni szeretnéd.Üdv.
-
Fferi50
Topikgazda
válasz
Richard #43130 üzenetére
Szia!
Jó, hogy megoldottad a problémát.
A nyomtatáshoz 2 lehetőség is van szerintem. Az egyik, hogy beállítod a nyomtatási kimenetet PDF formátumra.
Ezt makróból is meg lehet csinálni, csak meg kell nézni, hogy a kézi beállítás után mit mond az Application.ActivePrinter tulajdonság. Arra kell makróban beállíítani utána.
Ezután kijelölöd a nyomtatásra a munkalapokat.Sub nyomtat()
Dim lap As Worksheet, nyomtatni As Variant, nyomtato As String
nyomtato = Application.ActivePrinter
Application.ActivePrinter = "Microsoft Print to PDF a(z) Ne03: kimeneten"
For Each lap In Worksheets
If Left(lap.Name, 3) = "EE_" And lap.Visible = xlSheetVisible Then nyomtatni = nyomtatni & "," & lap.Name
Next
nyomtatni = Mid(nyomtatni, 2)
nyomtatni = Split(nyomtatni, ",")
ActiveWorkbook.Sheets(nyomtatni).PrintOut , printtofile:=True, prtofilename:="C:\users\user\xx.pdf", Copies:=1, Collate _
:=True, IgnorePrintAreas:=False
Application.ActivePrinter = nyomtato
End Sub
A másik lehetőség, amikor nem jelölöd ki a PDF nyomtatót, hanem mentés másként nyomtatod ki PDF formátumban a kijelölt munkalapokat:Sub nyomtatb()
Dim lap As Worksheet, nyomtatni As Variant, nyomtato As String
For Each lap In Worksheets
If Left(lap.Name, 3) = "EE_" And lap.Visible = xlSheetVisible Then nyomtatni = nyomtatni & "," & lap.Name
Next
nyomtatni = Mid(nyomtatni, 2)
nyomtatni = Split(nyomtatni, ",")
Sheets(nyomtatni).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Users\user\Documents\xx.pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End Sub
A két változat úgy látom, szinte egyenrangú, de a másodiknál védett PDF fájl keletkezik és nagyobb is a mérete.Üdv.
-
Fferi50
Topikgazda
válasz
Richard #43086 üzenetére
Szia!
"Van 20 elég nagy táblázatom egy excel fileban amiket felvittem az adatbázisba, és megcsináltam a kapcsolatokat közöttük."
Most akkor Exceled van vagy adatbázisod, esetleg mindkettő?
Ha adatbázisod (pl. Access) van, akkor abban érdemes megcsinálni a riportokat és a diagramokat is.
Excelben pedig érdemes lehet közös adatforrást használni - azaz egy alap kimutatást felhasználni másik kimutatásokhoz. Egyébként pedig a sok számolás - ami a kimutatásokhoz kell, plusz az adatbázishoz a kapcsolat létrehozása bizony időigényes.
Adott esetben a VBA sem lehet sokkal gyorsabb, természetesen VBA-ban is be lehet állítani a szűrőket és a slicereket is.
Talán jobban tudnánk segíteni, ha mutatnál egy példafájlt (természetesen nem éles adatokkal) és egy mintát benne, hogy mit szeretnél elérni.Üdv.
-
Fferi50
Topikgazda
válasz
Richard #43042 üzenetére
Szia!
Biztos, hogy valódi "-" van abban a cellában. Nem arról van szó, hogy olyan számformátumot állítottak be, ami a 0 helyett jeleníti meg a kötőjelet? Mert ebben az esetben a számformátumot kell átállítani.
VBA-ban a Range.Replace metódusával tudsz cserélni. (Előtte a Find metódussal be kell állítani, hogy csak a teljes cella értéket cserélje.)
Tovább kérdés még, hogy nincs-e más nem látható karakter (pl. szóköz, emelt szóköz) is a kötőjel mellett a cellában.Üdv.
-
Fferi50
Topikgazda
válasz
Richard #42223 üzenetére
Szia!
Ha van a szűrésnek eredménye, akkor csak a szűrt értékeket másolja a DataBodyRange.Copy.
A DataBodyRange az a fejléc és összesítősor nélküli tartományt jelenti. Ha nincs a szűrésnek eredménye, akkor ennek nincs látható része, tehát a SpecialCells(xlCelltypeVisible) hibával tér vissza és ezt a hibaüzenetet az Application.DisplayAlert paranccsal sem tudod elnyomni, csak a megelőző On Error Resume Next utasítással ellenőrizheted, hogy hiba keletkezett-e .
On Error Resume Next
ListObjects(1).DataBodyRange.SpecialCells(xlCellTypeVisible).Copy
If Err<>0 Then Msgbox "Nincs mit másolni"
On Error Goto 0
Viszont így a teljes tartomány egyben marad, ezért a sima DataBodyRange.Copy másolja az egészet. (Lehet, hogy ez bug, mert ilyenkor hibát kellene logikusan adni, ezt igazából Redmond tudhatja, miért nem így van.)
A szűrés eredményét a táblázat teljes tartományának vizsgálatával is tudod ellenőrizni.
pl. így, ekkor nem kell hibakezelés bele:ListObjects(1).Range.SpecialCells(xlCellTypeVisible).Rows.Count
Üdv. -
Fferi50
Topikgazda
válasz
Richard #42187 üzenetére
Szia!
A táblázatokban az a szép, hogy lehet velük szuperül dolgozni.
Pl.Range("Táblázat3[[#All],[Hozam]:[Hozam2]]").Copy
A Hozam és a Hozam2 közötti oszlopokat másolja egy lépésben.
A kettőspont jelenti azt, hogy ami közte van.
Érdemes megnézned a Táblázatok-hoz kapcsolódó Súgót. Ott vannak a műveleti lehetőségek.
(Nomeg néha a makrórögzítés is segít -- mint nekem most)
Ha a fejléceket nem szeretnéd másolni, akkor a #All helyett írd #Data.Üdv.
-
Fferi50
Topikgazda
válasz
Richard #42185 üzenetére
Szia!
Az oszlopoknál használhatod a neveket (ha ismered őket) az index szám helyett. Ha több oszlopot is szeretnél kijelölni, akkor az Union függvényt használhatod:With Worksheets("munka1").ListObjects("tabla1")
Union(.ListColumns(nev1).Range, .Listcolumns(nev2).Range, . Listcolumns(nev3).Range).Copy 'ahány oszlopot szeretnél kijelölni, annyit kell a függvényhez beírni.
End With
Üdv. -
Delila_1
veterán
válasz
Richard #42179 üzenetére
Sub Lap_Tabla()
Dim sor As Integer, CV, lap As Integer, oszlop As Integer
sor = 1
For lap = 1 To Worksheets.Count
With Sheets(1)
oszlop = 1
.Cells(sor, oszlop) = Sheets(lap).Name
For Each CV In Sheets(lap).ListObjects
oszlop = oszlop + 1
.Cells(sor, oszlop) = CV.Name
Next
End With
sor = sor + 1
Next
End Sub
-
Fferi50
Topikgazda
válasz
Richard #42179 üzenetére
Szia!
1. Az i és x változód ne Single legyen, hanem Integer vagy Long (ha sok munkalapod van).
2. A Range("A1").Cells(x,1) helyett használd nyugodtan a Cells(x,1) formát, ez a helyes.
3. A Cells(i,x+1) cella az i-edik sor x+1-edik oszlopban, tehát biztosan nem az x-edik sorban.
4. A For Each tbl ciklus pontosan a lehetséges több tábla miatt van.
5. Ha a táblák nevét az A oszlopba betett munkalapnév mellé a B,C stb oszlopban szeretnéd látni, akkor a Cells(x,i) cellába kell íratnod és i értéke 2-től induljon, továbbá minden táblás ciklus előtt 2-re kell állítanod az értékét, hogy ne írja felül az A oszlopban levő értéket.
Remélem, ez alapján már menni fog.
Üdv. -
Fferi50
Topikgazda
válasz
Richard #42100 üzenetére
Szia!
'"vannak olyan munkalapok ahol egyéb számításhoz szükséges változók és egyebek vannak szintén külön táblában."
Ha tudod, hogy melyek ezek a munkalapok, akkor a nevük alapján ki lehet hagyni a másolásból:Dim mlapnevek as String
mlapnevek="Munka1,Munka2,Munka5,Munka11"
For Each sh In Worksheets
If sh.ListObjects.Count > 0 Then
If Instr(mlapnevek,sh.name)=0 Then
For Each tbl
jöhet a folytatás
Next
End If
A vastag sorokat kell beírni pluszba. Az mlapnevek változóba azok a nevek kerüljenek, amely munkalapokról nem kell másolni.
Üdv. -
Fferi50
Topikgazda
válasz
Richard #42097 üzenetére
Szia!
Úgy tűnik, rosszul raktam össze a célba való másolást, az első másolás miatt pedig betettem egy vizsgálatot.If celtabla.Range(2, 1).Value = "" Then
celtabla.Range(2, 1).PasteSpecial xlPasteValues
Else
celtabla.ListColumns(1).DataBodyRange.Cells(1).End(xlDown).Offset(1, 0).Paste Paste:=xlPasteValues
End If
Azt írtad, hogy több táblából másolsz. Ha ez kevés számú, akkor lehet egymás után többször leírni a kódot más-más táblanevekkel. De már 3 után is megéri ciklusba szervezni. A kérdés az, hogy a táblák külön-külön munkalapon vannak-e (feltételezem), de ugyanazon munkafüzetben..
Ebben az esetben a ciklus:Sub a()
Dim sh As Worksheet, tbl As ListObject
For Each sh In Worksheets
If sh.ListObjects.Count > 0 Then
For Each tbl In sh.ListObjects
With tbl
Union(.ListColumns("Név").DataBodyRange, .ListColumns("Cím").DataBodyRange…..).Copy
End With
If celtabla.Range(2, 1).Value = "" Then
celtabla.Range(2, 1).PasteSpecial xlPasteValues
Else
celtabla.ListColumns(1).DataBodyRange.Cells(1).End(xlDown).Offset(1, 0).Paste Paste:=xlPasteValues
End If
Next
End If
Next
End Sub
Üdv.
Ps.
"a táblázat alá ugrik és amikor beilleszti a következő oszlopokat, akkor automatán kiterjeszti a táblát is."
Miért, nem kellene a táblázatot kiterjesztenie a beillesztett adatokra? -
Fferi50
Topikgazda
válasz
Richard #42095 üzenetére
Szia!
1. Amennyiben a cél táblába egymás mellé kerülnek az oszlopok, akkor az Union függvény használatával egyben átmásolható a kívánt oszlopszám:
Az értékek átmásolásához célszerű a céltáblát változóba tenni:Dim celtabla As Listobject, usor As Long
Set celtabla =Worksheets("Munka_cel").Listobjects("Tbl_cel")
With Worksheets("Munka_forras").Listobjects("Tbl_forras_1").
Union(.Listcolumns("Név").Databodyrange,.Listcolumns("Cím").Databodyrange…..).Copy
End With
2. A céltábla utolsó sor után a bemásolás:celtabla.Databodyrange.Listcolumns(1).Cells(1).End(xlDown).Offset(1,0).Paste Paste:=xlPasteValues
Az első másolásnál még maradhat a Range(2,1), de ne feledd ekkor egyben jön a 8 oszlop adata már.
Természetesen a sok tábla másolását csinálhatod ciklussal és akkor a forrás tábla neve helyett az indexét használhatod.
Ha kérdésed lenne, csak írj.Üdv.
-
Mutt
senior tag
válasz
Richard #41849 üzenetére
Szia,
Ezt már dashboardnak hívják, aminek a lényege hogy a háttérben - pl. egy rejtett munkalapon - történnek a számítások és onnan hivatkozásokkal kerül át a fő lapra a kívánt eredmény.
Chandoo oldalán régebben voltak hasznos ötletek/minták.
üdv
-
Fferi50
Topikgazda
válasz
Richard #41504 üzenetére
Szia!
Az a kérdés, hogy utána dátumként szeretnél vele számolni tovább, vagy sem.
Ha igen, akkor a cellaformátumot állítsd "éééé.hh" -ra az egyéni formátumban.
Ha nem, akkor a képlet:=ÉV(KALK.DÁTUM(MA();-1)) &"." & SZÖVEG(HÓNAP( KALK.DÁTUM(MA();-1));"0#")
Bár az sem kizárt, hogy a képlettel létrejött értéket is tudja dátumként kezelni.
Üdv. -
pigster
senior tag
válasz
Richard #34549 üzenetére
További információk:
Mezőkódok beszúrása és formázása a Word 2010 alkalmazásban:
https://support.office.com/hu-hu/article/Mez%c5%91k%c3%b3dok-besz%c3%bar%c3%a1sa-%c3%a9s-form%c3%a1z%c3%a1sa-a-Word-2010-alkalmaz%c3%a1sban-7e9ea3b4-83ec-4203-9e66-4efc027f2cf3?ui=hu-HU&rs=hu-HU&ad=HU
Sajnos az MS oldaláról ilyen ökör linket lehet csak kimásolni.
-
pigster
senior tag
válasz
Richard #34542 üzenetére
Körlevélben (Word) is lehet számformátumot megadni:
{ MERGEFIELD EZ_ITT_A_SZAMOD \# "#.##0,00" \* MERGEFORMAT }
Sajnos a 4 számjegynél rövidebbekre is - az elején - kiírja a "."-t (pont), szóval nem minden esetre jó.Pl.: 123.456 <- jó, de .123 <- nem jó! Wordben hozzáértőbbek talán tudnák erre is megoldást.
Új hozzászólás Aktív témák
Hirdetés
- Sea of Thieves Premium Edition és Egyéb Játékkulcsok.
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Kaspersky, McAfee, Norton, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Antivírus szoftverek, VPN
- Honor X6b 128GB Kártyafüggetlen 1Év Garanciával
- KATONAI ÜTÉSÁLLÓ!!! Getac S410 i5-6300u, G3: i5-8365u, G4: i5-1145G7
- Creative Sound BlasterX G5 (70SB170000000) (Sound Blaster) (DAC)
- Dell USB-C, Thunderbolt 3, TB3, TB4 dokkolók (K20A) WD19TB/ WD19TBS/ WD22TB4, (K16A) TB16/ TB18DC
- Lenovo ThinkPad X270 (16) - i5-7300U, 16GB, 512GB SSD, 12" FULL HD
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged