Az „Excel” fórum célja, hogy keretet adjon az Excel felhasználók széles táborának tapasztalataik megosztására, és lehetőséget a segítséget kérőknek. Az alábbi összefoglaló azért készült, hogy segítse a helyes kérdésfeltevést.
– Írd le szabatosan a problémát. Úgy fogalmazz, hogy ne csak te magad, de a szakértő is megértse, mire szeretnél választ kapni.
– Írd le, hogy milyen verziójú Excellel dolgozol. (Vagy ha nem – ill. nem csak – Excel, akkor micsoda?)
– Írd le, hogy milyen úton indultál el, és hol akadtál el rajta.
– A kérdés megértése szempontjából sokat segíthet, ha feltölteszt egy képet, amin látszik, hogy mit szeretnél, vagy illusztrálja azt.
– Még jobb, ha feltöltesz egy minta munkafüzetet valahová (pl. data.hu). Feltöltés előtt távolítsd el belőle a nem publikus adatokat.
– Ha a feladat jellege olyan, célszerű az "előtte" és "utána" állapotokat bemutatni. (Miből kellene csinálni mit?)
– Ha VBA kódon kell javítani, másold be a releváns kódrészt. Rövid kód mehet hozzászólásba, hosszú kód inkább ide: http://pastebin.com/
– Ha valami nem úgy működik, ahogy kellene, add meg a rendellenes viselkedés jellemzőit, a hibaüzenetet, és a hibát okozó programsort.
Az utolsó válasz volt a legszimpatikusabb, és szerintem a legegyszerűbb is, mert az én kódom is úgy nézett ki, csak nem volt benne az Application.ExecuteExcel4Macro("GET.DOCUMENT(50)") parancs, ami tökéletesen összeszámolja 2003-ban is az összes oldalt! :)
A többit nem próbáltam, mert ez már megfelelő eredmény hozott.
A kód, hátha szüksége van rá valakinek: :)
Sub Minden_második_oldal_nyomtatás() dim i, TotalPages as integer
TotalPages = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)") 1: k = CVar(InputBox("Add meg a első oldal számát!", "Első oldalszám megadása")) If k <> "" Then On Error GoTo Hiba k = k / 1 On Error GoTo 0 For i = k To TotalPages Step 2 'ActiveWindow.SelectedSheets.PrintOut From:=i, To:=i, Copies:=1, _ ' ActivePrinter:="PDFCreator a(z) Ne00: kimeneten", Collate:=True ActiveSheet.PrintOut From:=i, To:=i, Copies:=1, Collate:=True Next i End If Exit Sub Hiba: If Err.Number = 13 Then MsgBox ("Csak számot adhatsz meg!") Resume 1 End If End Sub
Van olyan nyomtatóbeállítás, hogy manuális-duplex-et nyomtasson, ez azt jelenti, hogy először (azt hiszem) a páros, utána a páratlan lapokat nyomtatja ki (asszem az utolsó lapot először és így visszafele).
Ha ezt akarod elérni, akkor lehet egyszerűbb ezt a property-t beállítani.
Ismét egy kérdéssel fordulok nagy publikum elé! :)
Meg szeretném tudni annak a változónak a nevét, amely megmondja, hogy egy munkalapon az éppen aktuális nyomtató-, illetve oldalbeállítással hány oldalas a munkafüzeztem.
Ha ezt tudom, akkor egy for ciklussal ki tudom nyomtatni a páros illetve a páratlan oldalakat az excel 2003-ban.
Szerintem a Munkafüzet2 fájl Open és Close eseményébe kellene betenni egy olyan kódot, ami a Munkafüzet1 megfelelő celláiba beírja az aktuális pontos időt.
A következő probléma megoldásában kérem a segítségeteket:
Adott két munkafüzet (Munkafüzet1.xlsm; Munkafüzet2.xlsm) . A feladat az lenne, hogy a Munkafüzet1-ből kell megnyitni a Munkafüzet2-t, és mérni kellene valahogy azt, amikor a megnyitás megtörtént, illetve amikor bezárták a Munkafüzet2 fájlt (a két időpont lenne a lényeg). A mérés eredményét pedig be kellene írni a Munkafüzet1-be.
A megoldásra az alábbiakat próbálgatom, de valamiért nem működik.
A Munkafüzet2 megnyitása és a mérés indítása a Munkafüzet1.xlsm – Munka1 munkalapján történt dupla kattintással történik:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
A Munkafüzet2.xlsm bezárása a Munkafüzet2.xlsm - Munka2 munkalapjára kattintással történik:
Private Sub Worksheet_Activate()
ActiveWorkbook.Close
End Sub
A mérés leállítása a Munkafüzet2.xlsm bezárása után a Munkafüzet1.xlsm újbóli aktiválásakor történik:
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
’mérés leállítása
MsgBox "Munkafüzet1 - Workbook_WindowActivate"
End Sub
A problémám az, hogy ha a Munkafüzet2.xlsm fájlt nem „hagyományosan” a Bezárás menüponttal vagy az ablak bezáró „X”-re kattintással zárom be, hanem a fenti Munka2 munkalapra kattintással, (ActiveWorkbook.Close paranccsal) akkor nem aktiválódik a Munkafüzet1.xlsm „WindowActivate” eseménykezelője.
Az is nagy segítség lenne ha valaki tudna infot mondani erőlködjek-e ezzel tovább vagy felesleges. Amit szeretnék összehozni, egy munkalapról egy sorból alma banán körte cellákból egy másik munkalapra almabanánkörtét csinálni egy cellába. Sima legördülő menü van, de 3 fele tagolva tudtam csak létrehozni, mivel csak egy sort vagy oszlopot enged az excel.
Végül csak egy "on error"-al megoldottam, hogy ha nem találja a file-t, akkor "msgbox", hogy "nincs nyitva, próbáld újra".
Elég sok makróm működik így, mert régebben nem ismertem még a megnyitási metódust, és azóta nem írtam át őket. Így legalább érzi a felhasználó, hogy rá is szükség van. :)
Addig jutottam el a prohektben, hogy az első fülön található 3 oszlopból és 15 sorból álló táblázatnak adtam egy nevet pl X. Majd az adatok érvényesítése paranccsal az utolsó fülön próbáltam csinálni egy legördülő menüt, de az excel csak egy oszlopra vagy sorra tud hivatkozni a táblázat neve alapján.... pfffff. Kifogytam az ötletekből.
UDF-ben egy csomó minden nem működik, és én erről mindig megfeledkezem... :(
Azt javaslom, legyen az UDF-ed bemenő paramétere a másik munkafüzetnek az a bizonyos része, és akkor - lévén külső csatolás - az Excel megpróbálja majd frissíteni a hivatkozásokat, és kiabál, ha nem sikerül. Jobb ötletem nincs. Esetleg az, hogy a Workbook_Open során biztosítsd be, hogy a másik fálj is meg legyen nyitva.
Annyi a különbség, hogy a makró rögzítő nem tárolja melyik az aktív nyomtató, és szerintem nem tudod pontosan beírni.
Ezért én kiírattam az Immediate windowra az az aktuális, aztán váltottam és azt is kiírattam. Innen be tudtam illyeszteni a szöveget az idézőjelek közé!
Ismét egy probléma megoldásában szeretném kérni a segítségeteket, javaslatotokat. Van egy táblázatom, amiben van 6 fül. Az első 5 fülön olyan adatok vannak, amelyek pl egy gombnyomásra be kellene hogy kerüljenek a 6. fül megfelelő helyére. Próbálom érthetőbben elmagyarázni. Az első 5 fülön raklapok és ezek gyári számai vannak, kategorizálva. A megrendelő azt kéri, ezekből állítsunk össze egy táblázatot. ( mi került kiszállításra ) Van amikor csak 3 raklap kellene egy fülről, van amikor 3 fülről kellene 5-5 raklap. A copy-paste nem igazán járható út :( Az első 5 fül cellái állandóak, ezeket előzetesen töltik ki és ebből kellene csinálnom egy hatodikat. A hatodik fül cellái szintén állandóak, de nem mindig ugyanaz az adat kerülne bele. A gyári számok, stb ugyanolyan hosszúak.