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.
Ugyan abba a két filenévbe exportálja a program az adatokat. Csak addig kell, hogy a leadott rendelésekhez van-e elég alapanyagunk. Aztán következő nap/lekéréskor ha exportálom akkor az arra vonatkozóan nézi meg, hogy van-e elég alapanyag vagy miből kell rendelni.
Nem írtam ki a függvény paramétereit, csak azt, hogy az egyik összegzi az első-, a másik a második tartomány adataiból a kritériumnak megfelelő érétkeket.
Kellene megint egy kis segítség. Van két txt file amiből betöltöm az egyik munkafüzetre az egyedi ID-d a terméknevet és a darabszámot. Ez A176:D184 és a másik txt-t a H175:K179-re. (De ez bármikor változhat mert a rendeléstől függ.)
Az egy-egy txt-ben ugyan azon termék többször is szerepelhet.
Közben megoldottam a Compatibility mode-dal kapcsolatos problémát úgy, hogy időlegesen lekapcsoltam a compatibility mode-ot, megnyitottam a workbook-ot és visszaállítottam a compatibility mode-ot.
'Enforcing xlsx file format
xlUserFileFormat = Application.DefaultSaveFormat
If xlUserFileFormat <> 51 Then Application.DefaultSaveFormat = 51
Minden lapra vonatkozó eseménykezelést a ThisWorkbook laphoz kell rendelned. Ha a General-t Workbook-ra cseréled, alapállásban a Workbook_Open eseményt állítja be a VB. Ezt cseréld le a jobb oldali legördülőben a SheetSelectionChange eseményre.
Ehhez egy példa:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Target.Interior.ColorIndex = 10
End Sub
Az egyes lapokon megváltoztatja a háttér színét, mikor kijelölsz egy-egy tartományt.
Most válts át SheetChange eseményre. Példa:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
Range("A1") = Target.Column + 9
Application.EnableEvents = True
End Sub
Látod, itt a makró első sorában letiltottam az események engedélyezését, a végén pedig visszaállítottam. Módosítasz egy cellát, mire a makró nekilódul, beírja az A1-be a módosítás oszlopának 9-cel növelt számát. Ha az elején nincs a letiltás, ezt az újabb beírást is eseményként kezeli, újra beír az A1-be, és kapsz egy végtelen ciklust.
Az End Sub előtt vissza kell állítani az eseménykezelést, másként az Excel újraindítása előtt nem fognak működni a makróid.
Na de ez munkalapra ugrik. Azt szeretném, hogy más munkalapokon történt eseményre reagáljon, bárhol a munkafüzetben! Vagy pedig minden munkalap változásához hozzá kéne rendelni ezt a makrót?
Pl. ez:
Private Sub Workbook_Change(ByVal Target As Range) Sheets("valami").Cells(1, 3) = Target.Column + 9 End Sub
Első próba: a munkalap másolásakor egy percre lefagyott az Excel, aztán tényleg lemásolódott gombostul, és most mind a két munkalaphoz ugyanaz a makró tartozik. Ez végül is jó, úgyis egyforma munkalapokat akarok.
Bal oldalon látod, hogy a lapod kódját írod, akár a VB szerkesztőben is kiválaszhatod.
Fent a jobb oldali legördülőben a (Declarations) feliratot látod, balra mellette a (General)-t. Ezt legördíted, és a Worksheet-et választod. Alapból ez jelenik meg:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
Ha nem akarod, hogy minden fókuszváltás elindítsa a makrót, csak 1-1 módosítás, akkor vedd ki a címből a Selection részt.
Illetve máris van egy: hogyan tudok a megadott munkalaphoz makrót rendelni, amely bárhol a munkafüzetben történt módosítás hatására lefut? A múltkor látott Worksheet_Change mintájára próbálkoztam a Workbook_Change makróval, ami a Google szerint létezik is, de nem sikerült életet lehelnem belé.
Szuper! A lapszámot azért használtam, mert a lapnévvel nem működött, és a hibakeresés idejére egyszerűsíteni akartam. Most ott tartok, hogy a kezdőlapon fel vannak sorolva egymás alatt feldolgozandó munkalapnevek, és végigmegy az ott megnevezett munkalapokon, és mindegyikbl az A3 cella éertékét kiírja egy msgboxba. Ez persze csak teszt, de már el tudok indulni az igazi feladattal. :-) Hálás köszönetem, és holnap is lesznek kérdéseim!
Dolgoznék a fülekkel, és már az első lépésnél elakadtam.:-(
Private Sub Összesít() Dim lapok() As String Sheets(1).Range("D5") = 98 ' Ez még lefut Dim ws As Worksheet ws = ThisWorkbook.Sheets(1) End Sub
91-es hiba: "object variable or with block variable not set " (akár van benne thisworkbook, akár nincs). Próbáltam ráguglizni, de amit találtam, nem tűnik adekvátnak.