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 Paste nem csak Selection-nel megy, hanem Range-el is. Az pedig nagyon konkrétan és precízen meghatározható. Az alábbi példakód az kódot tartalmazó dokumentum (ThisDocument) 4-6. karakterét másolja át a D:\dok1.doc végére.
Dim r As Range, EndPosition As Long, D As Document
Set D = Documents.Open("D:\dok1.doc") Set r = ThisDocument.Range(3, 6) r.Copy EndPosition = D.Characters.Count - 1 D.Range(EndPosition, EndPosition).Paste
De nem erőltetem tovább. Lehet, hogy valóban egyszerűbb a tálcáról eltüntetni a kísértést.
A Application.ShowWindowsInTaskbar = False, majd a munka végén kiadott Application.ShowWindowsInTaskbar = True segített. A tiltás az összes pillanatnyilag látható Word taskot elrejti, az engedély visszahozza. Munka közben a körlevélen végrehajtott módosítások látszanak, de ez nagyon nem baj. Az engedély kiadásának pillanatában viszont a körlevet már elmentettem, bezártam.
Igen, ez tetszene. Tulajdonképpen az kellene, hogy minden a feladat szempontjából érdektelen dokumentumot elrejtsek a tálcáról, aztán, ha befejeztem, amit akartam, visszaállíthassam. Tudja valaki, hogyan tehetném ezt meg?
Igen, ez lenne az igazán jó, de (bár nagyon nem akartam az ittenieket Word specifikus elemekkel fárasztani):
1. A Selection ojektum és így metódusai (pl. Selection.Paste) is globálisak, azaz nem tudom megmondani, hová szúrjon be (legalábbis nem ismerem a módját, hogy mindenképpen - mondjuk - a Document(ezKell) dokumentummal tegye).
2. Nem én nyitom az új dokumentumot, hanem a Word, amikor körlevél készítését kérem tőle. Hiába sikerült kinyernem, melyik ez a dokumentum, ha minden utasítás elé teszek egy Document(ezKell). Activate sort, akkor is tudok olyan állapotot generálni, amikor a Selection.Paste nem oda szúr be, ahova én akarok.
El kellene felejteni az olyan hivatkozásokat, mint az activeDocument, ActiveSheet, meg hasonlók. Tessék rendesen definiálni Document típusú változókat, hozzárendelni a megfelelő dokumentumokat, és azokra hivatkozni a kódban. Akkor aztán kattintgathat a user akárhová, nem fogja megzavarni a futást.
Pl. Dim d As Document Set d = Documents.Open("Dok1.doc") d.SaveAs "Dok2.doc"
Bizonyos esetekben az ActiveDocument helyett a ThisDocument használható. Ez arra a doc-ra hivatkozik, amelyikben a makró van.
Igaz, hogy menet közben nem frissült a képernyő, de az activeDocument megváltozott. Így a makró lefutása után "örvendezhettem" a nem várt eredménynek. :-)
A futás idejére le kell állítani a képernyőfrissítést. Ez az Excelnél a makró elején az Application.ScreenUpdating = False sorral tehető meg, amit makró végén True-val kell visszaállítani.
A probléma Wordben merült fel, de gondolom, Excellel is előfordulhat.
Van-e mód arra, hogy ha egy hosszabb makró futása alatt a júzer összevissza kattintgat a tálcán, az activeDocument/activeSheet/activeAkármi ne változzék?
Csak akkor küldd át, ha a most bevált sebészeti eljárás sem vezet eredményre. Úgy vélem, ez alapvetően belgyógyászati kérdés. Az ilyenek gyógyításához én kevés vagyok.
Ha tudnád reprodukálni, akkor beküldhetnéd a Microsoftnak, hogy mondjanak rá valamit. De szerintem ez is kb. annyira kiszámítható, hogy a Mars és a Jupiter együttállásakor, amikor a Nap a Szűz jegyében kel, ha hétszer körbejárod a számítógéped az óramutató járásával ellenkező irányban, miközben a paksi erőműben éppen műszakváltás van, akkor jelenik meg a probléma. Egyszóval lehet, hogy sosem találkozol vele többé.
Köszönöm szépen! Úgy tűnik, az export/import jót tett, mert azóta nem jön elő a hibajelenség, sőt előcsalogatni sem bírom sehogy... Na, ez a paranormális... Ha megint felbukkan, jelentkezem és átküldöm a munkafüzetet (sajnos, nem tudom feltenni sehova)
Tippelek. Próbáld meg exportálni a Userformot fájlba (Project Explorerben jobb klikk ->Export), aztán törölni az eredetit, és vissza importálni a mentésből.
Adott egy Userform, amit ha megjelenítek (Userform1.Show) azonnal megjelenik a ToolBox is. Van rajta 6 Label és egy CommandButton1, tehát semmi különös. Ilyennel még nem találkoztam, mindjárt megőrülök, mert nem tudom behatárolni, hogy miért csinálja ezt! Már levettem a formról mindent és akkor is megjeleníti a ToolBox-ot. Tudna valaki segíteni?
Kijelölöd a sorokat. Szerekesztés/Ugrás (vagy ehelyett Ctrl+g), Irányított, Üres cellák. Ezzel minden sorban kijelölted az üres cellákat. Ctrl és mínusz gombot nyomsz, megjelenik a Törlés gyorsmenü, amin a Cellák eltolása balra opciót választod.
köszi! ennyire azért nem vagyok béna... a probléma abban áll, hogy mondjuk a K oszlopban csak 5 sorban van szöveg, az L-ben szintén, az M-ben kettőben és így tovább, és van vagy 2000 sor, így egyesével eléggé sokáig tartana... hogyan lehet kiszedni egy oszlopból vagy sorból a köztes üres cellákat, ha azok nem tesznek ki egész oszlopot vagy sort?
sziasztok! barátnőm még annyira sem jártas excel-ben, mint én, így sikerült neki a B oszlop után a K-ba, vagy épp az M-be adatokat írni, merthogy "odáig tartott" a B oszlop szövege. :-) engem viszont rettenetesen zavar, hogy nem tudom oszloponként kezelni az adatokat, mert hol itt, hol ott vannak közben üres cellák vagy egész üres oszlopok. hogyan tudnám a legegyszerűbben kivenni a köztes üres cellákat az egyes sorokból? (makrókat még nem nagyon használtam, ha az lenne a megoldás, úgyhogy ebben az esetben nagyon részletes leírást kérnék :-)) köszi
Szerintem, fussunk neki még egyszer ;-) Biztosan van egyszerűbb, frappánsabb megoldás, de tőlem most ennyi telik. A módosított kód már azt is kezeli, ha beírod a megfelelő időértéket (pl. 12:34).
---------------------------------
Private Sub Hibaüzenet(Hibahelye As Range, Hibaszám As Byte)
If Len(Target) = 5 And _ Mid(Target, 1, 2) >= "00" And Mid(Target, 1, 2) <= "23" And _ Mid(Target, 4, 2) >= "00" And Mid(Target, 4, 2) <= "59" Then
If Mid(Target, 3, 1) <> ":" Then Hibaüzenet Target, 1 Else: HibajelzésKI Target End If
Else Select Case Target Case "egy" MsgBox "itt lehet lekezelni az 'egy' szóhoz tartozó feladatot" Case "kettő" MsgBox "itt lehet lekezelni a 'kettő' szóhoz tartozó feladatot" Case "három" MsgBox "itt lehet lekezelni a 'három' szóhoz tartozó feladatot" Case Else Hibaüzenet Target, 1 End Select End If
A mostani kódod azt hiszem már tényleg tökéletes:-)
De ebben a kódban is és az előzőben is, ha DEL-t nyomok, akkor hibaüzenetet ad. 1. Ezt nem szeretném:-) 2. Ennek a kódnak a végére próbáltam az előző többirányú elágazást (case)belekombinálni, mivel (közben rájöttem, hogy valóban) szüksége lenne a meghatározott szöveg szűrésére. Nem ment :-(