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.
Ha a beszúrást megcsinálja, de a függvényt nem illeszti be, akkor a gond az lehet, hogy a Do While ActiveCell.Value <> Empty rész félreviszi a kódot és oly módon értékelődik ki, hogy csak egyetlen egyszer kerül be a loop belsejébe a kód.
Feltéve de nem megengedve, hogy ez igaz, én nem az ActiveCell object-re hivatkoznék, hanem valahogy máshogy hivatkoznám meg azt a területet amit ki akarsz értékeltetni. Könnyen lehet, hogy az activecell nem változik a kód futásakor, vagyis nem végigfut az oszlopokon, henem beáll egy cellára, oda beilleszti a függvényt és nem mozdul. Amikor a loop megint kiértékelteti, hogy az activecell üres-e, akkor azt látja, hogy nem (mert az első lépésben bekerült a képlet) és jgy a kód megy tovább dolgára.
Pont ez az oka annak, hogy Select-et, Active-et meg Active-val kezdődő objecteket nem best practice használni, mert nehéz kiokoskodni, hogy a program futásakor épp mi lesz az Active.
Köszi, közben kieszeltem egy másik megoldást, ami működni látszik :-)...
Csak a loop-pal nem stimmel valami...
vagyis a for-ral, tehát hogy minden munkalapon megismételje a munkát.
Szerintem mit rontottam el?
Beszúr mindenhova egy oszlopot, pont mint kértem az első sheeten meg is csinálja a függvényt, de a többi sheetre már nem teszi be...valami hibádzik :-DDD.
Mi lehet a gond?
Köszi!!
Sub teszt2()
Dim PriceList As Variant Dim CheckFile As Variant Dim x As Long
MsgBox "Open the file you want to check!" Application.Dialogs(xlDialogOpen).Show
MsgBox "Open the PriceList!" Application.Dialogs(xlDialogOpen).Show
Workbooks(CheckFile).Activate x = Worksheets.Count
For i = 1 To x Worksheets(i).Range("B:B").Insert Shift:=xlToRight Range("A2").Select
Do While ActiveCell.Value <> Empty ActiveCell.Offset(0, 1).Value = "=RC[21]&""_""&RC[24]&""_""&RC[26]&"" Q""&ROUNDUP(MONTH(RC[6])/3,0)&"" ""&YEAR(RC[6])" ActiveCell.Offset(1, 0).Select Loop Next i
Az alábbi makrót gyártottam és felmerült egy kis probléma. A lényeg, hogy a felhasználónak ki kell választani a 2 db fájlt amin majd a makró futni fog. Ehhez GetOpenFilename-t használok.
Viszont sokszor utalgatnék a fájlokra, de ez a fenti parancs az egész elérési útvonalat is belerakja a névbe... Az viszont nem jó per pillant. Hogyan lehetne azt megoldani, hogy a kliens: 1. kiválasztja a 2 db fájlt 2. fájlok meg is nyílnak 3. excel meg is jegyzi szépen a nevet de az elérési útvonal nélkül tehát pl: "JakabPista.xls"
Van valami praktikus tanácsotok ezzel kapcsolatban?
Nagyon köszönöm!! ------------------------ Sub Price_check()
Dim CheckFile As String Dim PriceList As String
'Open Checkfile
MsgBox "Open the file you want to check!"
CheckFile = Application.GetOpenFilename If CheckFile = "False" Then MsgBox "No file was selected." Exit Sub End If
MsgBox "FileName is: " & CheckFile
'Open PriceList
MsgBox "Open the PriceList!" PriceList = Application.GetOpenFilename If PriceList = "False" Then MsgBox "No file was selected." Exit Sub End If
Hogyan lehet VBA-ban bekérni egy file elérési útját?
Van egy kód, ami email-ben csatolt file-t küld automatikusan, ha nem találja az általam beírt file, akkor meg akarom kérdezni a felhasználót, hogy adja meg az elérési utat. Mivel már nem DOS-ban dolgozunk, ezért nem várható el egy átlagos felhasználótó, hogy egy inputbox-ba írja be, hogy "c:file.txt", ezért egy olyan ablakot szeretnék kiadni a képernyőre, mint például a megynyitás, vagy a mentésnél.
Az azonosítókhoz tartozó összegek (a lehívások összegei) a te táblázatod szerint az E oszlopban szerepelnek.
Az én táblázatom szerint az első 2500-as értékről van szó, és azt szertném, ha a sárgával jelölt cellába automatikusan beíródna.
Lehet, hogy nem írtam le jól, hogy mire lenne szükség, megpróbálom újból.
Tehát ha felviszi valaki a táblázatba a 4 azonosítót, az első alkalommalmég neki kell beírnia, hogy milyen értékű a lehívás.
Amikor viszi fel a következőket, akkor azt szeretném, hogy ha már volt korábban ilyen lehívás akkor az E oszlopba beírná annak az értékét. Tehát a sok lehívásnál elég legyen csak a legelső alkalommal beírni az összeget, ha legközelebb előkerül ugyan az akkor már töltse ki a cellát a korábbi érték szerint.
Ha 1 lapon vannak, írd meg, melyik oszlopban mi található. Pl. melyikben vannak az összegek, amik az A:D oszlopokba írt száll. azonosítókhoz tartoznak.
A hivatkozásokból hagyd ki a Munka1!-et, és jó lesz, ha a táblázatod az itteni kép szerinti.
Tehát Excel beállításai -> speciális -> beállítások megjelenítése ehhez a munkafüzethez -> Objektumoknál megjelenítendő -> "semmi" helyett "minden" beklikkelése.
Egy táblázatba szeretnék beszúrni esetenként sorokat, de a "Az objektumok nem vihetők lapon kívülre" szöveget kapom. A táblán nincs rejtve se sor, se oszlop. Mitől lehet még ilyen?
Milyen módon lehet tudnék ide egy kis minta táblázatot bemásolni?
Próbáltam excelből, word-ből pdf-ből, de semmi sem lesz olvasható.
Nem igazán látszik az eredeti táblázat, legalább a szöveget kimásolom ide:
Azt szeretném megoldani, hogy ha egy lehívás azonosítóit beírom az első 4 oszlopba, akkor minden sor F oszlopában lévő cella nézze végig, hogy ilyen azonosítójú lehívás van-e már a táblázatban, ha van akkor annak az F2 cellában lévő értékét (most ez példaként 250.000 a fenti táblázatban) írja be a saját sorába is az F oszlopba. Ha még nincs ilyen lehívás, akkor ne írjon be a cellába semmit.
Jól látom, hogy sárgára és zöldre akarod festeni bizonyos workbook-ok bizonyos worksheetjeinek A1 celláját?
Milyen hibát tapasztalsz? Fut de nem azt csinálja amit szeretnél (hanem mit?) vagy le sem fut?
Sub Price_check() ' ' Price_check Macro
MsgBox "Open the file you want to check!" Application.Dialogs(xlDialogOpen).Show
MsgBox "Open the PriceList!" Application.Dialogs(xlDialogOpen).Show
PriceList = Workbooks(Workbooks.Count).Name CheckFile = Workbooks((Workbooks.Count) - 1).Name Jó esély van arrra, hogy itt elrontja, hogy melyik file a PriceList file és melyik a CheckFile. Lehet érdemes lenne a file-okat azok megnyitásakor hozzárendelni a nevükhöz... 'Zöld
Range("V1").Activate Miért aktiválsz itt bármit is? Mi a szerepe a V1 cellának? Ha a V1-et akarod formázni akkor fentre nem kell az A1, v. fordítva. With Selection.Interior .ColorIndex = 36 .Pattern = xlSolid End With
End Sub
Én lebeszélnélek a Select parancs használatáról, hagyd ki csak lassítja a kódot és nehezebb átlátni.
Az első With / End with átírva:
With Workbooks(CheckFile).Worksheets(1).Range("A1").Interior .ColorIndex = 43 .Pattern = xlSolid End With
Hát nem sokkal szebben látszik, hogy mivel csinálsz mit?