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.
A hibákról nem tudok sajnos mit mutatni, mert a titkárnővel az ő gépén szórakoztunk. Talán majd lesz rá alkalom még megnézni, de a napokban most biztos nem.
Sziasztok. Azt meg tudom valósítani excelben,hogy 2 cella tartalmát 1 cellában összevonjam?
Arra gondolok,pl az A1es cellában ez áll: Tóth , a B1es cellában pedig az hogy: László összetudom vonni valamilyen módon ,hogy a c1es cellában pedig Tóth Lászlót írjon,szóközzel a 2 cella tartalma között?
Amihez ezt használnám,az nem nevekből áll,és nem is feltétlen egymás mellett lesznek azok a cellák amik tartalmát összeszeretném vonni.
Ott valami más lehetett a hiba. A körlevélkezelőben a Word minden szöveget békénhagy, ami nem mezőkód. Meg tudnád mutatni a hibaüzenetet? Esetleg a körlevél hibát okozó részletét? Persze fiktív adatokkal.
Semmi mergefield, símán beírod a pontot a mezőkód után a szövegbe. Nálam ez így szokott kinézni mezőkódokkal: «Vezetéknév»«Utónév»«Évfolyam».«Osztály» osztályos tanuló, ami a kész levélben íg jelenik meg: Gipsz Jakab11.D osztályos tanuló
Körlevélhez az adatforrás excel táblájában található egy sorszám oszlop. A mezőit úgy formáztam egyedileg, hogy legyen a számjegyek után pont a magyar nyelv szabályának megfelelően.
Namost a Wordnek körlevél készítésénél, a neten olvasom, hogy csak natív formátumú adatokat ad át az Excel, ami elhagy minden cellaformázást.
Hogyan lehetne a körlevél dokumentumokba belevarázsolni mégis a pontot a számjegyek után? Nézegettem ezeket a mergefield mezőkódokat, de nem sok sikerrel. (Egyedül a dátum formátumra működött, mert oda konkrét példát is találtam…)
AZ Application.Calculation hívást korábban nem használtam, ezért nem tudtam, mi az optimális parancs. Az xlCalculationAutomatic valahogy mégiscsak működött, mert megoldotta a problémát, de azért át fogom írni az általad javasolt Application.Calculate parancsra. Az eddigiekből következik, hogy az xlCalculationManual paranccsal sem találkoztam még a korábbiakban. Nem volt szükségem képletek aktualizálására. A program, amin most dolgozom az első, ahol előbb hozom létre a képleteket, mielőtt a forrás munkalap megfelelő cellái feltöltődnek a képletek által használandó adatokkal. (És a sorrend nem is változtatható. Én elkészítem a "vázat", aztán két módon kerülnek adatok a forrás munkalapra. Először én olvastatom be programmal egy később megkapott külső fájlból az addigra rendelkezésre álló adatokat, majd mások, más helyen utólag írják be a további adatokat)
A beolvasás módja: Az általam használt beolvasó program megnyitja a beolvasandó adatokat tartalmazó külső munkafüzetet, és az ezen lévő egyetlen munkalap sorain végigmenve először beolvas egy azonosítókódot, amit megkeres az én rendszeremben forrásnak nevezett munkalapon (ezt szükségszerűen megtalálja, mert azonosak a szereplők, és a kód köti össze őket), majd a megfelelő oszlopok adatait egyenként bemásolja a helyükre. Ha jól sejtem, ezt nevezed direkt elérésnek.
Miután a program végez az adatok átmásolásával, akkor indítom el a sorrendbe rakást a képletekkel előkészített saját munkafüzetem munkalapjain. Kivéve természetesen a forrásnak nevezett munkalapomat. És itt jelentkezett a probléma, amiért először segítséget kértem. Ekkor derült ki, hogy bár az adatok a forrás munkalapon a helyükön voltak, a képletek még nem aktualizálódtak, ezért az elsőként rendezendő munkalapon nem történt meg a rendezés. Nem volt mit rendezni, mert az összes képlet adata még 0 volt.
Ekkor alkalmaztam a sorrendező ciklus elé beírva az Application.Calculation = xlCalculationAutomatic parancsot, ami azonnal érvényesítette a képleteket. Ennek ellenére át fogok térni javaslatodra az Application.Calculate parancs alkalmazására - Amit még egyszer köszönök -, lévén semmilyen tapasztalatom nincs ezzel a témakörrel kapcsolatban.
Jó hogy megtaláltad a hiba okát. Azonban egy apróságot megjegyeznék:
az Application.Calculation = xlCalculationAutomatic azt határozza meg, hogy a számítások milyen módon hajtódjanak végre. A parancs kiadása önmagában nem jelenti feltétlenül a számítások azonnali végrehajtását, az a legközelebbi képletváltozáskor lép életbe.
Azonnali újraszámolást az Application.Calculate utasítás eredményez.
Egyébként kérdés még az, hogy bárhol a programban használtad-e a Application.Calculation = xlCalculationManual utasítást, mert akkor csak kérésre számolódnak újra a képletek. (a futási idő csökkentésére szokásos a használata)
"Először beolvasok adatokat egy külső munkafüzetből"
A kérdés az, hogy milyen módon olvasod be? Lekérdezéssel vagy direkt eléréssel? Gondolom lekérdezéssel, akkor pedig figyelni kell arra, hogy a lekérdezés (querytable) BackgroundQuery tulajdonsága False legyen. Ebben az esetben a makró nem megy tovább mindaddig, amíg a lekérdezés folyamatban van. Ha ez a tulajdonság True, akkor anélkül fut tovább a makró, hogy a lekérdezés friss adatai "megérkeznének". Makrórögzítő nem feltétlenül foglalkozik a beállításával.
Azt így utólag nem tudom, mi frissítette a képleteket az első munkalap rendezése után. talán a 37897-es hozzászólásomban leírt sort parancs végrehajtása. Mindenesetre onnan kezdve már rendben volt a további munkalapok rendezése.
Köszönöm, de időközben megtaláltam a hiba okát. Nem írtam meg, és magam sem gondoltam, hogy egy másik modulban lévő programmal függ össze a hiba. Uganis az érintett munkafüzetben két egymásra épülő feladatot végzek el. Először beolvasok adatokat egy külső munkafüzetből, és azokat bemásolom egy "forrás" munkalapra. Ez nem vesz részt a rendezésben csak a használt 7 munkalapban lévő képletek innen veszik át az adataik egy részét.
Gynús lett, hogy időnként jó volt a működés, most már tudom, hogy akkor, amikor az adatbeolvasás után mentettem a munkafüzetet, majd később futtattam a rendező programot.
Általában nem így tettem, hanem közvetlenül egymás után indítottam őket. És emiatt a sorban első munkalap feldolgozásakor a képletek még nem érvényesültek.
Most a rendező program elejére beszúrtam egy a képlet frissítő parancsot, ami megoldotta a problémát: Application.Calculation = xlCalculationAutomatic.
Msgbox kiíratásnak az értelme az, hogy amíg leokézod, addig áll a program, telik az idő.
Értem én, hogy másodszorra már megcsinálja azt is, amelyiket előszörre nem... persze, hogy zavar (engem is így látatlanban), mert nem ez a normális működés.
Még egy (utolsó) gondolat(ötlet?): ha nem ciklusban csinálod, hanem csak egy munkalapot, azt megcsinálja vagy nem?
És lépésenkénti futtatásnál?
Végülis még felteheted kérdésként a MS tudástárba is a jelenséget. Valami oka biztosan van....
- msgbox-szal kiíratni, hogy épp melyik lapot akarná rendezni: Ez felesleges. Pontosan tudom. Ld. eltelt időkben az előtte lévő szám a munkalap nevének a része.
- Stop: Próbáltam, maradt a hiba
- Aktiválás: Próbáltam, maradt a hiba
- megnézni,hogy nincs-e valami szemét még a usedrange-ben: Ezt nem tudtam értelmezni. Mi lenne a szemét? Különösen annak fényében, hogy például a Fordított sorrendnél ugyanez a hiba nem az első, hanem a 7. munkalapon jelentkezik.
Azért köszönöm.
Egyelőre marad az első munkalapnál a rendezés ismételt elindítása.