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.
Egy Excel cellára egyet kattintva egy hiperhivatkozás függvénnyel egy a gépemen lévő fájlt nyitok meg. pl. képet vagy videót. Meg tudom nyitni de nem egy lépésből, mert az Office egy ablakot dob fel a következő üzenettel: ********************************************************************************** "néhány fájl vírust tartalmazhat, vagy más módon veszélyeztetheti a számítógépet. Ellenőrizze, hogy a fájl megbízható forrásból származik-e" ********************************************************************************** Mivel a saját gépemen akarom megnyitni a fájlt nem tartok attól, hogy gond lenne ezért szeretném kiiktatni ezt az üzenetet. Próbálkoztam már a beállítások között de nem találom azt, ami ezt megoldaná. Van erre ötlete valakinek?
Igen, áthelyezés, vagy másolás, és természetesen másolatot kértem. Még véletlenül sem akartam elrontani az eredetit.
És mindkettő kiterjesztése xlsm, ráadásul ugyanaz a fájl van mindkét képen. Ezeket ugyanis itt is ott is tartom. Részben biztonsági másolatként, részben azért, hogy ha ez egyikhez nem férek hozzá, akkor a másikon ugyanazokkal a fájlokkal tudjak dolgozni.
Tehát ebből a szempontból sem volt eltérés köztük.
Próbáltam másik Excel munkalapra kérni a másolást, próbáltam új munkafüzetbe. Az eredmény minden esetben változatlan volt. Egyiken jó, másikon nem.
Még egy dolog jut eszembe, ahogy most írok. Holnap megnézem, hogy nem lehet-e az Excel beállításainál találni valami olyan különbséget, ami az eltérést okozhatja. Csak az a beállítás menü annyira kellemetlen. Nem lehet másolni, nyomtatni (legfeljebb képlopóval, de az nehézkes), tehát emlékeznem kell, hogy, mi volt a beállítás egyiken és másikon.
Kösz, nagy nehezen én is rátaláltam a disappers keresőszóra, a másodikat meg is találtam. A Mrexcel-t nem, de tovább fogom náluk is keresni, hátha találok egy használható választ a kérdésre.
De hogy két - lényegében azonos módon beállított - gépen másképp működjön, az igazán rejtélyes. Ha esetleg megtalálom valamikor az okot, azonnal megírom.
Sziasztok, megdöbbentő jelenséggel találkoztam, és fontos lenne kiderítenem az okát.
Van két gépem, mindkettő windows 7 alatt Excel 2010 fut.
Vannak évenként visszatérő azonos feladataim, amelyekben azonos szerkezetű adatsorokból azonos kinézetű diagramokat kell készítenem.
Tavaly jöttem rá, hogy nem kell a diagramokat mindig újból elkészíteni. Elég, ha a meglévő tavalyi munkalapot átmásolom az új fájlba, majd csak az új adatokat írom be a diagram forrását jelentő cellákba, és a diagram frissül.
Akkor ezt a másolást a laptopomon végeztem (éppen vidéken voltam), és természetesnek tartottam, hogy a munkalap másoláskor a rajta lévő diagramot is viszi magával.
Idén itthon vagyok, és az asztali gépemen másoltam a munkalapot, és meglepődtem, hogy a másoláskor csak az adatok kerülnek át, a diagramok nem.
Visszaültem a laptophoz, ott tökéletesen működött a másolás.
Elsőre azt hittem, hogy a sablonok okozzák a zavart, de kiderült, hogy éppen azon a gépen nem voltak sablonok, ahol jól működik a dolog. Akkor megpróbáltam a másik gépről is törölni a sablonokat, de - ahogy várható volt - továbbra sem működött a másolás.
Azért lenne fontos, mert ki tudja, hogy a közelgő verzióváltáskor mi lesz a helyzet. Jó lenne, ha úgy tudnám a gépeket beállítani, hogy működjön a másolás.
Végső soron persze meg fogom tudni kerülni a problémát (Komplett fájl másolása, átnevezése, majd csak az adatok frissítése), de azért nyugtalanít a dolog.
Próbáltam volna interneten rákeresni a jelenségre, de nem tudok igazán jó keresőszavakat találni a hibajelenséghez.
Nagyon hálás lennék, ha valaki rá tudna vezetni a hiba okára.
...basszus figyelmetlen vagyok azért válaszolok több részletben... Windows 10 az op rendszer.
De mivel nagyjából megoldódott a problémám a 2016-os Office-szal ezért nem szeretnék senkit tovább kínozni hacsak passzióból nem tud valami szuper-tutkó-praktikus-rövid megoldást, ami mindent visz. De addig is....most elvagyok azzal, amit eddig javasoltatok. Mindenkinek köszönet. Ha lesz még kérdésem "I'll be back".
Pimre visszajelzését követően kipróbáltam a programot egy Win XP-vel és Office 2003-mal felfegyverzett virtuális gépen, Compatibility Pack telepítés után.
Az eredeti .xlsm fájlt, amit xl2019-ben csináltam, nem tudta megnyitni.
Létrehoztam egy új munkafüzetet, bemásoltam a kódot, tettem bele képeket, elmentettem .xlsm formátumban. A kód elakadt a Set oWIA = CreateObject("WIA.ImageFile") sornál. Ez szerintem annak tudható be, hogy Win XP-ben a WIA másképp működik. De az általad jelzett soron simán átlépett: megcsinálta a zip kitömörítést, beolvasta az XML adatokat, stb.
Ha viszont a fájlt .xls formában mentem, és úgy futtatom a kódot, akkor nem csinálja meg az unzip műveletet, és ott jelez hibát, ahol neked is:
Ez a hibaüzenet nekem nem mond semmit. Max arra tudok gondolni, hogy többkötetes zip fájlt érzékel, ami egyrészt nem valószínű, másrészt biztos nem annál a kódsornál jelentkezne, amit írtál.
Attól tartok, ezt nehéz lesz távgyógyítani...
Milyen Excel verzióval küzdesz? Nem említettem, de ez a kód Excel 2007 alatt biztosan nem fog futni, tekintettel arra, az OpenXML formátumot (xlsx, xlsm és társaik) a 2007-es Office verzióban vezették be.
Nemtom, belefér-e a teljes kód... de mindenesetre ezt kellene átmásolni egy szűz kódmodulra, és futtatni a RestoreCommentPictureSize makrót. Megjegyzések:
- Az Excel munkafüzetet takaró fájl valójában egy zip archivum, amit ki lehet csomagolni, és akkor feltárul a belső xml szerkezet. A kommentek hátteréül szolgáló képek eredeti méretben lesznek kimentve. - A lenti kód másolatot készít az aktuális munkafüzetről, a másolatot kicsomagolja (unzip) egy mappába. E művelet során a munkafüzet 2x is mentésre kerül. Mentéssel a Visszavonás (Undo) opció elvész, tehát a mentés előtti műveleteket nem fogod tudni visszavonni a program futtatása után. - A program a kicsomagolt mappában a különböző xml és egyéb fájlok elemzésével felderíti a kommentek és a képek kapcsolatát, majd a kép eredeti dimenzióit felhasználva átméretezi a komment dobozát. - A munkafüzet mindegyik munkalapján elvégzi az átméretezéseket az érintett kommenteken. - Az xml fájlokban definiált kapcsolatokat nem gyári specifikációkból vettem, hanem magam derítettem fel a szövegfájlok elemzésével, így ebben elképzelhető hiba.
- Én csak 4-5 képes kommenttel teszteltem a programot, de akárhogy rendeztem át a cellákat és akárhogy ziláltam szét előzőleg a komment méreteket, ezekkel teljesen jól működött. - A futás során keletkezik egy zip fájl és egy mappa, amelyeket elvileg a program töröl is, de valamiért ez a törlés nem mindig következik be. Ezért a program indítása előtt mindig győződj meg róla, hogy mind a zip fájl, mind az unzip mappa törölve lett, mert különben a program hibára fog futni. (Bocsi, nem volt már energiám ilyen helyzeteket is kezelni.) - A progam megfelelő működéséhez nem szükséges, hogy a kommentek meg legyenek jelenítve. - Végül, de nem utolsósorban: nincs benne SendKeys :o)
És akkor most sűrű fohászkodás, hogy a fórummotor jól jelenítse meg....
Option Explicit
Type TXMLWorksheet SheetRID As String Name_of_Worksheet As String Name_of_SheetXML As String Name_of_SheetRelations As String Name_of_vmlDrawingVML As String Name_of_vmlDrawingRelations As String Path_to_SheetXML As String Path_to_SheetRelations As String Path_to_CommentsXML As String Path_to_vmlDrawingVML As String Path_to_vmlDrawingRelations As String End Type
Type TImageSize Width As Single Height As Single End Type
Private ZipFolder As String, XL_Folder As String Private Path_WorkbookXML As String, Path_WorkbookXML_Rels As String Private xmlWorksheets() As TXMLWorksheet '
Sub RestoreCommentPictureSize() Copy_UnZip_Workbook Collect_XML_WorksheetData IterateThroughComments On Error GoTo nodelete CreateObject("Scripting.FileSystemObject").DeleteFolder ZipFolder MsgBox "Kommentek átméretezése kész." Exit Sub
nodelete: MsgBox "Hiba történt a " & ZipFolder & " mappa törlése során. Manuálisan kellene törölni." Resume Next End Sub
Private Sub Copy_UnZip_Workbook() Dim myName As String, myShortName As String, myFullPath As String Dim WorkFileXLPath As String, WorkFileZipPath As String Dim oShell As Object
For i = 1 To ThisWorkbook.Worksheets.Count With xmlWorksheets(i) .Name_of_Worksheet = ThisWorkbook.Worksheets(i).Name 'Set .myWorksheet = ThisWorkbook.Worksheets(i)
'sheet relations file elérési útjának összerakása, a fájl megnyitása, belőle további XML elérések kiolvasása .Path_to_SheetRelations = .Path_to_SheetXML & "\_rels" .Name_of_SheetRelations = .Name_of_SheetXML & ".rels" 'Comment.xml elérése TextLine = Get_SpecificLine_From_TextFile(Filepath:=.Path_to_SheetRelations & "\" & .Name_of_SheetRelations, LineMarker:="relationships/comments") If TextLine <> "" Then pos = InStr(TextLine, "Target=") sTemp = Replace(Mid(TextLine, pos + 7), """", "") sTemp = Replace(sTemp, "/", "\") .Path_to_CommentsXML = .Path_to_SheetXML & "\" & sTemp End If 'vmlDrawing.vml elérése TextLine = Get_SpecificLine_From_TextFile(Filepath:=.Path_to_SheetRelations & "\" & .Name_of_SheetRelations, LineMarker:="relationships/vmlDrawing") If TextLine <> "" Then pos = InStr(TextLine, "Target=") sTemp = Replace(Mid(TextLine, pos + 7), """", "") sTemp = Replace(sTemp, "/", "\") pos = InStrRev(sTemp, "\") .Path_to_vmlDrawingVML = .Path_to_SheetXML & "\" & Left(sTemp, pos - 1) .Name_of_vmlDrawingVML = Mid(sTemp, pos + 1) .Path_to_vmlDrawingRelations = .Path_to_vmlDrawingVML & "\_rels" .Name_of_vmlDrawingRelations = .Name_of_vmlDrawingVML & ".rels" End If End With Next End Sub
Private Sub IterateThroughComments() Dim ws As Worksheet, wsXML As TXMLWorksheet, cmt As Comment, sh As Shape Dim iCol As Long, iRow As Long, PicRelsID As String, Path_to_Image As String Dim i As Long, sTemp As String, pos As Long, ImgSize As TImageSize
For Each ws In ThisWorkbook.Worksheets For i = 1 To UBound(xmlWorksheets) If ws.Name = xmlWorksheets(i).Name_of_Worksheet Then Exit For Next wsXML = xmlWorksheets(i) For Each cmt In ws.Comments iCol = cmt.Parent.Column - 1 iRow = cmt.Parent.Row - 1 Application.StatusBar = wsXML.Name_of_Worksheet & "(" & iRow & "," & iCol & ")" PicRelsID = Get_CommentPicID_From_vmlDrawing(vmlFilePath:=wsXML.Path_to_vmlDrawingVML & "\" & wsXML.Name_of_vmlDrawingVML, iColumn:=iCol, iRow:=iRow) If Not PicRelsID = "" Then sTemp = Get_SpecificLine_From_TextFile(Filepath:=wsXML.Path_to_vmlDrawingRelations & "\" & wsXML.Name_of_vmlDrawingRelations, LineMarker:="Relationship Id=""" & PicRelsID) pos = InStr(sTemp, "Target=") sTemp = Mid(sTemp, pos + 8) sTemp = Replace(sTemp, """", "") sTemp = Replace(sTemp, "/", "\") Path_to_Image = wsXML.Path_to_SheetXML & "\" & sTemp ImgSize = Get_ImageSize(Path_to_Image) With cmt.Shape .LockAspectRatio = msoFalse .Width = ImgSize.Width .Height = ImgSize.Height End With End If Next Next Application.StatusBar = False End Sub
'XML szövegfájlban megkeres egy bizonyos sort (az elsőt, ami tartalmazza a LineMarker stringet), és azt adja vissza Private Function Get_SpecificLine_From_TextFile(Filepath As String, LineMarker As String) As String Dim iFileNum As Long, TextFileContent As String, TextLines() As String, i As Long, Result As String
If Dir(Filepath) = "" Then Exit Function iFileNum = FreeFile Open Filepath For Input As iFileNum TextFileContent = Input(LOF(iFileNum), iFileNum) Close iFileNum
TextFileContent = Replace(TextFileContent, "><", ">[|]<") TextLines = Split(TextFileContent, "[|]") For i = 0 To UBound(TextLines) If InStr(TextLines(i), LineMarker) > 0 Then Result = TextLines(i) Exit For End If Next Result = Replace(Result, "<", "") Result = Replace(Result, "/>", "") Get_SpecificLine_From_TextFile = Result End Function
'Comment hátteréül szolgáló kép elérési útvonalát határozza meg az unzippelt Excel munkafüzet mapparendszerében Private Function Get_CommentPicID_From_vmlDrawing(vmlFilePath As String, iColumn As Long, iRow As Long) Dim iFileNum As Long, TextFileContent As String, TextLines() As String Dim i As Long, Result As String, sTemp As String, pos As String
iFileNum = FreeFile Open vmlFilePath For Input As iFileNum TextFileContent = Input(LOF(iFileNum), iFileNum) Close iFileNum
TextFileContent = Replace(TextFileContent, "<v:shape", "[|]<v:shape") TextLines = Split(TextFileContent, "[|]") For i = 0 To UBound(TextLines) If (InStr(TextLines(i), "<x:Row>" & iRow & "</x:Row>") > 0) And (InStr(TextLines(i), "<x:Column>" & iColumn & "</x:Column>") > 0) Then Exit For End If Next If i > UBound(TextLines) Then Exit Function
sTemp = TextLines(i) pos = InStr(sTemp, "<v:fill o:relid=") If pos = 0 Then Exit Function
sTemp = Mid(sTemp, pos) Result = Split(sTemp, """")(1)
Get_CommentPicID_From_vmlDrawing = Result End Function
'a megadott útvonalon található kép méreteit adja vissza pixelben Private Function Get_ImageSize(ImagePath As String) As TImageSize Dim oWIA As Object, Result As TImageSize
Set oWIA = CreateObject("WIA.ImageFile") oWIA.LoadFile ImagePath Result.Height = oWIA.Height Result.Width = oWIA.Width Get_ImageSize = Result End Function
Azt látom, hogy valamiért nem szereti így a megjegyzések kigyűjtését. Ezért előbb a cellákat kell megnézni, van-e megjegyzése, ha igen akkor lehet ráengedni a méretezési részt:
Sub Megjegyzem() Dim sh As Shape, cm As Comment, i As Long, cl As Range For i = 1 To 2 For Each cl In Selection.Cells '<<<< ez a sor lett csak kicserélve! If Not cl.Comment Is Nothing Then Set cm = cl.Comment cm.Visible = True Set sh = cm.Shape sh.Select DoEvents Application.SendKeys "^1" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{ENTER}" Application.SendKeys "{TAB}" Application.SendKeys "{ENTER}" cm.Visible = False End If Next Next End Sub
Ennyi, szerintem így már mennie kell. Kipróbáltam.
Nem azért, hanem azért, mert a tantárgyaknak nincs egységesített országos nevezéktana. Persze, lehet, hogy nem is kellene, de ez nehézzé teszi az azonos tartalmú, de eltérő elnevezésű tantárgyak értékelését. Ráadásul az középiskolák ezt készen kapják az Oktatási Hivataltól. Azok meg az általános iskoláktól gyűjtik be, szóval az egységesítés szinte megoldhatatlan. Hacsak a Hivatal egyszer ki nem dolgoz valami kódrendszert, amivel egységes formára hozza az azonos tartalmú tárgyakat. Onnantól már megoldhatnák az általad javasolt find/replace műveletet.
Csak együttérezni lehet azokkal a tanárokkal, akiknek felvételiztetéskor ezekből az alapadatokból kell összesíteniük a tanulók hozott érdemjegyeit.
Nem értem miért pedig ez még nekem is logikusnak és helyesnek tűnik.
Látsz valami hibát? Mit ronthattam el?
Sub Megjegyzem() Dim sh As Shape, cm As Comment, i As Long For i = 1 To 2 For Each cm In Selection.Comments <<<< ez a sor lett csak kicserélve! cm.Visible = True Set sh = cm.Shape sh.Select DoEvents Application.SendKeys "^1" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{ENTER}" Application.SendKeys "{TAB}" Application.SendKeys "{ENTER}" cm.Visible = False Next Next End Sub
Úgy sejtem, azért lett ez ennyire összekuszálva, mert a szövegből -> oszlopok bontásban a szóköz lett határolónak kiválasztva.
Ha így van, akkor szerintem (hasonló esetben legközelebb) először az eredeti szöveget kell megtisztítani, a tantárgyak nevét egyszerű find/replace művelettel egységes formába hozni.
Nem ilyen egyszerű. Nekünk a neve mindegy lett volna, csak a helye nem, és ez okozta a gondot. A súlyozás nem jött szóba, mert ugyanazt fedték a nevek, így szerencsére csak az egyik név alatt jöttek adatok.
Egy diáknak a történelem jegyét az egyik néven adják meg, amihez a hozott osztályzatát mondjuk az AU,AV oszlopokban találom, a másikét a az eltérő név miatt a BB,BC oszlopokban, a harmadikét a CC,CD oszlopokban. Ezért aztán ilyen szörnyszüleményeket kellett létrehozni:
=(AM4+AN4+AQ4+AR4)/2+BC4+BD4+BK4+BL4+AY4+AZ4+AU4+AV4+CU4+CV4, ahol a zárójeles részt - más okból - valóban átlagolni kellett, viszont a BC-BD az egyik neve a tantárgynak, a BK-BL a másik, de ugyanezigaz az AY-AZ és AU-AV párosra. Még szerencse, hogy egy tanulónál csak az egyik párban volt adat, így nyugodtan lehetett összegezni őket.
És ráadásul több táblázatban kellett ezt megcsinálni, és azokban külön-külön összehozni a fenti képletet, mert más iskolákból, más elnevezésű tantárgyakkal más oszlopokban voltak az osztályzatok.
Érdekes, amit írsz, valóban néha úgy kell kezdeni, hogy egyenszilárdságúra hozza az ember. :(
Amit a törivel kapcsolatban írsz: van jelentősége a tárgy nevének? Úgy értem, ha 5 tárgyat kell átlagolni, ott az az öt és kész. Mert ha a három töri tárgynak eltérő a neve, akkor - véleményem szerint - tartalmában is el kell térnie, tehát az átlagolásban csak súlyozás után használhatóak fel.
Sziasztok.Adott egy lista 1-100 ig,amelyikbe be szeretnék írni egyszeruen számokat,ugy ,hogy en csak annyit kelljen irjak egyik négyzetbe ,hogy 3,a másikba azt hogy 21 ,és ezt automatikusan megjeleniti a listában.Ezt kellene tudja csinálni folytatolagosan.Például
5 db 21
2 db 25
3 db 30
4 db 24
es nekem a listaban igy jelenjen meg,ennyi gepeles utan
Az a baj, hogy valószínűleg nem ők jelölik így az osztályzatokat. Volt szerencsém segíteni ismerősömnek egy gimnáziumi felvételi értékelésében. Az oktatási hivataltól kapnak egy több száz oszlopos táblázatot, amely többek között a gyerekek általános iskolából hozott érdemjegyeit tartalmazza. És ott szerepelnek ilyen elképesztően szerencsétlen megoldások is. Szerencsére nem volt túl sok, így kézzel át tudtuk javítgatni őket. Lehetett volna a bal() függvényt használni, de az még nehézkesebbé tette volna a képlet létrehozását, mivel soronként más-más oszlopokból kellett kinyerni az osztályzatokat. Ennek oka a következő:
Borzalmasan nehezen kezelhető a táblázat, mert attól függően, hogy a gyerek melyik iskolából jött, más és más ugyanannak a tantárgynak a neve. Például a történelem az egyik iskolában történelem és állampolgári ismeretek, a másikban történelem, társadalmi és állampolgári ismeretek, a harmadikban történelem néven szerepelt, ezért az egyes tanulók osztályzatait vagy egyik, vagy a másik, vagy a harmadik helyről kell összeszedni. És persze öt tantárgy adatait kellett a fentiek figyelembevételével összegezni és átlagolni.
Elég komoly függvényeket kellett összehoznom, sőt makrót is be kellett vetni ahhoz, hogy a szükséges képletet létrehozzam, ahhoz, hogy a közel ezer felvételiző adatait összehasonlítható formában megkapjuk.
Segítséget szeretnék kérni. Valamilyen szinten használom az Excelt, de amire most kellene ahhoz nincs ötletem. Átlagot szeretnék számoltatni, de olyan módon, hogy nem csak számok vannak a cellákban, hanem szám betűvel együtt és én csak azt szeretném, hogy csak a számot vegye figyelembe. Tantárgyi átlagokhoz kellene a táblázat és abba 5D-vel jelöljük a dicséretes 5-öst. Alapból ezeket kiveszi az átlagból a függvény. Van valamilyen lehetőség arra, hogy akár összetett függvénnyel figyelembe vegye?
Mindenkinek köszönet a fáradozásáért. Kipróbáltam 2016-os Excelen és ott tényleg működik szóval lehet, hogy áttérek erre a 2003-as helyett, mert nem szeretnék tovább fárasztani senkit a feladattal. Esetleg kérhetnék még annyit, hogy milyen sort és hová kellene beilleszteni ahhoz, hogyha pl. csak az "A" oszlopban szeretném lefuttatni vagy csak a kijelölt cellákban?
Ezek a kimutatások .xls fájlokban vannak. Eddig hibátlanul működtek. Lehet, hogy most ez az egy dolog útban lett a Mikrofostnak. Áttettem .xlsm-be, és működik. Csakhogy ezzel két bajom is van. Egyrészt ez a rendszer 14 géppel van megosztva, közöttük mindenféle konfiguráció. A másik meg az, hogy rengeteg hivatkozást kell átírni. Az .xls egy jól bevált közös minimum volt.
Sajnos nem segít. Nekem is pontosan így van, és ahogy mondtam, régebben szerkesztettem utoljára a fájlt, mint ahogy ez a jelenség fellépett. Valami Win, vagy Office frissítésre gyanakszom.
Nézd meg, hogy más fájloknál jelentkezik-e ilyen probléma. (Ha ilyen jellegű fájlod, akkor csinálj hasonlót, nézd meg működik-e az automatikus frissítés.)
Hát igen. De milyen beállításokat nézzek? A fájlokat én csináltam, és DropBoxon keresztül küldtem nekik is. Pár éve használjuk. Most nálam nem megy. Milyen beállítás ment el, és hol keressem?
A kézi frissítés működik, de megnyitáskor frissülnie kellene! Van olyan kollégám, akinél működik. Nem kaphattam (be) valami frissítést? Amíg nem frissítem, addig a részleteket kibontó és összecsukó makrók se mennek.
Run-time error'1004':
Range osztály ShowDetail tulajdonsága nem állítható be.
Mi lehet az oka annak, hogy egyes fájokban a Pivot táblák nem frissülnek a munkafüzet megnyitásakor automatikusan, pedig be van állítva? Az utóbbi időben nem is mentettem a fájlokat.
Eddig működött hibátlanul, de pár napja valami megváltozott.
Első lépésként a Beállításoknál, Speciális, Megjelenítés menüpontban jelöld be a Megjegyzések és jelölésük opciót. Ezzel minden megjegyzésed látszani fog, nem kell egyenként előcsalnod őket.
Mindegyiknél kiigazítod az elmászott méretet. Nincs mentség, ezt egyszer el kell végezni.
Most indíthatod a makrót, ami beírja a kijavított méreteket a C és D oszlopba.
Ha újra összekuszálódnak a méretek, már csak a második makrót kell indítanod, ami a bejegyzett méretek alapján rendet vág.
Szerintem egy elfelejtett utasítás lesz minden baj forrás!
Ami feltétlenül szükséges előkészület:
Egy képen csináld meg méret helyreállítását. Ez azért kell, hogy amikor legközelebb feljön a Megjegyzés formázása ablak, akkor a Méret fül legyen felül.
Nagyon értékelem az igyekezeted de ez nem lesz jó. Azt is megmondom miért. Félrevezető lehet, hogy a feltöltött minta.xls csak 2 oszlopot és 5 sort tartalmaz de a valóságban 10 oszlop van és 2000 sor így 2000-nél is több képet kellene egyesével átállítanom. Ez még a korábban működő makrónak is ~1-2 percbe tellett. OK, értem - csak egyszer kell megcsinálni - de a képek mérete azt hiszem attól szokott elállítódni ha szűröm a cellákat valamilyen feltétel szerint vagy másik oszlop szerint rendezek sorba, továbbá egyes cellákat néha törlök vagy más munkafüzetbe kerülnek át így nem hiszem, hogy ez a megoldás (kielégítően) működne. A 34517-esbe beillesztett makrón semmit nem változtattam. Sokáig működött (egyszer csak nem) ezért gondoltam, hogy létezik megoldás, de sajnos úgy tűnik ez most mindenkin kifog. És csak ismételni tudom magam, hogy nagyon értékelem az igyekezeted, hogy időt szántál rám de valami praktikusabb megoldás kellene. Még egyszer köszönöm!
Az alsó makróban nem kell a cm.Visible = True sor, hiszen a makró elején az Application.DisplayCommentIndicator = xlCommentAndIndicator láthatóvá tette az összes megjegyzést.
Egyszer kell megcsinálnod. Tedd láthatóvá a megjegyzéseket, a nem jó méretűeket méretezd át egérrel.
Futtasd le az Eredeti_meret makrót. Ez beírja a C és D oszlopokba a szélesség és magasság méreteket. Teheted a méreteket más oszlopokba is, de akkor a második makrónál is azt kell alkalmaznod.
úgy látszik fejlődöm, mert mielőtt olvastam volna a válaszod ezt műveltem:
Sub Megjegyzes()
Dim sh As Shape, cm As Comment For Each cm In ActiveSheet.Comments cm.Visible = True Set sh = cm.Shape sh.Select Selection.AutoSize = True cm.Visible = False Next
End Sub
Itt már nem jelez hibát, lefut a makró de nem azt teszi, amit kellene.
Az összes kép méretet kicsire állítja, de érzem, hogy jó fele tapogatózunk.
Egyetlen makróra lenne szükségem és mivel csak ez az egy érdekel nem szántam magam rá a Visual Basic mélyebb elsajátítására így külső segítségre van szükségem. Korábban kb. 10 éve valamelyikőtök már segített ebben és írt egy rövid makrót, ami évekig remekül működött de egy ideje már nem működik. (a bánat tudja miért pedig nem tudok róla, hogy bármit változtattam volna rajta)
- Office 2003-at használok (nem tévedés... 2003) - a megjegyzésekbe képeket ágyazok a következő módon:
01 cella kijelöl 02 egér jobb klikk 03 megjegyzés beszúrása 04 megjelenő ablak keretére dupla klikk 05 színek és vonalak (lenyíló fül) 06 szín 07 kitöltési effektus 08 kép 09 képválasztás 10 beszúrás 11 ok 12 ok 13 ablak keretére dupla klikk 14 méret 15 alaphelyzet 16 ok
Innentől ha a cella fölé viszem az egérmutatót a beágyazott kép előugrik. A gond csak az, hogy időnként valamilyen ok miatt a képek méretének alaphelyzete elállítódik és egyesével visszaállítani óriási és felesleges munka lenne mivel újra el fog állítódni. Ez nem is lenne baj, mert a makró meg tudja ezt oldani pillanatok alatt(ha van). A képek mérete eltérő. Nem nagyok de az oldalarányaik eltérőek.
Tehát a feladat röviden az lenne, hogy egy makró az aktív munkafüzetben alaphelyzetbe állítsa a beágyazott képek méreteit.
példának okáért idemásolom azt a makrót a neve "Sub Megjegyzem", ami már nem működik hátha valaki észreveszi mi lehet a hiba és azt átírva megoldódik a probléma de lehet, hogy tudnátok jobb megoldást, nekem mindegy.
*********************************************** Sub Megjegyzem() Dim sh As Shape, cm As Comment, i As Long For i = 1 To 2 For Each cm In ActiveSheet.Comments cm.Visible = True Set sh = cm.Shape sh.Select DoEvents Application.SendKeys "^1" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{ENTER}" Application.SendKeys "{TAB}" Application.SendKeys "{ENTER}" cm.Visible = False Next Next End Sub
Köszönöm a kérdést. Nem ez volt ugyan a megoldás, de adtál egy inspirációt. Megtaláltam az eltérés okát.
Az eredmény megdöbbentő, váratlan és tanulságos:
Kezdem azzal, hogy a végrehajtás sorrendje mégsem tér el a két helyen. Az csak a látszat volt. Egészen pontosan először végrehajtódik a BeforUpdate, aztán a cmdMegse_Click, majd rejtélyes okból ismét a BeforeUpdate. Csak baromi nehéz követni őket, mert olyanok, mint a kvantumrészecskék. Ha megfigyelem őket (jelen esetben megszakítom a futást, és lépésenként nézem), akkor másképp viselkednek. Debug.print "Itt vagyok" és hasonló beszúrásokkal lehet valamennyire nyomon követni a bejárt utat.
Szóval az a bizonyos Mégse nevű CommandBoxra kattintás volt a kulcsa a dolognak. A "rosszul viselkedő" Userformon magát a cmdMegse gombot szépészeti okokból az oldal alján középre helyeztem el. Amikor a textbox beadást nem félbehagyom, hanem befejezem, akkor beforaUpdate-ban kiíratom mellé a mentést lehetővé tevő cmdMentes gombot. De hogy szép maradjon az utóbbit középtől kicsit balra, a cmdMegse gombot ugyanennyivel kicsit jobbra igazítom a cmdMegse.left = xxx paranccsal.
És ez volt az eltérés oka! Úgy látszik, hogy ezt a kis elmozdulást értelmezte úgy a program, hogy ha már elment onnan akkor nem is kell végrehajtani. (Emberi kapcsolatokból sok példa van erre: Ha nem várt meg, akkor az ő baja...)
Abban a pillanatban, amikor ezt a parancsot töröltem, a cmdMegse rendben végrehajtódott.
Van két Userformom. Mindkettő egy Textbox kitöltésével kezd, ahol egy elnevezést kell megadni. Ebből a név megadás befejezésével (Enter/Tab) lehet kilépni, vagy a Mégse nevű CommandBoxra kattintva. Szeretek arra felkészülni, hogy ha a felhasználó a név megadása közben meggondolja magát, és a Mégse gombra kattintva félbe akarja hagyni a megkezdett munkát, mert mondjuk most vette észre, hogy nem erre a Formra akart lépni.
Elvileg (hitem szerint) azonosak a feltételek, mégis az egyiknél - a Mégse eseményre ugrás előtt - befejezi a névhez tartozó kilépés előtti ellenőrzést, a BeforeUpdate eseményt, a másiknál előbb a cmdMegse_Click eseményre ugrik a vezérlés, és csak aztán a BeforeUpdate-ra (a szándékom mindkettőnél az utóbbi lenne).
(Sajnos a BeforeUpdate eseményt nem tudom mással kiváltani, szükséges egy-egy Textbox beadása után, kilépés előtt bizonyos ellenőrzéseket elvégezni)
A kettő közti különbség azért nem mindegy, mert ha előbb lépek a Mégse eseményre, ott tudom jelezni a BeforeUpdate-nek (például egy .TAG-be írt üzenettel, hogy most nincs dolga az ellenőrzéssel.
Vajon mi lehet az általam észrevehetetlen különbség a kétféle lefutás között. Tudom, hogy a kód ismerete nélkül nemigen lehet erre válaszolni, de hátha valakinek volt hasonló megfigyelése, ahol kiderült a különbség.
Csatolt képen kékkel jelölt résszel akadt problémám. Kezdődik egy autó szűrővel. Jól működik a dolog egészen addig amíg a szűrésre van találat. Abban az esetben csak a találatokat kijelöli és másolja. Viszont ha nincs találat a szűrésre akkor a szűrés intervalluma alatti cellakat, több százezer sort is átmásolja. Van lehetőség beiktatni valami ha fuggvenyt, hogy amennyiben nincs a szűrésnek találata ne másoljon hanem hagyjon ki bizonyos lépéseket?
Letöltöttem ezt a filezilla cuccot, és - felhasználva némi netes szakirodalmat - elemezgettem az indulását.
Arra nem találtam infót, hogyan kell egyértelműen lekérdezni a Filezilla státuszát, viszont azt vettem észre, hogy a Filezilla processz egyes paraméterei az indítás után egy darabig változnak, aztán egy bizonyos értéken stabilizálódnak.
Ezekről van szó:
- PageFileUsage
- PrivatePageCount
- QuotaPagedPoolUsage
- ThreadCount
- VirtualSize
Úgy okoskodtam, hogy a stabilizálódáshoz szükséges idő valószínűleg a futtató hardver teljesítményétől és leterheltségétől függ, és ha már minden paraméter stabil, akkor a FileZilla biztosan tudja fogadni a SendKeys parancsokat.
Írtam tehát egy kódot, ami figyeli a fenti paraméterek értékét, és ha mind az 5 figyelt paraméter 10 egymást követő lekérdezés alatt stabilan állandó marad, akkor azt mondjuk, hogy az alkalmazás elindult.
Ha a 10-et soknak találod, lehet csökkenteni: csak állítsd át a CountQuery konstans értékét kisebbre.
A másik konstans egy biztonsági korlát, hogy ha N db (jelenleg 100) lekérdezés alatt sem állnak be a paraméterek, akkor álljon le a figyeléssel. Nálam mindig kb. 30 lekérdezés után stabilizálódott az 5 paraméter.
Sub FileZillaStarter() Const CountQuery = 10, QueryInterruptLimit = 100
Dim strComputer As String, objSWbemServices As Object, colServices As Object, objService As Object, myProp As Object, WshShell As String Dim arrProps, iQuery As Long, iProp As Long, StartOver As Boolean, CountTotalQueries As Long
strComputer = "." ReDim arrProps(1 To 5) Set objSWbemServices = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") WshShell = Shell("Elérési út\FileZillaPortable.exe", vbMinimizedFocus) Do StartOver = False For iQuery = 1 To CountQuery Set colServices = objSWbemServices.ExecQuery("select * from win32_process where name='FileZillaPortable.exe'") CountTotalQueries = CountTotalQueries + 1 Application.StatusBar = CountTotalQueries & " - " & CStr(StartOver) For Each objService In colServices iProp = 0 For Each myProp In objService.properties_ Select Case myProp.Name Case "PageFileUsage", "PrivatePageCount", "QuotaPagedPoolUsage", "ThreadCount", "VirtualSize" iProp = iProp + 1 If arrProps(iProp) <> myProp.Value Then arrProps(iProp) = myProp.Value StartOver = True End If End Select Next Next Next DoEvents Loop Until (StartOver = False) Or (CountTotalQueries > QueryInterruptLimit) If CountTotalQueries > QueryInterruptLimit Then MsgBox "belefáradtam a várakozásba" Else MsgBox "az Applikáció elindult és stabil" End If Application.StatusBar = False End Sub
Hangsúlyozom, hogy ez nem egy egzakt megoldás. Nem a tényleges státuszt kérdezem le, hanem különböző státusz-indikátorokat, amelyek vagy jól indikálnak, vagy nem.
Aztán az sem biztos, hogy más rendszereken lefut-e egyáltalán a kód. A saját Win7-es gépemen teszteltem, de ha pl. Win10 rendszeren a monitorozott processz-paraméterek neve más, és akkor máris nem fog működni.
Csak az egyértelműség kedvéért: a lenti kód megvárja, míg a filezilla elindul, és csak utána hajtja végre a következő műveletet. Ha jól értettem a korábbi posztokból, valami ilyesmire van szükséged.
Sub exampleIsProcessRunning() Dim WshShell As String WshShell = Shell("Elérési út\FileZillaPortable.exe", vbMinimizedFocus) While Not IsProcessRunning("FileZillaPortable.exe") Debug.Print "waiting - " & Now 'ez a sor törölhető, csak dísznek van Application.Wait Now + TimeSerial(0, 0, 0.1) 'ez a sor törölhető, csak dísznek van DoEvents 'ez a sor lehetővé teszi, hogy meg tudd szakítani a futást Crtl+Break segítségével, ha túl hosszúra nyúlna a végrehajtás (vagy ha végtelen ciklusba kerül a program) Wend MsgBox "process started OK" End Sub
Function IsProcessRunning(process As String) Dim objList As Object Set objList = GetObject("winmgmts:") _ .ExecQuery("select * from win32_process where name='" & process & "'") If objList.Count > 0 Then IsProcessRunning = True Else IsProcessRunning = False End If End Function
Ez a szint már meghaladja az ismereteimet, így le kell állnom. Remélem, lesz aki hozzá tud tenni valamit. Mindenesetre bízom benne, hogy összejön majd, amit szeretnél.
Sub exampleIsProcessRunning() Debug.Print IsProcessRunning("MyProgram.EXE") Debug.Print IsProcessRunning("NOT RUNNING.EXE")
End Sub
Function IsProcessRunning(process As String) Dim objList As Object
Set objList = GetObject("winmgmts:") _ .ExecQuery("select * from win32_process where name='" & process & "'")
If objList.Count > 0 Then IsProcessRunning = True Else IsProcessRunning = False End If
End Function
Ezt elsőre átalakítottam így:
Sub exampleIsProcessRunning() Debug.Print IsProcessRunning("FileZilla.exe") End Sub
Function IsProcessRunning(process As String) Dim objList As Object
Set objList = GetObject("winmgmts:") _ .ExecQuery("select * from win32_process where name='" & process & "'")
If objList.Count = 1 Then AppActivate "FileZilla" Application.Wait Now + TimeValue("00:00:01") Application.SendKeys "proba" Else MsgBox "A FileZilla nem fut" End If
End Function
Ez így tökéletesen érzékelte :-)
Nálam a makró egyéb dolgokat is csinál az elején, ezért úgy terveztem, hogy amikor indítom a makrót, akkor abból indul a FileZilla is, majd (amíg indul a FileZilla), addig megcsinálja az egyéb feladatot (egy mappa létrehozást és másolást), majd átfókuszál a FileZillára és beírja oda, amit kell.
Ezért betettem ennek az elejére, hogy indítsa a FileZillát:
Sub exampleIsProcessRunning()
Dim WshShell As String WshShell = Shell("E:FileZillaPortableFileZillaPortable.exe", vbMinimizedFocus)
Debug.Print IsProcessRunning("FileZilla.exe") End Sub
Function IsProcessRunning(process As String) Dim objList As Object
Set objList = GetObject("winmgmts:") _ .ExecQuery("select * from win32_process where name='" & process & "'")
If objList.Count = 1 Then AppActivate "FileZilla" Application.Wait Now + TimeValue("00:00:01") Application.SendKeys "proba" Else MsgBox "A FileZilla nem fut" End If
End Function
Ez így indította is, de lassabban indult a FileZilla, mint ahogy a makró a checkrészhez ért, ezért kiírta, hogy nem fut.
Akkor arra gondoltam, hogy mi lenne, ha az Else ágnál tennék egy Goto-t, és újra ellenőrizné a FileZilla futását.
Sub exampleIsProcessRunning()
Dim WshShell As String WshShell = Shell("E:FileZillaPortableFileZillaPortable.exe", vbMinimizedFocus)
Debug.Print IsProcessRunning("FileZilla.exe") End Sub
Function IsProcessRunning(process As String) Dim objList As Object
Set objList = GetObject("winmgmts:") _ .ExecQuery("select * from win32_process where name='" & process & "'")
ujra:
If objList.Count = 1 Then AppActivate "FileZilla" Application.Wait Now + TimeValue("00:00:01") Application.SendKeys "proba" Else
GoTo ujra End If
End Function
A FileZillát indította, majd lefagyott az Excel :-)
Function ProgramFut(ProgNeve As String) As Boolean
Dim prog As Object
On Error Resume Next
Set prog = GetObject(ProgNeve)
If Not prog Is Nothing Then
ProgramFut = True
End If
On Error GoTo 0
End Function
A Word.Application-al jól dolgozik. Egy saját xlsm fájllal szintén - a pontos elérési út és fájlnév megadásával szintén érzékelte, hogy meg van-e nyitva.
Probálkoztam egy CProgramfájlok(x86) könyvtárban lévő programmal, de ott nem érzékelte, ho.gy meg van nyitva. De az is lehet, hogy az én hibám volt, mert nem jól alkalmaztam a GetObject függvényt
Teljesen exel analfabéta vagyok és nem bírok erre megoldást találni. Egy ilyen formátumú adathalmazból hogyan készíthető egyszerűen dátum vonal diagram külön minden gyümölcsre?
Tehát 3 darab diagram, külön az almára, körtére és eperre, amelyek mutatják vizuálisan, hogy melyik napokon mennyi ment el belőle.
Az egymásba ágyazott ha függvény működik, csak próbáltam extra cellák nélkül megoldani, de akkor ez sajnos nem nagyon megy. Nem baj, így is jó lesz. Köszönöm a segítséget.
Select Case LCase(Left(RowColumn, 1)) 'If they put in 'row' or column instead of 'r' or 'c'. Case "c" LastRowColumn = sht.Cells.Find("*", LookIn:=xlFormulas, SearchOrder:=xlByColumns, _ SearchDirection:=xlPrevious).Column Case "r" LastRowColumn = sht.Cells.Find("*", LookIn:=xlFormulas, SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious).Row Case Else LastRowColumn = 1 End Select
Az Excel makróm leállt valami egész rejtélyes rendszerhibával (Nem mélyedtem el a hibaüzenetben, mert valami számomra értelmezhetetlen hibára utalt, ami nem a programomból adódik). Viszont nemcsak leállt, hanem kikapcsolt az Excel, majd újraindult megnyitva a munkafüzetet.
Nem bíztam ebben, és kértem a nem mentett fájlok megmutatását, amit meg is kaptam, és a mentési idő egy néhány perccel korábbi állapot volt. Ezt mentettem új néven, de megőriztem az utoljára kb. fél órával korábbi fájlt.
A frissen használt és a korábbi munkafüzet aktuális Useform kódjait Word-ben lementetten, összehasonlítottam, és nem láttam eltérést.
Erről jutott eszembe, hogy létezik-e olyan szoftver, amelyik munkafüzetek kódjait összehasonlítja? Mert aggódom, hogy a leállás nem okozott-e máshol is zavart, de ehhez kényelmesebb lenne az összehasonlítás egyben, mint az egyes Formok, modulok páronkénti összenézése.
1. Amikor egy hosszabb szöveg kerül egy cellába, mivel nem lehet cellán belül oldalt törést csinálni nyomtatáskor (és pdf létrehozáskor), a cellák egyesítése funkciót használom. Csakhogy nem tudom hogyan állítsam be azt hogy egy-egy cella magassága pont egy sor töréshelyén legyen. Ez azért lenne fontos hogy minden oldalt jó lenne teljesen kitölteni, így a sok szöveges cellát pont az oldal alján szeretném megtörni.
2. Bármilyen fotót vagy objektumot illesztek be Excel-be, akkor lesz nyomtatáskor (és pdf létrehozáskor) jó a szélesség-magasság arány (magyarul marad egy kör, kör alakú) ha a magasságot ~4% -al nagyobbra teszem mint a szélességet. Nem tudom miért csinálja...
A for-next ciklusban az egyes lapokon belül megkereshetnéd a fejezetek címeit – gondolom, ezek másik oszlopban vannak, mint a tartalmuk –, és ezeket is beírathatnád a tartalomjegyzék következő oszlopába.
A tart.jegyzék soraihoz felvehetnél egy változót, amit minden fő- és alcím beírása után növelnél eggyel.
A helyzet az, hogy nekem az egyetem óta (és az jó régen volt) egyáltalán nem kellett térgeometriával foglalkoznom, így most próbálom újra beleélni magamat a témába, de azzal, hogy a Földön hogy lehet "helymeghatározni", végképp soha nem foglalkoztam. Most kezdem egyáltalán azt komolyan megérteni, mi is az a szélességi és hosszúsági fok ..:)
Így aztán nem is nagyon akartam egy pasi problémáját - ezt a Google Eath - Excel kapcsolatot - megoldani, de el kezdett érdekelni ahogy belenéztem és most már bosszant, hogy nem tudom a "körömet" megcsinálni :)
Na megyek, beleásom magam ebbe a problémakörbe és majd jövök, hogy sikerült-e megoldani a kérdést
Az a helyzet, hogy engem spec. piszkosul érdekel a térgeometria. Ami tapasztalatom van, az ms sql-es téma. Nyilván ez ráfed a táblázatkezelőkre is nagyjából. Egy dologban viszont nem: Mssql-ben létezik geometrikus adattípus, míg excelben ez nincs támogatva.
Ez az adattípus lehet kiterített (geometrikus) és gömb (geografikus) tartalmazhat szinte mindent ami megvan a GE-ben vízrajz, domborzat, települések, határvonalak stb...
Én ezeket Arcgis + PostgreSQL-el szedtem fel, viszont csak Magyarországot. Ezek az adatok sql szerverre feltölthetőek, rétegezhetőek joinokkal. A térkép részletességétől függően komoly rekordszám keletkezik, főleg a poligonok miatt. Ez egy világtérképre....
Amit valósan csináltam is ezekkel: Megyehatárokon (poligonok) belül egyetlen metódussal kilistázható az összes benne lévő település, vagy akár a megyehatárokon x km-es közelében lévő település. A lehetőségek száma határtalan. Lehet a térképe kört rajzolni és a kör mentén lévő településeket listázni, vagy bármelyik rétegből bármit.
vmilyen ARCGIS szoftverrel képes e kapcsolatot teremteni azt nem tudom... biztos vagyok benne hogy lehet.
Csak hátha ez a vonal érdekes, azért írtam - és nem okoskodásból. Mellesleg régóta nem is kellett (sajnos) ezzel foglalkoznom
Köszönöm, szuper! Igazából az a problémám, hogy sok dokumentumot készítek (százas nagyságrend), darabaja a tizenvalahánytól a többszáz oldalasig terjed, és mindegyik hasonló felépítésű: hosszabb-rövidebb fejezetekből áll. Szeretnék mindegyikhez egy tartalomjegyzéket, ami fejezetcímeket és oldalszámokat tartalmaz (dokumentumonként melyik fejezet hányadik oldalon kezdődik). Amit EV írt, az ígéretes, de még nem tudtam rájönni, nálam ez hogyan működne, de még töröm a fejem, hátha összejön! Azért köszönöm, hasznos volt ez is :))
Köszönöm, tanulmányozom, de úgy tűnik, ezt is meg kellene "fordítanom", mert ez inkább arra alkalmas, hogy két pont közti távoslágot meghatározzon
Az megy, de nem bírok rájönni, hogyha megfordítom, miért pusztul bele a szögfüggvényekbe, illetve a gyökfüggvénybe. (OK, értem én, hogy ahogy képtetem a koordinátákat előbb-utóbb negatív érték lesz a gyök alatt vagy nem lesz értelmezett az arc sin függvényem de miért?!)
Ugyanis azt próbáltam csinálni, hogy adott a pont szélességi és hosszúsági foka és kiszámíttatom, hogy mondjuk ugyanazon a széleségi körön hol van a sugárnyi távolságra lévő pont. Eddig megy, tehát megvan a kör egy pontja.
De mikor innen léptetem visszafelé a hosszúsági fokokat és próbálom kiszámíttatni a hozzá tartozó szélességi fokot, előbb utóbb megdöglik
Egy ideig szépen jönnek elő a kör pontjai,, aztán megdöglik..:(
No mindegy is, végülis nem muszáj ezt nekem megcsinálni, de már nagyon bosszant, hogy nem sikerül
A helyzet rosszabb - én a Földre szeretnék egy kört rajzolni; azért írtam hosszúsági és szélességi koordinátákról
Akkor pontosabban:
Írtam egy makró-rendszert, ami egyrészt egy Goolge Earth-ből elmentett fáljból kinyeri az arra rajzolt objektumok koordinátáit
Visszafelé is megcsináltam: egy Excel-táblába beimportált adatokból olyan fájlt állít elő, amit a Google Earth képes értelmezni és az Excel-ben definiált objektumokat (Helyjelző, poligon, útvonal, stb.) megjeleníti a térképen
Az jutott eszembe, milyen jópofa lenne, ha egy adott pontot megadnék Excelben (azt ugye meg tudom jeleníteni a Google Earth térképén) és az algoritmus kiszámolná nekem a "kör-hatású" poligon (sokszög) képét a térképre
(Nem pusztán szórakozás a kérdés - pl. egy adótorony hatási körét lehetne ábrázolni)
Ide, ha behelyettesítesz: (x-48)^2+(y-13)^2=2000^2 Tételezzük fel, hogy az egyik pontod koordinátája, amitől meg akarod nézni a kör másik pontját: P_x=2048 P_y=13
Ettől nézzük meg, hogy mik vannak R távolságra:
(x-2048)^2+(y-13)^2=R^2 Tehát van két ismeretlened és van két egymástól független egyenleted, egyikből kifejezed a másikat és kész is vagy.
Ha P biztos rajta van a körön, akkor 3 lehetőség állhat fenn:
1.) R>2r, akkor nincs a két körnek metszete 2,) R=2r, pontosan egy metszéspont van 3,) R<2r, akkor pontosan két metszéspont van.
Ha ezt makrózni akarod, akkor paraméteresen kell levezetni a képleteket.
Ha pedig P nincs rajta a körön, akkor több eset is lehetséges: 1.) Pontosan egy metszéspont van, ekkor a két kör érinti egymást, kívülről vagy belülről 2.) Két metszéspont van: A körök metszik egymást, szintén kívülről vagy belülről 3.) Nincs metszéspont: A körök nem metszik egymást 4.) Végtelen metszéspont van: A körök szélességi és hosszúsági fokai megegyeznek, valamint a sugaruk is.
u.i.: Ha ezt a földgömbön akarod alkalmazni, akkor oda gömbi (Bolyai) geometria kell, de az kicsit nehezebben emészthető, mint az euklideszi geometria és akkor a fent leírtak nem használhatóak.
Egy kérdés - hátha akad valaki, aki tud mondani valami használható ötletet rá.
OK, nem feltétlenül Excel-probléma, de én akármiért is Excel makróval szeretném megoldani (bár végülis tökmindegy milyen programnyelvről beszélünk ezesetben)
Hogy tudnám meghatározni egy kör szélességi és hosszúsági fokait a középpontja és a sugara ismeretében?
Magyarán adott a kör középpontjának szélességi (pl. 48) és hosszúsági foka (pl. 13) és mondjuk 2000 km a sugara és én szeretném a kör pontjait meghatározni.
Két pont távolságával semmi gondom - van rá formula (Haversine); remekül működik, de a "megfordítása" - amikor a távolság ismert és egy ponttól egy adott távolságra lévő másik pont koordinátáját kellene kiszámolnom, az valahogy semmiképpen nem működik nekem.
Előre is köszönet, ha valaki tud egy használható tippet mondani
Éppen ezzel a dokumentum adott pontjára hivatkozó link beszúrásával próbálkoztam, és Excel-ben működik is, de egyrészt pdf-be exportálva nem élnek a linkek, másrészt nem tudtam az oldalszámokat megadni. Most azon töprengek, hogy makróval le kellene kérdezzem minden munkalap első oldalának oldalszámát, és makró írná be az oldalszámokat (így persze nem lenne intelligens, automatikusan frissülő megoldás, bár azt a makrót a legvégén, pdf-esítés előtt futtatnám), de úgy tűnik, ezzel nem boldogulok. Kicsit még kísérletezek...
Olyan dokumentációt készítek, ahol az adatok munkalapokon vannak (több lapon, mert különböző jellegű adatok, részben rövid szöveges infók, de alapvetően táblázatok). Eddig egyetlen Word file-ba másoltam mindent, de szeretném megspórolni az Excel-Word átmásolást (leginkább azért, mert Excel-ben sokkal kényelmesebb kezelni, rendezgetni az adatokat, és a Word-ben újra kell formázni az Excel-ből áthozott adatokat). A Word azért került képbe, mert a dokumentum elejére teszek egy tartalomjegyzéket, amit Excel-ben nem tudom, lehet-e, és ha igen, akkor hogyan?
Ehhez kérek tőletek ötletet, tanácsot, hogy lehet-e Excel-ben olyan dokumentumot létrehozni, amiben van tartalomjegyzék? Minden fejezet külön munkalapon van, és egy újabb lapon tartalomjegyzék, mely minden más lap mondjuk első sorát behivatkozza egy tartalomjegyzékbe? Végül egy pdf file-ba exportálok (a munkalapokon egységes fejléc-lábléc, mindenhol vannak oldalszámok), és lenne egy tartalomjegyzék címekkel, oldalszámokkal. Köszönöm előre is!
Szia! Külső fájlból adatérvényesítési listát nem tudsz hivatkozni. Ezt a listát abban a munkafüzetben kell elhelyezni, ahol használni szeretnéd.
A kiválasztás után a VLOOKUP (VKERES) függvénnyel tudod megoldani a keresést. Célszerű első alkalommal úgy megtenni, hogy mindkét munkafüzet nyitva van és egérrel jelölöd ki a tartományokat.
Utána már működhet akkor is, ha csak a cél munkafüzet van nyitva.
Kèt különböző mappában lèvő excel munkafüzetet szeretnèk összekapcsolni(munka1 ès munka2) úgy, hogy a munka1 táblázat G4 cellában egy legördülő listát hozhassak lètre a munka2 táblázat A oszlopának soraiból, ès ha kiválasztok egy elemet a listából a kkor a munka1 táblázat H4 cellájában a munka2 B oszlop a kiválasztott listaelem szerinti sorának adatai jelenjenek meg.
Mivel a WorksheetFunction.NumberValue nem működik nekem, ezért kerülő megoldást találtam WorksheetFunction.NumberValue helyett. Az adataim olyan szoftverből vannak, ami közvetlenül Excel file-ba tolja az eredményeket, de sajnos nem natív számokként a számértékeket, hanem space-ekkel tabulálgatva, hogy balra igazított formátumban egymás alá kerüljenek az egy oszlopban lévő számok (tehát pl. ' 0.01' az egyik cellába, következő sorban ' -2.84', majd '12.96' és így tovább, szörnyű)! De legalább következetesen szövegként jönnek át az értékek, nem lesznek dátum formátumúak (legalábbis remélem, tengersok adat van, belepörgettem, úgy tűnik, nem lett dátum értékem), mert az lenne a csúcs, azokból visszahozni az eredeti számokat...
Ha csak cserélgetem a '.'-ot ','-re, az még nem jó (szövegkét tárolt szál lett az eredmény, ez is valami, de nem az igazi):
On Error Resume Next Rest.Cells(rowRest, colRest) = WorksheetFunction.Substitute(Trim(Rest.Cells(rowRest, colRest)), ".", ",") On Error GoTo 0
Így viszont jó: Dim val As Double On Error Resume Next val = WorksheetFunction.Substitute(Trim(Rest.Cells(rowRest, colRest)), ".", ",") If Err = 0 Then Rest.Cells(rowRest, colRest) = val End If On Error GoTo 0
Most reggel látom az 1-gyel szorzós trükköt, és működik :)))) Köszönöm!
Ez lett tehát: On Error Resume Next Rest.Cells(rowRest, colRest) = WorksheetFunction.Substitute(Trim(Rest.Cells(rowRest, colRest)), ".", ",") * 1 On Error GoTo 0
- ennek a számnak a felhasználásával létrehozok mappát, illetve ebbe belemásolom egy másik tartalmát
- elindítom a FileZilla programot
- Sendkeys-szel a bekért szám felhasználásával generálok egy IP-címet, majd ezzel és felhasználónévvel és jelszóval belépek egy "felületre"
- továbblépek egy megadott mappába
A gondom, hogy időnként a FileZilla lassan indul, és eldobálja szanaszét a Sendkeys-eket a makró. Kérdéseim:
1. Mivel lehet megváratni a FileZilla teljes megnyitását, tehát amikor már készen fogadja a bevitelt?
2 Van-e esetleg erre más ötlet?
3. Arra is gondoltam, hogy vbs-sel vagy bat-tal előre megnyitom a FileZillát (és ezt az xlsm-met), és utána hozom fókuszba a FileZillát, de időnként ott is sokáig barkácsol, tehát tudni kellene, hogy megnyílt-e már teljesen. No, de hogyan?
Előre is köszönöm :-)
Private Sub start_Click() Dim WshShell As Variant Dim pszam Dim mappanev Dim hossz Dim innen As String Dim ide As String Dim fso As Object Dim datum
If tb1 <> "" Then pszam = "2" & tb1 If Left(tb1, 1) = 1 Then hossz = "hosszu" If Left(tb1, 1) = 2 Then hossz = "rovid" datum = Year(Date) & "." & Right("0" & Month(Date), 2) & "." & Right("0" & Day(Date), 2) mappanev = datum & "_" & pszam & "_" & "mentes" innen = "C:Usersvorosl2Documentspr_mappa" & hossz ide = "C:Usersvorosl2Desktop" & mappanev
MkDir ide mappadone.Visible = True Set fso = CreateObject("Scripting.FileSystemObject") fso.CopyFolder Source:=innen, Destination:=ide mappardone.Visible = True
WshShell = Shell("C:Usersvorosl2DocumentsFileZillaPortableFileZillaPortable.exe", vbMaximizedFocus) Run WshShell Application.Wait Now + TimeValue("00:00:02") Application.SendKeys "10.33." Application.SendKeys tb1 Application.SendKeys ".15" Application.SendKeys "{TAB}" Application.Wait Now + TimeValue("00:00:01") Application.SendKeys "felh" Application.SendKeys "{TAB}" Application.Wait Now + TimeValue("00:00:01") Application.SendKeys "jelsz" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "~" Application.Wait Now + TimeValue("00:00:02") Application.SendKeys "~" Application.Wait Now + TimeValue("00:00:03") Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys ide Application.SendKeys "~" Application.SendKeys "{TAB}" Application.SendKeys "{RIGHT}" End If
Arra azonban oda kell figyelni, hogy a rövid dátumot is jelenthető kifejezést az Excel automatikusan dátumnak "képzeli" és át is alakítja -> 9.15 azonmód szeptember 15. lesz és ebből csak nagy nehézségek árán lehet a 9.15-öt visszakapni.
Abban szeretnék segítséget kérni, hogy szövegként tárolt számokat hogyan lehetne makróval számmá alakítani? Tehát ilyesmi van a cellában: -0.012, amit szövegként értelmez az Excel (a területi beállítások szerint a '.' nem tizdesvessző), és a cél az lenne, hogy ez az érték -0,012 szám legyen. Lecseréltem a '.' jelet ','-re, de ez nem igazán jó, szöveg maradt a szám. Van egy WorksheetFunction.NumberValue függvény, de ez mintha nem működne (vagy nem értem, hogyan kellene működjön).
Ezt próbáltam: Munkalap.Cells(1, 1) = WorksheetFunction.NumberValue("0.01", ".", "")
A 'Munkalap' nevű worksheet-en az 1,1 cellában 0,01 kellene megjelenjen, ehelyett "Run-time error 1004: WorksheetFunction osztály NumberValue tulajdonsága nem érhető el" üzenetet kapok. Hogyen kell ezt megoldani? Köszönöm előre is!
Egy kis segítségre lenne szükségem, mint sokaknak itt a fórumon. :)
Szeretnék csinálni egy táblázatot, amelyben tudjuk vezetni részletesen a kiadásainkat, bevételeinket. Igyekeztem rátalálni egy hasonló létező táblázatra, azonban nem jártam sikerrel.
A lényegi része aminek a megoldásával bajlódok az lenne, hogy egy háztartásban előforduló pénzmozgást szeretnék részletesen vezetni. A számlák egyes elemeit is be szeretném vinni a táblázatba, ami igaz az igaz, sok munkával jár, de egyelőre még érzek magamban annyi motivációt hogy tudni fogom vezetni, aztán majd az idő eldönti hogy ez a lelkesedés meddig fog tartani. Az alábbi képeken látható a lényegi rész. Szeretném feltüntetni azt hogy mennyibe kerülnek az egyes elemek azon a bizonyos napon, és melyik boltban vásároltam ezeket a termékeket. Eddig még okés is a dolog, a 2. képen látható hogy csináltam 2 csoportot, melyben el tudom tüntetni a számlán szereplő elemeket ha azt nem szeretném látni, és meg tudom jeleníteni ha éppen kellene. A csillaggal jelölt mezőben pedig egy hiperlink található, amiben hozzáadom a képet a valós számláról. Ez eddig rendben is van, csak a szűrésnél adódik a probléma, ha pl lesz 1 hosszú listám pár hónapra előre, és rá szeretnék szűrni hogy a Lidlben vásárolt kenyér mikor mennyibe került akkor ez így nem működik, mivel a Boltok oszlopban én csak a fő sorba írtam be a bolt nevét, és az alatta található sorokban nem szeretném megismételni ezt, mivel világos hogy ez egy számlához tartozik amit ebben a boltban vásároltam. "Merge" funkciót sem engedi az alattalévő üres helyekkel, mert ez egy táblázattá alakított terület. Tudom hogy ez nem olyan egetrengető probléma, de nagyon kiváncsi vagyok rá hogy ti hogy oldanátok meg ezt, akár egy teljesen más irányú elgondolás is érdekelne, nekem így elsőre az alap excel tudásommal ennyire futotta. :)
1. Egy formról feltöltök egy táblázatot (korábban kész, remekül működik)
2. Most kitaláltam, hogy az utolsó lépésként a táblázat adataiból hozzunk létre
2a Egy mappát a saját gépen
2b Egy mappát a szerveren
2c Egy Excel sablont mentsünk a saját gép létrehozott mappájába
2d Egy Word sablon mentsünk a saját gép létrehozott mappájába.
Ezt a kódot írtam, de a Word mentésénél megáll. Addig mindent szépen megcsinál. Érdekes, hogy a Word sablon megnyitásánál nem "dokumentum1"-ként nyitja meg, hanem a sablon neveként.
Sub mappa_keszito_Click()
Dim fso, adatmappa, esemappa, adatnev, esenev, usor, m1, docnev, xlsnev As String Dim worddoc, wordapp
Set fso = CreateObject("Scripting.FileSystemObject") Set m1 = ActiveWorkbook.Sheets("Eseményes") Set wordapp = CreateObject("Word.Application")
Az aktív ablak printscreent létre lehetne hozni billentyűkombinációval, ám azzal csak a vágólapra kerül. Azért, hogy egyből az egyik Office programba kerüljön, kell a Picpic. Keresgéltem, hogy ezek nélkül vbs-ben meg lehetne-e oldani, de nem találtam rá megoldást.
Ha manuálisan nyomnám a printscreent, akkor manuálisan kellene megnyitni a Wordot, és oda beilleszteni. Ott a kép méretezését, keretet már meg tudnám makróval oldani, de míg az Excelben két pipa lehetőség a margóknál a középre igazítás, a Wordnél a képet még a szöveg elé kellene hozni, és ott igazítgatni.
Szerintem a két program közül egyikre sincs szükség. Elég hozzá például egy Word is. De ha azzal nem tudsz elég szép keretet tenni a kép köré, akkor ott van a Powerpoint. Abban biztosan meg lehet formálni, ahogy akarod, és el lehet menteni PDF-be.
(Én ahhoz használok Excelt, hogy adott méretű cetliket tudjak szerkeszteni névtáblákhoz. Nyilván erre is alkalmas lenne a Word, de nekem egyszerűbb volt egyszer kikísérletezni, hogy mekkora cellák felelnek meg a kívánt méretnek, és azokba beírni a kívánt szöveget. Viszont nem jutna eszembe, hogy egy képet pont Excelben próbáljak meg méretezni, és hasonlók.)
ActiveSheet.Shapes(1).Width = 566.9291338583 With ActiveSheet.Shapes(1).Line .Visible = msoTrue .ForeColor.RGB = RGB(0, 0, 0) .Transparency = 0 End With With ActiveSheet.Shapes(1).Line .Visible = msoTrue .Weight = 3 End With
Ezzel remekül tudtam méretezni, keretezni. Köszönöm :-)
Valóban, ha kijelöltem a képet, akkor indítható volt a makrórögzítő. Olyankor Selection.ShapeRange volt a neve, de az általad megadott nevet használva nem kellett kijelölnöm sem.
A VBA nézetben megtaláltam az "Objektumokat", de ott nem találtam a tulajdonságokat.
A beillesztett képet az aktív munkalapon kétféleképpen is megtalálhatod:
Shape illetve Picture objektumként, mindkettő gyűjteményben van, ha egy db van belőle akkor is. Az eltérés az, hogy másképpen érhetőek el a tulajdonságok.
Tehát az objektumod vagy set sh=Activesheet.Shapes(1) vagy set pict=Activesheet.Pictures(1) módon érhető el (sh és pict szabadon választott változónév).
A VBA nézet Objektum tallózójában a Shape tekintetében megtalálod a tulajdonságokat, a Picture nincs benne.
Egyébként szerintem ha kijelölöd a beimportált képet és utána indítod a makrórögzítőt, akkor működik pl. a jobb egérgombos parancs.
Hogyan tudnám a beillesztett képet módosítani? Ha makrórögzítéssel próbálkozom, akkor amint elindítom a rögzítést, a képpel nem tudok semmit kezdeni, nem lesz aktív. Hogyan tudom "megcímezni" a beillesztett képet. Keretet tennék rá, a méretét növelném.
Most már minden működik, ahogy kell. Sejtettem, hogy valami beállítás probléma lesz, mert már egy harmadik gépen is kipróbáltam, ahol szintén jól működött.
És igen, az oldalszámoknál is jelentkezett a probléma csak eddig nem tűnt fel, amiből látszik, mennyit használom a wordöt ezen a gépen :)
Mindenkinek nagyon köszönöm a segítő hozzáállását!
1. Az egy nappal ezelőtti leveledből (34399) az az egyetlen probléma, hogy a MERGEFIELD típusú mezőkódokat mutatja. Egyéb hiba nincs, hiszen azt írod: "Ugyanakkor a Levelezés menüpontban Befejezés/egyesítés (Mind) parancsra már mutatja a számokat."
Azt már meg sem merem kérdezni, hogy csak a körlevélben van így, vagy pl. az oldalszámoknál is? Mert lehet, hogy a Word beállításaiban van átállítva a mezőkódok megjelenítése a mezőérték helyett. Akkor pedig megnyitáskor ez az alapértelmezett.
Azért van egy-két dolog, amit nem értek a hibaleírásodból.
1. Az egy nappal ezelőtti leveledből (34399) az az egyetlen probléma, hogy a MERGEFIELD típusú mezőkódokat mutatja. Egyéb hiba nincs, hiszen azt írod: "Ugyanakkor a Levelezés menüpontban Befejezés/egyesítés (Mind) parancsra már mutatja a számokat."
2. Kicsit később (30404) azt írod, hogy "Az Eredmény megjelenítésére nem reagál semmit". Ez nem világos, hiszen ennek ugyanazt kell adni azon az egyetlen lapon, amit a befejezés és egyesítés. Nehezen tudom elhinni, hogy az egyik jól működik, a másik meg nem. Biztos, hogy ez a helyzet?
3. Ugyanitt azt írod: "A Mezőkód váltást is megcsináltam, végrehajtotta (a Mezőkód váltás azóta nem is látszik a jobb klikkben), de a helyzet nem változott"
Namármost, ha a Mezőkód váltás azóta nem is látszik a jobb klikkben, akkor valami nagy baj van. Ennek oda-vissza működnie kell. Biztos, hogy egy mezőkód fölött volt az egér, amikor a jobb klikket nyomtad?
Végül: "de a helyzet nem változott". Mi is akkor most a helyzet pontosan?
Ha biztos, hogy nem adatszerkezeti probléma okozza a jelenséget, akkor csak elállítódhatott a megjelenítés.
Jelöld ki azt a területet, amely az érintett Adatmezőket tartalmazza, majd a kijelölt terület fölött kattints az egér jobb gombjára, és a megjelenő listában válaszd a Mezőkódok - váltásra!
Tudom nem közvetlenül Excel probléma, de remélem tudja valaki a megoldást...
Van egy körlevelem, aminek - a hozzátartozó excel forrástáblával együtt - megváltozott a helye (másik gép/meghajtó/útvonal)
Természetesen az első indításkor beállítottam az új útvonalat, de a doc megnyitása után (miután rákérdez a frissítésre) nem tölti ki számokkal a táblát, hanem a Mergefield "mezőnév" formátum jelenik meg minden sorban.
Ugyanakkor a Levelezés menüpontban Befejezés/egyesítés (Mind) parancsra már mutatja a számokat.
Mit kell még beállítani, hogy doc megnyitása után közvetlenül már mutassa a forrásadatokat a levélben?
Elegáns! (És a lap alján még a hexeditoros is ott van! Éreztem, hogy megint csak a langyosvízet találtam fel. De nem árt az agytornázás, kevésbé hülyül el az ember...)
Mutatja az Openoffice is, csak meg kellett találnom:
De ez nagyon aprólékos, sok munka lenne, darabokból újra összerakni. Gondolkodtam, mi lehet a megoldás. Arra jutottam, hogy a jelszó csak "porhintés", mivel az Openoffice figyelmen kívül hagyja, és ott van minden. Csak egy jelző az Excel számára. Próbálkoztam, volt is némi eredmény (2007-es Excel). De ez az a rész, amit ha közzéteszek, esetleg BTK-s, így azzal aludtam el, hogy "csönd".
Ez a képlet húzható lefelé és jobbra is. A jobbra húzásnál most "Nincs több" értéket ír a cellába, amikor már nem talál az azonosítóhoz újabb értéket. Ha egyszerre húzod le, akkor nyilván több oszlopban is meg fog jelenni. Ezt csak szemléltetésül írtam be, helyette tehetsz üres szöveget ("") és akkor nem fog látszani semmi.
A "TRANSZPONÁLÁS" függvényben szeretném a segítségeteket kérni.
Adott egy táblázat mely két oszlopból áll. Első egy egyedi terméknév. Ez ismétlődik többször, és mellette a hozzá tartozó adatok vannak, de minden ismétlődésnél más az adat. Ezeket az adatokat kellene úgy áthelyezni oszlopokból sorokba, hogy az egyedi terméknév mellett megtalálható legyen az összes adat. Az érthetőség kedvéért készítettem két egyszerű mintatáblát. Egy előtte, és utána nézet. Csak a valóságban több ezer sorról van szó, így kézzel másol, beilleszt transzponálva nem jön szóba. :-(
Ugye létezik függvény, de nem jöttem rá, hogyan tudnám neki megadni az a tartományokat...
Tud magyarul. Tapasztalatom nulla, csak kaptam 5 éve, "Ha adnak fogadd el, ha ütnek szaladj el", és az MS offiszom 2007-es, ez újabb. Aztán úgy alakult, hogy (már akkor is) ritkán Excelezek, nem tanultam meg.
Egy Excel 2010-es meglehetősen összetett munkafüzetemet (természetesen xlsm) védtem le hozzá jelszóval. A gépem 64 bites, az Excel 32. A legelső válaszoló kódját másoltam ki egy másik munkafüzetbe, és tökéletes munkát végzett.
Ilyesmi érdekel engem is. Kipróbáltam, levédtem jelszóval kódomat. Gondoltam valamire, amivel ki tudom cselezni az xlsx védelem makró tiltását. Bevált. Némi korlátozással, de tudom olvasni a kódot.
Nincs valami mintafájlod, amit nem féltesz, és amivel ellenőrizhetném az elképzelésem alkalmazhatóságát?
Sok évi munkám van benne, rengeteg makrót tartalmaz és nem szeretném majd, hogy a tudtomon kívül minden fizetség nélkül tovább használják.
Végül is a segítségeddel sikerült a fájl törlése.
Lehet még jobb megoldás is, hogy minden feltűnés nélkül végig fut az éppen futtatott makró és mikor bezárják akkor törlődik, ... és ekkor fogják majd a segítségemet kérni:) mert ugye ma már mit adnak ingyen?
Ahogy nyitott munkafüzetet sem tudsz törölni - nem tud öngyilkosságot elkövetni, mert aktív. Máshonnan kell futtatni és a törlendő munkafüzet nem lehet aktív.
Én legalábbi nem tudok ilyet, akkor sem, hogy ha itt azt írják, hogy működik: (Persze lehet hogy rosszul értelmezek valamit)
Szia, előre is köszi a segítségedet. Valami miatt nem akarja törölni.
Ez a sub:
Option Explicit Public munkafuzet As String
Private Sub UserForm_Activate() Dim evszam As Integer
munkafuzet = Workbooks(ActiveWorkbook.Name).Name 'eltároljuk a munkafuzet nevét Sheets("Alap").Cells(1, 150) = munkafuzet evszam = 2019 If Year(Date) <> evszam Then MsgBox ("Nem futtatható a makró!")
On Error GoTo ErrorHandler With ActiveWorkbook If .Path <> "" Then .Saved = True .ChangeFileAccess xlReadOnly Kill ActiveWorkbook.FullName End If End With Exit Sub
ErrorHandler: MsgBox "Fail to delete file: " & ActiveWorkbook.FullName Exit Sub
'Set fso = CreateObject("Scripting.FileSystemObject") 'set file = fso.GetFile(munkafuzet) 'file.Delete.Force = True' End If
Abban szeretném a segítségetek kérni, hogy a makró futtatása során a makrót tartalmazó excelt lehet úgy törölni, hogy még a lomtárból se lehessen visszaállítani?
Ezt nem tudtam. Lehet, hogy ez volt az én esetemben is. Annál is inkább, mert nem szoktam használni az előnézetet, de akkor megtettem, hogy biztos legyek a dolgomban. Nahát ennyire sikerült:-)))
Akkor történik ilyen, ha az "Előnézet"-re nyomsz, akkor lenyeli az egyiket, visszakerülsz a "Válasz"-ba, akkor már csak egy van, amit a küldéskor tüntet el.
Mert szöveget kellene összehasonlítani és azok nem egyforma hosszúak. Arra emlékeztem, hogy Feltételes formázás - Ismétlődő értékek, de pl. 5 karakterig nézze a sorokat . pl.: Szilágyi az legyen egyenlő Szilágyszegivel. Két utcanévlistát kellene összehasonlítni de egyenként hosszú lenne
Nemrég jártam úgy, hogy a duplát is elnyelte. Valahonnan benne volt a stringben egy, én hozzátettem egy másikat, és mindkettőt elnyelte. Szerintem itt is valami ilyesmi történhetett. Hiszen Eredő Vektor próbálta újra, és mégsem sikerült.
Egyébként ezzel a módszerrel remekül lehet splittelni, bármilyen szeparátort meg lehet adni cellából neki. Így ezzel meg lehet spórolni a vba split függvényét ha makrómentes megoldás kell.
4.0-tól létezik. Mivel vba csak 5.0-tól volt ezért excel 4.0 makrófüggvényeket használtak helyette. A kompatibilitás miatt (is) máig meg is tartották - nagyon helyesen. Ne keresd a függvénylistában. Ha macrosheet-et nyitsz, ott megtalálod angolul.
Sima munkalapon is használható, de csak névadással.
tömbképlet, tehát ctrl+shift+enterrel kell bevinni!
persze a {12345678910111213141516171819202122232425262728293031} helyett lett megadni egy olyan tartományt is, ahol ugyanez a sorozat szerepel. (ez jelenleg egy tömbkonstans)
Tételezzük fel, hogy az A oszlopban vannak a számok.
1. lépés
Kijelölöd az A oszlopot. Adatok - szövegből oszlopok - tagolt - tovább - határoló jelnek bejelölöd a szóközt - tovább - Rendeltetési hely: C1 cella
2. lépés
Soronként kijelölöd
Először a C1-től az adatok végéig - Adatok - rendezés - folytatja az aktuális kijelöléssel - beállítások - balról jobbra - szint 1.sor Ok.
A további soroknál csak az aktuális kijelölést kell választanod és utána automatikusan jön a többi, csak ok. kell rá.
Ezzel megtörténik a sorba rendezés. Már "csak" össze kell fűzni.
3. lépés
A leghosszabb sor után 1 oszlopot kihagysz. Nálam az N oszlop következett így. Az N1 cellába a következő képlet került:
=C1 & " " & O1 (ha nem az N oszlopban kezded, akkor O1 helyett a következő oszlop legyen). Ezt végighúzod az első soron, addig, amíg a végén üres cellát kapsz.
A képlet lehúzható az N - X oszlopon - a leghosszabb sornak megfelelően. Ezzel az N oszlopban megkapod a rendezett számokat, szóközzel összefűzve.
4. lépés
B1 cella képlete: =N1 Ha nem itt kezdődött az előző lépésed, akkor annak a cellának a címét írd, ahol kezdődött.
5. lépés:
B oszlop kijelölése - másolás - irányított beillesztés értéket.
6. lépés:
C oszloptól minden adat törölhető a végéig.
Külön figyelmet érdemel a rendezés, mert azt csak soronkénti kijelöléssel szabad megcsinálni.
Eredmény (ahol látod még a segédek elhelyezkedését is):
Adott egy probléma, van egy cella amiben szóközzel elválasztva 1 illetve 2 jegyű számok vannak (persze valójában ez egy szöveg ami csak számokat tartalmaz) pl: A1 cella tartalma: 27 28 1 15 29 2 16 30 3 17 Azt szeretném elérni, hogy B1 cellába ez sorba rendezve kerüljön át tehát B1 cella tartalma: 1 2 3 15 16 17 27 28 29 30 ez legyen. Nem tudom valakinek van e ötlete akár egymásba ágyazott függvényekkel akár scriptel erre valami megvalósítást.
sok ilyen cella van egymás alatt és mindegyiket ilyen módon szeretném rendezni. ráadásul ami bonyolítja a dolgot, hogy a számok amikből a cella tartalma áll még darabszámra sem egyenlő, van olyan cella amiben csak 2 szám van van amiben 16 a benne felsorolt számok amúgy 1 és 31 között változnak.
Tudom sokkal egyszerűbb lenne, ha a számok cellánként lennének de itt pont ez a nehézség, hogy egy cellán belüli szövegbe rejtett számokat kellene sorba rendezni és újra egy cellába összefűzni.
Az Excel számtárolási módja miatt lehetséges. Mutasd meg a kétféle szorzás eredményét képen, meg azt is, hogy mit szorzol össze, mi van a két másik cellában.
Kérem szépen segítségetek! Van két cellám és ezt szeretném összeszorozni, de nem pontos összeg jön ki, más munkafüzetből érkezik a két szám cellája (pl. =fo!c5 és =fo!c6, igy szeretném összeszorozni a c5 és c6 cellákat, nem pontos érték van)?!Mi lehet a gond? Ha viszont egy cellában, összeszorzom a két számot, akkor jó! Köszönettel, Laci
A Select akkor szokott hibára futni, amikor olyasmit szelektálsz, ami nem az aktív munkafüzetben és/vagy munkalapon van.
Egyébként a cellatartalmak másoláshoz nem kell Select utasítással kijelölni sem a munkalapot, sem a másolandó tartományt. Ez csak a makrórögzítő szokása.
Átírtam a makródat, ha nem néztem be valamit nagyon, akkor ennek működnie kell.
Sub Helyett() Dim GN As Workbook, GNN As Workbook Dim NS As Long
Set GN = ActiveWorkbook NS = GN.Worksheets.Count
Workbooks.Add Set GNN = ActiveWorkbook
For i = 1 To NS - 9 GN.Worksheets(i + 1).Range("A1:ZZ100").Copy If GNN.Worksheets.Count < i Then GNN.Worksheets.Add after:=GNN.Worksheets(GNN.Worksheets.Count) GNN.Worksheets(i).Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Next Application.CutCopyMode = False End Sub
Próbáld ki, és ha OK, akkor válaszolok az esetleges további kérdéseidre a kóddal kapcsolatban.
nem vagyok egy rutinos makró készítő. A következő hibába futok bele, és nem igazán jövök rá, mit csesztem el...
A feladat célja lenne, hogy egy nagyobb méretű excel file néhány munkalapjának a tartalmát értékként ki kellene másolni munkalaponként egy másik munkafüzetbe. Erre csináltam egy ciklust, ami elvileg végigmenne az eredeti munkafüzet munkalapjain a 2. munkalaptól, illetve az utolsó 8 már nem kell. A 2. munkalapot még szépen ki is másolja, de amikor a 3. munkalap jön, akkor jön a hibaüzenet, hogy worksheet osztály select metódusa hibás. Mit cseszhettem el? Nem túl hosszú a kód, ezért megosztom:
Sub Adatmásolás()
Dim GN As String Dim GNN As String Dim i As Long Dim j As Long Dim OK As Boolean Dim NS As Long
GN = ActiveWorkbook.Name NS = Sheets.Count i = 2 j = 1 OK = False
Workbooks.Add GNN = ActiveWorkbook.Name
Do
Windows(GN).Activate Sheets(i).Select <===Ennél a sornál akad, de először lefut a ciklus Range("A1:ZZ100").Select Selection.Copy Windows(GNN).Activate Sheets(j).Select Cells(1, 1).Select Sheets(j).Paste Range("A1:ZZ100").Select Application.CutCopyMode = False Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False If i > NS - 8 Then OK = True Else Sheets.Add After:=ActiveSheet i = i + 1 j = j + 1 End If
Tehát a HKEY_CURRENT_USERSoftwareMicrosoftVBA7.0Common Dock sorában kell a registry értéket törölni. Majd az Excel az elindítása után újra beállítja az alapértékeket. Ha jól értelmeztem az egyéb kereséseimet, ez a registry elérés verziófüggetlen lehet. Nekem mindenesetre Excel 2010 alatt működött.
És megnéztem, a 4 nem teljes ablakban a Dockable be van kapcsolva, tehát ez olyasmit jelenthet, hogy ezzel rögzíti a helyét a rendszer.
Kösz, de éppen ezek nem működnek úgy, ahogy - szerintem - kellene. Nehezen állíthatók be, és ha látszólag sikerül, kilépés és újranyitás után elvész az egész. A Dockable meg a legrosszabb. Erre emlékeztem régebbről. Egész képtelen dolgokat művel. Nem is tudom, mit jelent. Tudom, hogy "dokkolható", de nem értem, hogy ez mit takar. Nálam széjjelhúzza az adott elemet, aztán alig sikerül visszaállítani.
Valami olyasmi kellene, hogy visszaállíthassam az Excel bizonyos háttérbeli alapbeállításait. Mert telepítés után még jó a VBA képernyő, de ha egyszer elromlott, utólag képtelenségnek tűnik ennek a visszaállítása.
Már másfél órája ezzel szórakozok, ahelyett, hogy az érdemi munkámat csinálnám.
Előre is bocsánat a lámer kérdésért, Excelben szeretnék legfeljebb 3 tizedesjegyre formázni számokat úgy, hogy az utolsó nullák ne jelenjenek meg, tehát pl. 1/2 = 0,5 (és nem 0,500), 1/3 = 0,333, 1/4 = 0,25, 1/5 = 0,2, 1/6 = 0,167, stb... Köszönöm előre is!
szerintem helyénvaló, hogy az indirektben használt külső hivatkozás csak "rányitott" álapotban működik.
Az ok pedig az, hogy az inderikt egy stringet értelmez, aminek nincs (nem is lehet) kapcsolata a fájlrendszerrel. Amíg egy más fgvbe direktbe ágyazott külcső csatolás látja a fájlrendszert, látja az excel is, hogy az egy külső csatolás.
Éppen egy interaktív programot írok sok Userformmal. Egy rossz mozdulattal elrontottam a megszokott VBA képernyőmet, és ezt a képet látom:
Megszoktam egy elrendezését a képernyőnek, ami úgy nézett ki, hogy minden Form és minden munkalap éppen kitölti a Project és Properties ablakoktól jobbra, és az Immediate és Locals ablakok felett lévő területet.
Ezért nem akarom teljes méretre állítani őket.
Próbáltam kézzel egyenként beállítani őket, de nem jegyzi meg a rendszer.
Ráadásul a módosulás applikáció szintű, tehát kihat az összes egyéb makróra is az adott gépen.
Van megoldás a következőkre:
1. Ha észreveszem, hogy egy rossz gombnyomással elállítódott, akkor visszaállítsam a korábbi állapotot. (AZ a baj, hogy ilyenkor hiába nem mentem a fájlt, az elrontott beállítás megmarad)
2. Ha igazítok a képernyő elrendezésen, hogyan tudom rögzíteni az állapotot?
Ami azt illeti, én a Symphonie-vel kezdtem, aztán jött a Quattro (vagy fordítva? ma már nem emlékszem pontosan :) . Azután jött az Excel, sok sok év használattal. De amit kerültem benne, az elsősorban az Indirekt függvény volt. Ennek bizony számolás lassító hatása van, azért, amit Delila is leírt. Van még pár ilyen Volatilis függvény. Ha lehet mindig kerülöm az ilyenek használatát. Ráadásul az Indirekt csak megnyitott fájlokat képes külső hivatkozások során kezelni (ahogyan írtad is).
Majdnem mindig lehet más - gyorsabb - függvényt használni.
Az INDIREKT volatilis függvény, ami azt jelenti, hogy a füzetben bármilyen változást követően frissül, újraszámol. Ehelyett sokkal gyorsabb az INDEX - HOL.VAN páros alkalmazása.
A nagy ugrás a 2003-as és a 2007-es Excel között volt, és a kezelés lényegesen bonyolultabbá vált.
A 2019-es szerintem az internetes megosztás területén nyújt több és komplikáltabb szolgáltatást 2016-nál, persze az adatforrással való szinkronizálás minimális szintjén, ami az ilyen munkát nagyon lelassítja (ld. outsourcing, home office stb.). Persze lehet, hogy az én ismereteim hiányosak, mindössze 35 éve fejlesztek Excel (Quattro, Lotus 1-2-3, dBase) bázison. (Emlékszik-e még valaki az Office 97-re...?)
Szinte kizárólag indirekt függvényeket használok, mert a működése sokkal gyorsabb - kimértem! - a többi kereső függvényénél. (Vajon miért ad hivatkozási hibát frissítéskor, ha nem megnyitott forrásra hivatkozik ellentétben pl. az fkeres - vlookup függvénnyel?)
A magam részéről a témát lezártam, a megmaradt időrabló Copy-Paste problémát majd valamilyen kerülő úton megoldom.
Szia! Köszönöm a segítséget! Ennyire nem értek hozzá megmondom őszintén, de utána nézek és megpróbálom megcsinálni. Ha nagyon nem megy akkor még jelentkezem ha nem baj :D
2. Ugyanez futott korábbi Excel verziókon XLS formátumban; a mostaninál sokkal nagyobb méretben - az XLSX formátum csökkentette le a mostani méretre.
3. Mindkét gépen ugyanazokat nyitom meg.
Kínomban (már az arcomat lekapartam:) ) behívtam egy üres munkafüzetet (Munkafüzet 1), beállítottam rajta a manuális számítást és elmentettem az XLStart-ba. Így - csodák csodája a kérdéses fájl is manuális számítással indult.
Most már csak azt kellene kitalálni, hogy egy Copy-Paste vagy Cut-Paste művelet miért tart kb. 2-3 percig, mikor a beállításokban minden háttér műveletet letiltottam?
Azért ahogy korábbiaknak, a 2019-es verziónak is vannak komoly hiányosságai...
Nem hiszem, hogy a méret lenne az oka. Hogyan van beállítva az adatkapcsolatok frissítése? Automatikus a megnyitáskor?
Másrészt a 11,6 Gb azért elég nagy, érdemes lenne megnézni, mitől lett ekkora. Ctrl + End billentyű kombináció a munkalap utolsó használt cellájára ugrik. Ha ez túl van az általad szükségesnek ítélt tartományon, akkor a felesleges oszlopot, sort töröld.
Rögtön kisebb lesz a munkafüzet mérete.
(Apropó, még egy kérdés: fizikailag ugyanazokat a munkafüzeteket nyitod meg mindkét gépen?)
Ugyanarról a telepítőről lett telepítve, verzió u.a.
Amit írtál a több munkafüzetben beállított számítási metódusról, valóban úgy van. Az applikáció szintű beállítással kapcsolatban kétségeim vannak, mert az Excel indítása után a kérdéses beállítás nem módosítható, csak ha a munkafüzetet behívtam.
Több munkafüzet esetén ezeket egységesen állítottam be manuálisra. A jelenség viszont akkor is fennáll, ha a kérdéses munkafüzetet mentem, majd újra nyitom. Úgy sejtem, hogy a fájl mérete (11,6 GB) okozhat gondot, mert kisebbeknél ilyet nem tapasztaltam. Bár marad a kérdés, hogy a sokkal gyengébb laptopon miért működik a beállítás hibátlanul?
A manuális számítási beállítás nem marad meg az asztali gépen?
A számítási beállítás Excel (applikáció) szintű, nem pedig munkafüzet szintű. Így amennyiben másik munkafüzetekben automatikus számítás van beállítva, az utána megnyitott munkafüzetben is automatikus lesz szerintem.
A számítások időigényét befolyásolja, hogy milyen tartományok vannak beállítva. Egész sorok/oszlopok (pl. A:A)
szerepeltetése a képletekben lényegesen lassítja a számolásokat. Ezeket érdemes kiküszöbölni konkrét tartományok használatával (A1:A20000)
A körbe csatoláson azt értettem, hogy mindhárom fájl adatai forrásai a másiknak, körkörösség nélkül.
A fájlok méret 2 - 9 GB
És még egy érdekesség: Az asztali gépen (64 bites 8 magos proci, ddr4 16GB RAM) mutatkozik a probléma. A gyengébb laptopon ugyanebben a környezetben megmarad a beállítás.
A csatolt képen látható az A, B, C oszlopban nevek, hozzá tartozó módozat és az ár. Ez egy jutalék lista ezért folyamatosan fog bővülni függőlegesen lefelé ahogy telik az év, ezért a nevek ebben a listában többször is benne lesznek.
Szeretném kigyűjteni ebből a listából nevenként és módozatonként az értékeket. Az E, F ,G oszlopba szeretném ezt kimutatni, de úgy hogy egy névhez tartozó módozat összes értékét a G cellákba adja össze vagy nekem az is jó ha adott sorban egymás után kiírja amit talál.
Cél: szeretném tudni, hogy egy adott névhez tartozó biztosítás (módozat) -ra mennyi pénzt kapok összesen.
Excel 2019-en futtatok többek között három fájlt, amelyek körbe csatolódnak. Az egyik 7500 sorból áll, amely frissítése kb. 35-40 sec. Hiába állítom be az átszámolást manuálisra, akkor is számol, és a következő megnyitáskor vissza áll automatikus átszámolásra, így egy egyszerű néhány adatos bevitel 5-10 perc.
Office XP, 2003, 2007 verzióknál ilyen probléma nem volt - bár a mentés előőti újra számolás perces nagyságrendű volt.
Ha tucc angolul, akkor van itt egy tipp, miszerint ha átállítod a munkafüzetet az 1904-es dátumrendszerre, az tudja kezelni a negatív intervallumokat, sőt még össze is adja őket.
Az Excel nem tudja a negatív időt/dátumot kezelni. Ezért az alábbi lehetőségeid vannak:
1. Amit Delila javasolt. Hátránya, hogy nem szám lesz a végeredmény
2. Használd az ABS (abszolut érték) függvényt az eredmény megjelenítésére. A negatív jelleget feltételes formázással emelheted ki (képlet A1>B1). Vagy segédoszlopban az A-B viszony alapján 1 és -1 értéket írsz, Ezzel számolni is fogsz tudni:
3. A C oszlopnál a cellaformátumot állítsd számra - ekkor megjelenik a negatív érték is. Mellette egy segédoszlopba váltsd át időre D képlete =ABS(C), formátum idő. Az összesítést pedig csinálhatod a C oszlop alapján. Vagy fordított sorrendben.
Köszönöm, jól jeleníti meg a keresett értéket, de nem tudom összeadni az oszlopban az értékeket, gondolom a szöveggé átalakítás miatt.....van erre is megoldás? Ez egy havi tábla napi bontásban.
Húzd be értéknek és sornak is azt a mezőt, amiben a rendelések vannak (PO, vagy akármi tartalmú mezők)
Így megkapod, hogy melyikből hány darab van az értékmezőben. A sormezőben pedig megkapod azt, hogy hány darab "egyedi" rendelésed van. (Persze meg kell számolni valamivel utóbbiaknak a darabszámát: pl DARAB() fgv.)
Mondjuk a kérdést úgy tetted fel, mintha ott ülnénk melletted a monitorodat nézve.:))
2019-es megrendeléses adatokból kell készítenem kimutatásokat megrendelés darabszám alapon.
Azonban mivel a rendeléseink több tételt is tartalmaznak, így a ha PIVOT-ba rendezem az adatokat, a rendelés darabszámnál gyakorlatilag éves rendelési tétel darabszámot kapok.
Hogyan tudom ezt a problémát kezelni a PIVOT-ban, vagy az az alap adatoknál függvénnyel?
( én azt néztem meg, ha egy külön oszlopban minden többször szereplő PO számnál csak az elsőre írna 1-et, a többi ua PO számnál 0-át, akkor már működne a kimutatás PIVOT-ban. De ehhez nem tudom a függvényt összerakni :) )
Benne van az üzenetben: "Ez a dokumentum makrókat, ActiveX-vezérlőket, XML nyelvi bővítőcsomagokkal kapcsolatos információkat vagy webösszetevőket tartalmaz. Ezekben szerepelhetnek olyan személyi adatok, melyeket a Dokumentumfigyelő nem távolít el."
A makrókban stb. szereplő személyes (érzékeny) adatokat az Excel dokumentum figyelő szolgáltatása nem tudja eltávolítani.
Tehát, ha nem szeretnéd, hogy ilyen adatok mentésre kerüljenek a munkafüzettel, azokat neked kell kézzel kigyomlálni ezekről a helyekről. Ha ilyen adatok nincsenek, akkor bátran hagyd a figyelmeztetést figyelmen kívül.
Meg tudnátok mondani, hogy tudom megtalálni a probléma forrását a következő üzenetnél?
"Biztonsági figyelmeztetés: Ez a dokumentum makrókat, ActiveX-vezérlőket, XML nyelvi bővítőcsomagokkal kapcsolatos információkat vagy webösszetevőket tartalmaz. Ezekben szerepelhetnek olyan személyi adatok, melyeket a Dokumentumfigyelő nem távolít el."
"Nekem alapból nincs olyan cellán, ami tartalmazná a mai dátumot.
Nos, akkor miből fogod tudni megállapítani, hogy megnyitották-e ma már munkafüzetet?
Szerintem "ki kell nevezni" egy cellát, amiben a napi dátumot tárolod - értékkel és nem a ma() függvénnyel! - . Ezután a fájl megnyitásakor ezt kell összehasonlítanod a mai dátummal.
Ha a cella üres (mert első alkalommal amikor az ellenőrzést indítod, lehet akár üres is - minden más esetben már benne lesz egy dátum), vagy a cellában levő érték kisebb mint az adott nap, akkor megy a figyelmeztetés, egyébként kihagyható.
Nekem alapból nincs olyan cellán, ami tartalmazná a mai dátumot. Azt külön nekem létre kell hoznom? Vgay van más módja, hogy érzékelje, hogy mi a dátum és hogy aznap először nyitják ki, vagy már volt nyitva?
Sziasztok Segítségeteket szeretném kérni. Adott egy sok1000 soros lista. Az egyik oszlopában (itt most ez a "B" oszlop) szerepelnek adatok amiben keresnem kell szavakat. A cél az lenne, hogy egy adott cellában valahol szerepel az adott szó, akkor azt írja ki egy másik oszlopba. Tök jó, mert a SZÖVEG.KERES és a HA függvényekkel ez megoldható.... hittem én.
A probléma az, hogy a HA függvény csak az első feltételt értékeli csak ki. Az is érdekes, mert amúgy hibát mutat a B1 -es cella kiértékelésekor (#érték) mert ugye abban a cellában pont nincs ilyen szó, ellenben a következőben (B2) már van és jól ki is írja (SA) A 3. ban is van és arra már nem hozza az eredményt (admin).Itt ugye a feltétel már az első HAMIS ágon van. Arra tudok gondolni, hogy a Ha függvény első feltételének #érték hibája miatt nem ugrik a HAMIS ágra, de akkor az IGAZ-ra miért ad jó eredményt? Biztos én nézek be valamit de nem tudok rájönni :(
Hogy jobban lehessen látni a C oszloptól látható a szöveg.keres függvény eredménye külön-külön, látható, hogy a feladatot elvégzi, kiírja hogy hányadik karinál kezdődik az adott szó. Ezeket szeretném (C,D,E) több HA függvény egymásba ágyazásával kiíratni, úgy, hogy ha az érték nagyobb mint 0 akkor írja ki hogy Service accounts (SA), vagy Admin, stb szavakat az A oszlopba. A special-t már nem csináltam meg de az sem működik az eredeti táblámban.
(nyilván a C,D,E oszlopokra nincs szükség, csak kíváncsi voltam, hogy amúgy működik-e :) )
Nézd meg, hogy az erre szolgáló cellában van-e már mai napi dátum. Ha nincs,
a cellába jegyezd be a nyitás időpontját. Add ki a figyelmeztetést.
Ha van, nem kell figyelmeztetés.
Workbook Open eseményhez így jutsz:
Alt+F11 A bal oldalon fel vannak sorolva az objektumok. Kattints kettőt a Thisworkbook-ra. A bal oldali lenyílóban válaszd ki Workbook. A jobb oldali lenyílóban Open. Ide írhatod az utasításokt.
Segítséget szeretnék kérni. Azt szeretném megoldani, hogy ha valaki kinyit egy konkrét munkafüzetet, akkor az nem számít, hogy egy napon belül hányszor nyitja ki, de a napi első kinyitáskor jöjjön fel egy figyelmeztető üzenet, hogy nehogy elfelejtsen egy konkrét beállítást megcsinálni, mielőtt dolgozni kezd a táblázat adataival
' ~˘O=o> --------!!!! AZ AUTOFILTER TurnOFF !!!!-------
If ActiveSheet.AutoFilterMode Then If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData End If ElseIf ActiveSheet.FilterMode Then ActiveSheet.ShowAllData End If
' --------!!!! AZ AUTOFILTER TurnedOFF !!!!------- ~ˇO=o>
Ha VBA debuban Shift+F8 cal végiglépkedek neki, akkor pedig simán elvégzi.
Ez a makró nem fut le automatikusan, minden egyes beírás után el kellene indítanod. Viszont ha egyszer lefuttattad, akkor ajánlom figyelmedbe a 34274 hozzászólásomat, amiben az eseménykezelésre adtam példát:
A munkalap kódlapjára az eseménykezeléshez pedig érdemes bevinni a következőt:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Offset(1, 0).EntireRow.Hidden Then Target.Offset(1, 0).EntireRow.Hidden = False End If End Sub
Ebben az esetben ha az utolsó sorban bármelyik oszlopba írsz valamit, automatikusan hozzáadódik egy új üres sor.
(Figyelem: Ha az üres sor előtti sorban kitörölsz mindent a cellákból, akkor nem fog az utána levő üres sor elrejtődni.)
a makró igy müködik nagyjabol müködik. De valahogy nem teljesen ugy ahogy szerenem:
Sub X() Dim rng As Range, ws As Worksheet Set ws = ActiveSheet Application.ScreenUpdating = False ws.Range("B:B").EntireRow.Hidden = False 'minden sor megjelenítése Set rng = ws.Range("B" & ws.Rows.Count).End(xlUp) 'legalsó értékes cella az A oszlopban On Error Resume Next ws.Range("B15", rng).SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True 'legalsó értékes cella fölött az üres sorok (ha vannak) eltüntetése Range(rng.Offset(10), rng.End(xlDown)).EntireRow.Hidden = True 'legalsó értékes cella alatt 2-vel, és onnantól lefelé az üres sorok eltüntetése Application.ScreenUpdating = True End Sub
igy irtam át.
A problemam a makroval hogy a ws.Range("B15", rng) resznel ha beirok mondjuk a B oszlop 15. cellajaba valamit nem ad hozza automatikusan az uj üres a B16 cella szamara egy sort.
Illetve szamomra az is fontos lenne hogy ugyan ezt megcsinalja a többi oszlopnal is.
Köszönöm. Nálam csak a textbox change és a textbox beforeupdate jön számításba, és ezeknél igyekszem nagyon szigorúan használni az enableevents-et helyettesítő változómat. Éppen ezért nem találtam nyomát annak, hogy egyes helyeken miért volt más a tartalma, mint amit vártam. (Erre teszt üzemben figyelő és szükség esetén leállással egybekötött figyelmeztető üzeneteket helyeztem el, így derült ki egyáltalán a hiba)
Megjegyzem, ma regdélelőttel, amióta tudom, hogy a Call Stack ellenőrizné az odavezető utat, egyszer sem jelentkezett a hiba.
- Nincs-e esetleg ez a változó tévedésből több helyen definiálva. Pl. globális változóként valahol egy kódodulon, és még privátként is a userform kódlapján, esetleg szubrutinon belül is? Nálam időnként előfordul, hogy programírás közben paradigmát váltok, újratervezek, egy lokális változót átteszek globálisba, de elfelejtem törölni a lokális deklarációt. Aztán nézek furán, hogy miért csinálja a program azt, amit.
- Előfordulhat-e, hogy egy olyan eseménykezelő is lefut, amire nem gondolsz? Pl. ha programból módosítod egy control értékét a userformon, az a control Change eseményét is kiváltja. Vagy ha a form-on manuálisan módosítasz egy textbox-ot, akkor ezek mind játszhatnak:
textbox enter textbox change textbox beforeupdate textbox afterupdate textbox exit
"Ps.(úgy gondolom, mindezeket te a kisujjadból kirázod egyébként."
Dehogy. Éppen az a másik fő érvem a GoTo 0 használata mellett, hogy számomra sem teljesen tiszta, meddig tart a különféle hibakezelések hatása.
Mondjuk, ebben a konkrét Resume Next esetben meg voltam győződve arról, hogy az elképzelésem helyes, azért előbb utána kellett néznem, hogy nem hülyeséget írok-e le :-)
Köszönöm. Halványan emlékeztem, hogy néhány éve te említettél valakinek a kérdésére egy ilyen lehetőséget. Most, hogy megírtad, már be is ugrott, ez volt az a parancs. Csak akkor nem foglalkoztam vele, de most kipróbálom. Szerintem ez lesz nekem a megoldás.
A másik lehetőség nekem is eszembe jutott, csak bonyolult lenne minden meghívott Sub/Function elejére beírogatni.
A lépésenkénti futtatás nem megoldás itt, mert teljesen váratlanul jön elő a hiba. Látszólag ugyanazon az útvonalon kétszer nem jelentkezik, harmadszorra, vagy negyedszerre igen.
A Watch window meg ugyanezért lenne nehézkes. Hiszen az adott változó True/False beállítását túl sűrűn használom ahhoz, hogy informatív legyen a megállás az egyes váltási pontokon.
Ha egymásba épülő hívások vannak, akkor a Call Stack megmutatja, honnan jutott oda a program, rekurzíve vissza lehet nézni.
Viszont ha különböző rutinok egymás után (egymás mellett) futnak, akkor ez az út nem járható.
Ilyenkor szerintem a Debug.Print "programnév", változó értéke adhat segítséget. (A programnév az amit szövegesen megadsz, hogy honnan íratod ki a változót.
No és persze a lépésenkénti futtatás és a változó figyeltetése (Watch Window) is segíthet.
Sziasztok, tudtok valami olyan eszközt, ami a program egy adott pontján megállítva megmutatja a program útvonalát visszamenőleg 2-5 végigjárt szubrutin/funkcióhívás megadásával?
Van egy változóm, amit az EnableEvents kiváltására használok UserFormokon, és időnként számomra váratlanul más értéket, mint amit - hitem szerint - a lehetséges útvonalon megadtam neki. Ahol téves az érték, ott megállítom, de nem találom az eltérés okát. Ezért lenne jó látni akárcsak 2-3 előzmény helyet, hátha ott kerül téves vágányra a program.
Persze, értem. Már az előző bejegyzésem is arról szólt, hogy tévedésben voltam ezzel kapcsolatban. Egy nagyon régi emlék, ami ezt hitette el velem, egy nagyon nehezen kinyomozott hibajelenség. Már csak halványan rémlik, hogy egy resume next miatt átugrott hibát nem vettem észre. Nyilván ugyanabban a szubrutinban volt a második is, csak én akkor - tévesen - azt a következtetést vontam le a jelenségből, hogy a hatás a kikapcsolásig tart. Így most tanultam valamit.
Ha már ennyire belemerültünk a hibakezelésbe, még egy megjegyzést engedj meg:
A "főprogramban" kiadott hibakezelési utasítás kihatással van az "alprogramra- szubrutinra" is, ha abban nincs újabb hibakezelési utasítás.
Az On Error Resume Next utasítás esetén az alprogram hiba utáni része nem kerül végrehajtásra, a vezérlés visszakerül az alprogram meghívása utáni utasításra.
On Error Goto cimke utasítás esetén visszaugrik a hiba esetén a hibakezelési cimkére és szintén nem megy tovább az alprogramban.
Tehát a hibakezelésre minden esetben figyelmet kell fordítani.
Üdv.
Ps.(úgy gondolom, mindezeket te a kisujjadból kirázod egyébként.)
Sub main() Dim rng As Range subr Set rng = Range("A" & Rows.Count).Offset(1) End Sub
Sub subr() Dim rng As Range On Error Resume Next Set rng = Range("A" & Rows.Count).Offset(1) Debug.Print "túl vagyunk az 1. hibán" Set rng = Range("A" & Rows.Count).Offset(1) Debug.Print "túl vagyunk a 2. hibán" End Sub
Elvben jogos, szoktam is használni a GoTo 0-t, pont azért, amit leírtál.
Ebben a speciális esetben azért nem tettem bele, mert
- az On Error Resume Next élettartama a szubrutin végéig tart,
- a szubrutin végéig egyetlen egy kódsor van, ami hibára futhat,
- ha a hiba bekövetkezik, akkor az azért lesz, mert a felhasználó az A1048575 cellába ír adatot (mekkora ennek a valószínűsége?), és itt az Offset(2) lesz problematikus
- de ez esetben szerintem nem is baj, ha az Excel nem ad a hibaüzenetet.
Igen, lehet automatizálni, csak jól körbe kell járni minden eshetőséget, pl. mi van, ha nem beír, hanem töröl egy adatot, ha egyszerre több cellát módosít, stb.
Én ha automatizálni akarnám, akkor az eseménykezelőből inkább a saját szubrutinomat hívnám meg, mert az már a kész, letisztult helyzet alapján dolgozik.
A munkalap kódlapjára az eseménykezeléshez pedig érdemes bevinni a következőt:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Offset(1, 0).EntireRow.Hidden Then Target.Offset(1, 0).EntireRow.Hidden = False End If End Sub
Így ha az utolsó (vagy egy elrejtett sor fölötti) sorba ír, az alatt levő felfedődik automatikusan.
Sub X() Dim rng As Range, ws As Worksheet Set ws = ActiveSheet Application.ScreenUpdating = False ws.Range("A:A").EntireRow.Hidden = False 'minden sor megjelenítése Set rng = ws.Range("A" & ws.Rows.Count).End(xlUp) 'legalsó értékes cella az A oszlopban On Error Resume Next ws.Range("A1", rng).SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True 'legalsó értékes cella fölött az üres sorok (ha vannak) eltüntetése Range(rng.Offset(2), rng.End(xlDown)).EntireRow.Hidden = True 'legalsó értékes cella alatt 2-vel, és onnantól lefelé az üres sorok eltüntetése Application.ScreenUpdating = True End Sub
A kommentekez kiegészítésként: az minősül "üres sornak", amelynek az A oszlop metszere üres cella.
A munkalapodból valószínűleg azért látszik csak 200 sor, mert a többi el van rejtve. Ha a fenti makrót lefuttatod, hasonló eredményt kapsz majd, olyan értelemben, hogy a munkalap alsó (üres) sorai nem fognak látszani.
Sziasztok! A segítségetekre lenne újra szükségem egy feladathoz.
Egy makrót szeretnék írni.
Amit el szeretnék írni hogy egy olyan munkalapom legyen amelynek csak annyi sora van amennyit kitöltök és +1 sor.
+1 sor hogy persze ha valami plussz dolgot szeretnék beleírni akkor azt meg tudjam tenni.
Illetve +1 sor hogyha abba a sorba beleírok magától hozzon létra a makró egy új sort azonnal ahova megint tudok írni.
Igy kezdtem el.: (Ez csak az elrejtésre jó ugye illetve létrehoz +1 üres sort)
Sub Zeilen_elrejtes() Application.ScreenUpdating = False For i = 1 To 200 If Cells(i, 1).Value = "" Then Rows(i + 1).Hidden = True End If Next i Application.ScreenUpdating = True Range("A1").Select End Sub
A munkalapomon eleve valahogy csak 200 sor látszik a többi része lefelé a munkalapnak teljesen szürke.
Ezt is szerettem volna megkérdezni hogy hogyan lehetséges egy excelben ilyen határt szabni úgymond a munkalapnak.
A kérdésem az lenne hogy hogyan tudok sort hozzáadni a már meglévő előző makróhoz azt sajnos nem tudom megoldani.
Még annyi esetleg, hogy ha nem akarom, hogy a kérdés után újra feljöjjön egy leokézó gomb (törlöm / nem törlöm), akkor csak simán kiveszem az alábbi 2 sort?
(Mondjuk, azt nem értem, hogy miért nem kérdezi meg, hogy törölhető-e, lehet, hogy épp védett cellával próbáltad?)
Egy picit módosítva a makró:
Sub nodelete() If ActiveSheet.Name <> "DOSSZIÉ" Then Selection.Value = "": Exit Sub If Not Intersect(Selection, Range("$C$9:$AE$130")) Is Nothing Then If MsgBox("Valóban törölni szeretnéd az adatot", vbExclamation + vbYesNo) = vbYes Then MsgBox "törlöm" Selection.Value = "" Else MsgBox "nem törlöm" End If End If End Sub
A Thisworkbook kódlapjára menj át (a bal oldali listában kattintasz rá kettőt), a bal lenyílóban válaszd ki a Workbook - ot.
A jobb oldali lenyílóban az Open eseménykezelőt. Ide másold át a munkalap Activate eseménykezelőjében levő két sort:
Application.OnKey "{DEL}", "nodelete"
Application.OnKey "{BACKSPACE}", "nodelete"
Ezután válaszd a BeforeClose eseménykezelőt. Ide pedig a munkalap DeActivate kezelőjében levő két sort.
Application.OnKey "{DEL}"
Application.OnKey "{BACKSPACE}"
A munkalap kódlapjáról az Activate és Deaktivate eseménykezelő törölhető.
Ments el, zárd be és nyisd meg újra.
Elvileg működnie kell és csak a Dosszié nevű munkalap adott területén.
Kipróbáltam ahogy mondtad. Megnyitás után először még simán lehet törölni (mintha mi sem történt volna), viszont miután váltogattam a munkalapok közt, utána már nem lehet törölni. Egyáltalán nem, de még csak rá se kérdez, hogy akarom-e törölni vagy sem. Max átírni lehetne a meglévő nevet, de ez úgy annyira nem jó.
Mivel sok ember használná ezt a fájlt kényelmesebb lenne ha nem kéne lapfül váltogatással trükközni, ha úgy meg lehet oldani.
Valamit tuti nem jól csinálok, mert nem akaródzik működni a makró, úgyhogy inkább beteszek egy képernyőképet hátha abból kiderül mit rontottam el:
A lényeg, hogy a DOSSZIÉ munkalap C9:AE130 tartományra szeretném beállítani ezt a funkciót. A fentiek alapján megcsináltam a makrót, meg beállítottam az Activate/deactivate részt is az adott munkalapra (nem vagyok 100% biztos, hogy ezt jól...) és végül makróbarát verzióban elmentettem az excelt. Újranyitás során jött is egyből a biztonsági figyelmeztetés, hogy a program letiltotta a makrókat, amire én engedélyeztem a tartalmat. Ezt követően semmi változást nem tapasztaltam, ugyanúgy ha az adott tartományban (C9:AE130) bárhol lenyomom a delete-t simán törlődik a cella tartalma mindenféle figyelmeztetés nélkül.
Amúgy a táblázat bizonyos részei (pl. az első 7 sor) le vannak védve, egyes részei pedig automatikusan töltődnek különféle képletek alapján. Nem tudom, hogy ez mennyire befolyásolja a makró működését.
Ha a fenti kép alapján van valami sejtés mi lehet a bibi, előre is megköszönöm a válaszod.
Ráállsz a munkalap nevére a lapfüleknél alul. Jobb egérgomb. Kód megjelenítése. A bal oldali lenyílóban kiválasztod a Worksheet-et. Megjelenik a SelectionChange esemény üres makrója, ezzel nem kell foglalkoznod. A jobb oldali lenyílóban kiválasztod az Activate eseményt. Ide beírod az Application.Onkey 2 sorát, ami aktíválja a makrót. Ezután kiválasztod a Deactivate eseményt a lenyílóból, ide írod be a másik két sort.
A makrót egy modulba kell bemásolni. Ha már itt vagy a kódlapon, akkor a felső menüsorban kiválasztod az Insert menüből a Module sort. Ide másolod a makrót.
Viszont: ez után a füzeted makróbarátként kell elmentened (xlsm kiterjesztés)
a függveny jol müködik azonban nekem lenne meg valami amit meg akarok oldani.
=HA(B2="";HA(C2="";"";SOR())+10;SOR()+10)
A problema onnan adodik hogy a cella ahol nincs ertekem B2 es C2 szeretnem hogy semmit ne irjon ki de a szamlalo tovabb szamolja a sort valahogyan -1 el.
Pelda.:
A oszlop ugye a sorszamom B oszlop tetszoleges ertek C oszlop tetszöelges ertek:
A oszlopban a szam ugye halad felfele HA B VAGY!!! C oszlopban ertek van.
DE!!! ha nincs ertek sem B illetve sem C oszlop adott cellajaban akkor az A oszlopban NE irjon kis semmit VISZONT -1 el szamoljon AZAZ szepen haladjon maga a darabszamom külön független a sorszamtol
A oszlop B oszlop C oszlop
46 ertek ertek <-- Kiirja az A oszlop erteket (szamot)
47 ertek <-- Kiirja az A oszlop erteket (szamot)
48 ertek <-- Kiirja az A oszlop erteket (szamot)
"" "" "" <-- Nem ir ki semmit viszon tovabb szamol ugy hogy a következö szam folytatodjon de nem a sor függveny alapjan hanem alul ahogy mutatom a 49 nel
49 ertek ertek <-- A sor függveny miatt itt 50 lenne de nekem csak 49 kell mert az nekem a 49.
Sajnos nagyon zöldfülű vagyok a makrókkal kapcsolatban, legalábbis egyelőre még nem igazán dolgoztam vele, szóval olyan alap dolgokra is rá kell kérdeznem, hogy a munkalap Activate/Deactivate eseményeit konkrétan hol/hogy tudom beállítani?
Sub nodelete() If Not Intersect(Selection, Range("A1:C10")) Is Nothing Then If MsgBox("Valóban törölni szeretnéd az adatot", vbExclamation + vbYesNo) = vbYes Then MsgBox "törlöm" Selection.Value = "" Else MsgBox "nem törlöm" End If End If End Sub
Az aktíválást teheted a munkalap Activate eseményéhez, a megszüntetést a Deactivate eseménybe.
Az is megoldható, hogy a megerősítő makró csak a munkalap meghatározott részében érvényesüljön. A makró most az A1:C10 területen érvényesül, azon kívül nem. Ha változhat a terület, pl. egy táblázat, akkor érdemes elnevezni és a névvel hivatkozni a tartományra.
Ha nem boldogulnál vele, akkor tegyél fel egy kis mintát.
Egy olyan segítséget szeretnék kérni tőletek, hogy hogy tudnám azt beállítani egy táblázatban, hogy bármelyik cellán állva, ha lenyomom a "delete" vagy "backspace" billentyűk valamelyikét feldobjon egy megerősítő ablakot, hogy valóban törölni szeretném az adott cella tartalmát. Ergo, azt szeretném megoldani, hogy ne tudjam véletlen törölni a cella tartalmát, csak megerősítésre.
Ezt a formot vagy 5 éve készítettük, és akkor felkerült rá. Most nincs az eszköztárban ilyen, viszont lecserélni nem tudom, mert osztályhibát ír ki más date képződményre :-(
Ezen a formon van egy-egy DTPicker, amiknek a backcolorját viszont nem állítja egyáltalán.
A tulajdonságai között CalendarBackColor van, viszont, ha ezt írom be, akkor sem színez. Sőt, olyan, mintha nem is lenne ilyen objektumom, mert kisbetűvel beírva a tulajdonságot, nem írja át nagyra.
Szia! Kettő db R vagy 2 db B kell legyen az adott szövegrésznél, vagy elég csak annyit megnézni, hogy a 16. karakternél előbb fordul elő? Továbbá az 1 akkor kell ha R vagy akkor ha R vagy B?
Szövegrészt kiemelni bolddal csak makróval lehet.
Az egész cellatartalmat lehet feltételes formázással is félkövérre állítani. Pl. Ha mindegy, hogy B vagy R van-e benne:
Feltételes formázás - új szabály - a formázandó cellák kijelölése képlettel, a képlet:
5:4(1:0 R;0:1 R;1:0 F;1:0 R;0:1 F;0:1 R;1:0 R;0:1 F;1:0 F)cellából a 15..16 /a kiemelt rész/karakterig kellene kiszűrnöm hogy ott "R" betű vagy B betű van e, s azt kellene félkövérre venni, vagy a kovetkező oszlopba egy 1 es számot irna is jó volna. Úgy néztem hogy feltételes formázással s csere vel ezt nem tudom megoldani. tudnátok támpontot adni merre nézelúdjek inkább?
Van egy pofás formom, ami remekül működik egy ideje.
Gondoltam ráncfelvarrom a kicsikét. Az adatbeviteli mezőket színezni szándékoztam, hogy amikor azt tölti az ember, akkor világos legyen, merre tart.
Private Sub EsTB10_Enter() Me.EsTB10.BackColor = vbGreen End Sub Private Sub EsTB10_Exit(ByVal Cancel As MSForms.ReturnBoolean) Me.EsTB10.BackColor = vbWhite End Sub
Szuper jó, van vagy 30 combo- meg textbox, remekül működik. Azonban van az egész felületen három Frame, amikben külön-külön van 3-4 textbox, és ezek utolsóikban beragad a zöld szín. Hiába lépek tovább (akár tabbal, akár egérrel), mégsem fehéríti ki. Viszont, ha visszafelé lépek ki az utolsó textboxból (tehát az előző textboxba lépek), akkor eltünteti a zöldet.
Azt meg lehet, oldani, hogy egy grafikonhoz szükséges adatok automatikusan jelölődjenek ki az adott naphoz? Jellemzően ez minden nappal plusz egy sor lesz.
Tehát ne kelljen mindig kijelölgetni az adatokat, hanem mondjuk a ma() értéket megtalálva jelölje ki pl az A1:D12 másnap az A1:D13 területet.
A 2. kérdésre Eredő Vektor javaslatát annyiban módosítanám, hogy az A2&B1, vagy a B1&A2 közé valami elválasztójelet azért tennék. Mondjuk B1 & " " & A2, vagy B1 & ";" & A2 stb.
A 2. sorba pedig ez kell: =HA(B2="";HA(C2="";"";SOR());SOR())
Majd ezt húzod végig lefelé.
Ha az egész nem az 1. soron kezdődik, akkor a második sorhoz hozzáadsz egy számot, ami 1-el kevesebb, mint a sor száma. Ha például az első adat a 10. soron van, akkor 1 11. soron lévő "2" sorban a képlet: =HA(B2="";HA(C2="";"";SOR())+10;SOR()+10)
A problemam a következö. Lehet e olyan sorszamot csinalni ami ha megszakad az elözö szam folytatja a szamozast tovabb lathatatlanul es ahol a B es C oszlopban ertek van ujra elkezdi ha nincs megy tovabb a szamozas csak nem jelenik meg.
1 1. ertek 1 1. ertek 1 =HA(B1="";HA(C1="";"";1);1)) 2 1. ertek 2 1. ertek 2 =HA(B2="";HA(C2="";"";A1+1);A1+1) 3 1. ertek 3 1. ertek 3 =HA(B3="";HA(C3="";"";A2+1);A2+1) 4 1. ertek 4 1. ertek 4 nincs itt 5 1. ertek 5 1. ertek 5 mert nincs ertekem se a B oszlopban se a C ben de megy tovabb a szamozas a hatterben es ahol ujra van ertek az oszlopok cellaiban ujra megjeleni szepen kihagyva ezt 6 1. ertek 6 1. ertek 6 7 1. ertek 7 1. ertek 7 8 1. ertek 8 1. ertek 8 9 1. ertek 9 1. ertek 9 10 1. ertek 10 1. ertek 10
Elakadtam egy feladattal és segítséget szeretnék kérni. Excel 2016-ban dolgozom egy kiállítási interaktív kioszk háttér adatbázisán. Ez az excel szabályozza, hogy milyen érintésre milyen adatok szűrődjenek le és jelenjenek meg a képernyőn.
Az első munkalapon vannak a kiállítók adatai. Ami most fontos az az azonosítójuk, illetve hogy hol állítanak ki. Minden helyszínhez tartozik egy térkép ami mutatja a pontos helyet. Több helyen is kiállíthatnak ezért bizonyos esetekben egy azonosítóhoz akár 3 térkép is tartozhat.
A "Floormap locations" csináltam egy lekérdezést az A munkalap 3 oszlopából amik a térképeket tartalmazza. Eltávolítottam az ismétlődéseket és az üres cellákat a lekérdezésből.
Most a "Floormap locations" munkalapra szeretném az egyes térképek mellé összeszedni az összes olyan kiállító azonosítóját, aki kiállít azon a helyen. Az index.hol.van egy találatnál megáll és a keres függvények is tudomásom szerint.
Mellékelek képeket, hátha segít megérteni és remélem valakinek van valami jó kis trükkje. Hálás lennék! Előre is köszönöm!
Nem vagyok híve, annak, hogy beadandó feladatok bárkinek megoldjak, ezért leírom a hibákat.
Az általatok elgondolt Excel majdnem jó, igazából csak E7:P7 cellákban lévő képletnek nincs értelme, ezek lesznek a modelled változó cellái, ez lesz, amiről döntést kell hozni melyik héten hány ládát kell kiszámítani.
Töröljétek ki a képletet, és írjatok ide be valamilyen számot, pl. végig 10-t
A Solverhez meg kell fogalmazni az optimalizálási feladatot.
Mi célfüggvényed? Nyilvánvalóan a költség, ezt kell minimalizálni
Mi a modell változói? Miről kell döntést hozni?
Milyen feltételeid vannak?
1. A szállított ládák számának biztos, hogy nem negatívnak kell lenniük >=0
2. A szállított ládák számának biztos, hogy egésznek kell lenniük
3. A záró készlet sem lehet negatív, mert akkor többet használ fel, amit ami az előző nap raktár készlet+kiszállítás
Olvasátok le az Exceletekben az ennek megfelelő cellákat, és adjátok meg a Solver megfelelő mezőjében.
Mivel a költség függvény nemlineáris (a közvetett KEREK.FEL miatt), ezért nemlineáris Solverrel kell megoldani.
Szeretnék tőletek segítséget kérni excel solver feladattal kapcsolatban!
A kialakult távoktatási rendszerben kaptunk egy beadandó feladatot, ami a jegyünk 1/10-edét teszi ki, viszont mintafeladatokat a solver használatához nem. Így remélem, hátha van valaki, aki tudna nekünk a mellékelt google drive mappában található feladatban segíteni. Sokat jelentene nekünk.
2. D2-be másold be ezt: =HA(HAHIBA(SZÖVEG.TALÁL("/"&A2&"/";"/2/3/6/8/11/15/18/21/25/")>0;HAMIS);"";1)
Megjegyzés: A számokat közrefogó / jelek azért kellettek (lehetett volna más is), hogy az 1-es számot ne fogadja el a 11, 15, 18, vagy 21-ben, a 2-est meg a 21 és 25-ben.
=HA(ÉS(A2>13,A2<26),1,B2) ebben mi lehet a hiba, hogyan orvosolhatnám?
2. másik cellába ( legyen d2) akkor szeretnék egy "1" s számot, ha a2 cellaban a szamok a 2, 3,6,8,11,15,18,21,25 s számok egyike. hogyan tudnám ezt egyszerűen kivitrelezni?
A bemásolás után azt csináltad, amit írtak: "Ez egy tömbképlet, Ezért Ctrl+Shift+Enter-rel kell lezárni!". Tehát amikor bemásoltad a szerkesztőlére, akkor nem Enter, hanem Ctrl+Shift+Enter. Ekkor szögletes zárójelek közé teszi, amit bemásoltál, és végrehajtja a többnyire bonyolult feladatot, amit másképp nem lehetne megoldani.
Shift-ctrl-enterrel zártad le a tömbképlet bevitelét? Ha jól csinálod, a szerkesztőlécen kapcsos zárójelek közé csukva jelenik meg, ami magától kerül oda.
Adott szövegben kellene az első nagybetű pozíciója, a második karaktertől számolva (mivel az első többnyire eleve nagy betű). Lenne megoldás, de valahogyan nem működik. Mintha a SZÖVEG.TALÁL nem engedne több attribútumot bevinni, vagy csak az elsőt venné figyelembe.
A két képletet tartalmazó cellát másolod (ctrl+c), majd az összegzést tartalmazó cellákat kijelölöd (ctrl + jobb egérgomb), irányított beillesztés - képletet.
Azzal a kérdéssel fordulok hozzátok, hogy hogyan tudnék úgy összeadni sok (kb. 6 ezer sor) számot az alábbiak szerint, a sárga mezőbe kellene a fentiek összege, de ne egyesével kelljen függvényezni. Biztos van rá már válasz, de nem elég ügyesen keresem.
Bármilyen meglepő, nem hogy a gugliban nem találtam jó találatot, konkrétan a kiszámolót meg is néztem, de az utóbbi időkben nem sok bejegyzés volt, nem keresgéltem régieket.
(Nem hitelkalkulátor szóra kerestem, az van sok helyen, hanem próbáltam a maradvány összegre, csak nem tudtam, mi a szakszó. Azóta meglett.)
Magyar Excel képlet (természetesen másik oszlopba)
=Helyette(A1;Karakter(10);"<p>")
Utána a képletes cellákat kijelölöd, másolás, ugyanoda irányított beillesztés értéket. Az alap oszlop törölhető vagy arra másolod rá és a segédoszlopot törlöd.
Ha cellán belül van sortörésem (ALT+ENTER), nagyobb mennyiségű adatnál, és több cellában, akkor azt valahogyan tudom cserélni szövegre?
Adott esetben <P> html kódra cserélném a sortörést, így egy export-import folyamatnál nem veszne el a sortörés.
(Az excel táblázatban amiből a termékleírásokat kellene beemeljem ott cellán belül van sortörés, ha így küldök rá egy import folyamatot, akkor egybefüggő lesz a szöveg, kiesnek a sortörések. Viszont ha minden sor végére beírok egy <P> html kódot akkor új bekezdést tesz, és ezzel sok munkát spórolok magamnak.)
Én a farönkök köbözését szeretném meggyorsítani egy excel táblázattal. A lényeg, hogy ha beírok egy számot (átmérő) mutassa meg, hogy az hány köb. Sajnos képlettel nem oldahtó meg a dolog, mert a fák nem tökéletes henger alakúak, de egy könyvből megvannak az adatok. Szóval ha mondjuk az A1be beírom, hogy 20 a B1ben jelenjen meg, hogy 0,1. A2 27 - B2 0,18 és így tovább. Köszönöm a segítő hozzászólásokat!
Gondolom, tud olyat az Excel, hogy megadom a felvett hitelt, a kamatot a futamidőt (esetleg a törlesztő részletet, bár ezt nyilván ki tudja számolni) és havi bontásban hozza, mennyi tőke és mennyi kamat van hátra. Ha tényleg van ilyen függvény, tudja-e valaki a nevét?
Ha a navigálást úgy érted, hogy majd odaugrik a kurzor, akkor nem. Ha úgy, hogy kiírja valahova a cella koordinátáit, akkor igen. Egy tanács: soha ne adj meg ilyen intervallumokat táblázatkezelőben, hanem az alját meg a tetejét két egymás melletti cellában. Az intervallum nem rendeltetésszerű használat, úgyis szét kell szedni aljára és tetejére, plusz bonyodalom.
De mi a valódi feladat, amit így akarsz megoldani?
A kérdésem a következő volna. Megadok intervallumot egy cellában. Pl.: "1-1655" Szeretném azt elérni, hogy a dokumentumon belül kereshető legyen az intervallum bármely szereplője. Tehát ha rákeresek az 1000-re, akkor is ahhoz a cellához navigáljon találatként, ahol az "1-1655"-öt megadtam. Ez lehetséges?
Szia. Ha adsz egy e-mail címet, elküldöm, meg a hozzá írt kivánság-szöveget is. Nem terhelném egyenlőre a közösség oldalát. Ha tudsz segíteni és megoldódik és érdemesnek tartod feltenni segítségként másoknak, akkor mehet.
Feltételezve, hogy a cikkszámaid a Munka1 munkalap A oszlopában vannak, a második munkalapon pedig a cikkszám az A oszlopban, az érték a B oszlopban van.
Van egy táblázatom, benne 12 munkalap. Egy 13.-ba kellene összegeznem minden egyes, számokat tartalmazó cella értékeit. A cellák elnevezése ugyan az mind a 13-ban.
Hogyan kell ezt csinálni?
Ha ugyan ezeket a munkalapokat (12 db) egy másik (14.) összesítőben kell összegeznem, ahol előfordul néhány, mind a 12 cellában előforduló adat összevonása, azt hogyan kell csinálni?
Pl.: A személyi jellegű kiadásoknál a 12 munkalapon tételesen vannak a kiadások (bér, utazási ktsg, saját gk. használat, természetbeni juttatás, egyéb ktsg, de ugyan ez a 14. -ben már csak úgy kell, hogy szerepeljen, hogy bér és egyéb személyi jellegű kiadások (tehát a forrás cellák és a cél cellák elnevezése és db-száma is más).
Ez tipikusan lineáris algebra - optimumszámítás feladat
Alapfeladat felírása:
B2:D5 a fajlagos felhasználás mátrix (narancs színű terület)
Ha ezt mátrixszorzod a gyártási tervvel (miből, mennyit gyártasz) B6:D6 (sárga), akkor megkapod, hogy az adott gyártási tervhez az egyes alapanyagokból mennyi az felhasználás F2:F5 (zöld). Képen az elrendezés miatt a mátrixszorzásban a sárga részt transzponáltam, hogy a mártixszorzás elvégezhető legyen.
A raktárkészlet adott H2:H5 (rózsaszín), a fennmaradó készlet a raktárkészlet és a felhasználás különbsége.
Ezzel már el lehet kezdeni játszogatni, hogy a gyártási tervek így-úgy változtatod, és akkor hogyan változik felhasználás, fennmaradó raktárkészlet.
Ha valamilyen pontosabb/ képlettel leírható követelményt (pl. a termékeken elérhető profitot maximalizálni)meg tudsz fogalmazni, akkor lép képbe a Solver.
A példa kedvéért, az adott raktárkészlet alapján legyártható össztermékmennyiséget E6:=SZUM(B6:D6) (kék) szerettem volna maximalizálni.
A hozzátartozó Solver beállítása a képről leolvasható.
Ha mindegyikből van 100 db, akkor készítesz 10 vaskarikát és 6 kalapácsot. Marad 70 aluminiumod és 10 fád. Ezzel vársz a következő szállítmányra. Akkor megint csinálhatsz valamit:-)
Egy nagyon amatőr kérdéssel fordulok hozzátok, de mégis kigott ratjam.
Tegyük fel, van 4 alap termékem (legyen most)vas,alumínium,fa,karika. A4 alaptermékem xyz raktrákészelettel van jelen.Ezekből az alapnyagokból 3 fajta terméket tudok előállítani de más más anyagszükségletekkel legyük fel, Ötvözet anyagszükséglete 10vas+10alumínium, Facsavar anyagszükséglete: 5fa+10vas , Vaskarika anyagszükséglete 10vas+10karika, almínium kalapács anyagszükséglete 5aluminium+15fa.
Hogy tudom megoldani, hogy a rendelkezésre álló nyersanyagok függvényében az elkészítendő tárgyak mennyiségét közölje illetve elkészítés után a raktárkészletet a megfelelő anyagokkal csökkentse.
Kevesen ismerik, de excel 2016 - tól a powerquery integrálva lett. Ezt kell használnod a továbbiakban és teljesen automatikussá válik az egyes lépések rögzítése után a teljes folyamat. Erre találták ki - többek között.
Én nem adnék teljes útmutatást, mert sok van a neten és egyszerű...
Természetesen az INDEX függvényben szereplő - vastagon szedett - utolsó sorok számát igazítanod kell a saját tábládhoz.
Ha 3-nál több "valami" van, akkor a 3 helyett a "valamik" számát kell beírnod, továbbá a G2 képletben folytatnod kell az oszlopok első cellájával, a H2 képletben pedig a D oszlop helyett a valódi utolsó oszlopot kell írnod a piros betűk helyére.
Tanácsot szeretnék kérni az alábbi feladat megoldásához.
Adott az 1. tábla és a cél abból a lenti kimutatás elkészítése.
Nem vagyok nagyon otthon a pivot táblákban, ezért csak úgy tudtam megcsinálni, hogy az 1. táblát lemásolom / transponálom, majd mechanikus másolgatással előállítom a 2. táblát. Mivel nagy az eredeti állomány, ezzel a módszerrel sokáig tart és a tévesztés lehetősége is nagy.
Milyen egyszerűbb, biztonságosabb módszer létezik erre a problémára?
Tanácsot szeretnék kérni az alábbi feladat megoldásához.
Adott az 1. tábla és a cél a lenti kimutatás elkészítése.
Nem vagyok nagyon otthon a pivot táblákban, ezért csak úgy tudtam megcsinálni, hogy az 1. táblát lemásolom / transponálom, majd mechanikus másolgatással előállítom a Segédtáblát. Mivel nagy az eredeti állomány, ezzel a módszerrel sokáig tart és a tévesztés lehetősége is nagy.
Milyen egyszerűbb, biztonságosabb módszer létezik erre a problémára?
Én a következő feladatban kérnék segítséget nem boldogulok vele.
B2 cella pálinka név melyben a legördülő lista barack szilva körte, B3-3-4-5 cella legördülő lista ( kész, folyamatban, stb..) Amit szeretnék: Ha a B2 cellában kiválasztom a barackot akkor a B3-4-5 cellában tudjam a nyelveknél kiválasztani hogy milyen állapotban van. Ezt meg tudom csinálni. Amit nem tudok, hogy ha B2 cellában kiválasztom a körte akkor a B3-4-5 cellában szintén tudjam kiválasztani a nyelveknél hogy milyen állapotban de úgy hogy a Barackot ne módosítsa hanem külön kezelje. Ha vissza váltok B2 cellában barackra akkor annak a folyamatát lássam.
Ez ilyen többszintű legördülő lista és láttam már ilyet de sehogy sem tudom összehozni. Ami még fontos, hogy bővíthetők legyenek.
Sajnos ez nem pont azt hozza amire szükségem van, mert csak azokban a sorokban hoz értéket ahol a 2. oszlopban van érték. Nekem meg 1 el kellene jelölni a 3. oszlopban az összes értéket amelyiknek a száma szerepel a 2. oszlopban. mint a becsatolt képen a 3. oszlopban, úgy kellene kinéznie, csak sajnos 80 ezer sor van.
2013 as excel használatával kapcsolatban szeretnék segítséget kérni Tőletek!
A probléma amit nem tudok megoldani: Az első oszlopban szerepelnek értékek, amik néha ismétlődnek. A második oszlopban az első oszlopból származó értékek vannak, és az lenne a cél, h ha a 2. oszlopban található érték megtalálható akárhol az első oszlopban, akkor az első oszlop sorában 1 értéket adjon a 3. oszlopban, ha nincs benne az első oszlopban a 2. oszlop értéke akkor 0 értéket adjon.
Függvénnyel ezt meg lehet oldani? órák óta fkeresezek meg ha függvényezek de nem jöttem rá a megoldásra.
Való igaz. Ha nem én fogom használni a programot, akkor szeretem, ha alaposan tesztelve van, és nem éri meglepetés a felhasználót. Alap, hogy ne jöjjön leállás angol nyelvű hibaüzenettel, de az is, hogy megmagyarázhatatlan jelenség se forduljon elő.
Az ilyen "apróságok" mellett azért nem szeretek vállrándítással elmenni, mert ki tudja, hogy a hiba, ami okozta, máskor nem eredményez-e komolyabb gondokat. (Könyvelők szokták mondani, hogy állítólag előfordult olyan, hogy a bevétel és kiadás végösszege pár filléres eltérést mutatott, majd az egész csapat több napi munkával mindent utánaszámolt, és 10milliós hibát találtak.)
Ezért a tegnapinak is utána fogok nézni, csak most nem nagyon van rá idő.
Eddig nem találtam rá, de most megnéztem: Egy pillanatig megörültem Bryan Shepherd válaszának, mert azt én is tapasztaltam (Word-ben), hogy ha betűméretet módosítok, akkor nem mindig érvényesül elsőre. Csak ha elrontom a jót is, aztán az egészet kijavítom. Sajnos a részletekre most nem ugranak be. Mindenesetre itt kipróbáltam, de nem működöt.
"Bár a cellánként eltérő betűméret (ugyanazon munkalapon és felbontás esetén), akkor is furcsa jelenség – annak (méret)helyessége, mint minimum, elvárható volna"
Szerintem is. Bár nem cellákról van szó, hanem Userformon elhelyezett hajszálra azonos TextBoxokról (ld. az előző pontosításomat), én is azt várnám, hogy a "torzítás" legyen a képernyő minden részén azonos, ne legyen 20-30 képernyőponttal lejjebb más mint a felette lévő, aztán megint olyan mint az első stb.
Bocs, azt nem írtam meg, hogy mindez egy UserFormon van. Tehát a VBA képernyőn a Properties ablakban eleve látszanak ezek. És a Userformon arra is van lehetőség, hogy egy elkészült vezérlő (jelen esetben egy TextBox) fölé állva Copy majd Paste paranccsal egy másodpéldányt hozzak létre új névvel.
Egyébként aztán a lényeges tulajdonságait (helyzet /Top/Left/, szélesség, magasság, betűméret ) programból állítom be egyformán, így nem jöhet szóba különbség.
Meg különben is, ha ugyanazt a programot használom, akkor elvárnám az Exceltől, hogy ha eltér két Boxban a betűméret, akkor az térjen el minden képernyő felbontás mellett.
(Éppen ezen dolgozom már jó ideje, hogy bármilyen képernyőn azonosan nézzen ki a programom által kezelt Form. Ezért a programmal beolvasom az elején a teljesre állított Applikáció méreteit a magasságot és a szélességet, és az egyes vezérlők helyzetét soha sem fix képernyőpontban adom meg, hanem a képernyőről kiolvasott adatokhoz viszonyítva. Tehát az 1200 képpont szélességű laptop közepe 1200/2=600, az 1600 szélességű monitor közepe 1600/2=800. Ha ide akarok írni egy 10 karakteres szöveget, akkor az 5 karakternek megfelel képponttal balra kezdődik. Figyelve arra, hogy az 5 karakter az szám, kisbetű, vagy nagybetű. Így bármelyik gépen fut a program, ami középre kell, az majdnem pontosan középen lesz. Ugyanezt alkalmazom függőlegesen is. Kissé bonyolult számolgatást igényel, de működik)
Szóval ezek miatt gyanakszom arra, hogy a különbségeket valamilyen módon hardver eltérések is okozhatják.
A munkalap (minden cellájának) betűtípusa, (stílusa) formázása egyforma?
Bár a cellánként eltérő betűméret (ugyanazon munkalapon és felbontás esetén), akkor is furcsa jelenség – annak (méret)helyessége, mint minimum, elvárható volna.:-)
Sziasztok. Újabb érthetetlen jelenség Excel programozásakor, bár lehet, hogy nem is az Excel a ludas. Egy bizonyos helyzetben szükségem volt arra, hogy egyes Textboxokat megtöbbszörözzek. A többszörözés az első TextBoxból Copy/Paste technikával történt, majd értelemszerűen külön neveket adva nekik.
A program egy másik pontján arra volt szükségem, hogy a legfelső boxban lévő adatot bemásoljam az alatta lévőkbe (sőt még enablad = False segítségével, csak láthatóvá tegyem. (A munkát egy 1280x800 felbontású laptopon végeztem. Ennek mindjárt lesz jelentősége)
A másolás elvégzése után a következő kép fogadott:
Eltérő méretűnek látszottak az egymás alatti boxokban az azonos adatok. Minden következetesség nélkül. Órákat töltöttem az ok keresésével. Másoltam a tartalmán kívül a .font.size tulajdonságot, aztán a box méretadatait (Width és Height), de semm eredmény. Arra gondoltam, hogy esetleg van valami rejtett - betűméretet meghatározó - tulajdonsága a Boxba írt szövegnek.
De ekkor felszabadult az asztali gépem 1600 x 900 felbontású monitorral, így azon folytattam a munkát. És elindítva a programot, ugyanarra a helyre érve a következő kép fogadott:
Minden rendben. Az átmásolt adatok azonos méretben jelennek meg minden boxban.
Érti ezt valaki? Esetleg kérdezzem meg a hardveres topikban?
Kipróbáltam de sajnos ugyan az a helyzet. Nem tűnik el a dátumozott oszlop de furcsa sárga színnel kijelöli a dátum celláját a google táblázatban! Nem értem! Először még úgy láttam hogy működött. Bár excel programba hibátlanul működik csak a google táblázatban nem sajnos. Van még ötletetek?
Köszönöm szépen! A felső sorokba került a kérdések sorszáma, alatta vannak a válaszok. Tehát a 3.oszlop (=3. Kérdés) érdekel, szeretném kiválasztani azokat akik a 2-es választ adták.
Tehát a szűrés az lenne, hogy 3. Oszlop ahol 2 szerepel.
Este tudok képet is küldeni, de ahhoz a géphez amin dolgozom csak este férek hozzá.
Módosítottam a sorokat, hogy a képlet jó legyen de sajnos ugyan az a bajom! Amikor berakom a táblázatot akkor szépen működik a feltöltés után a dátum eltüntetős képlet de amint eltelik egy nap már nem tűnik el és kijelöli hülye sárga színnel mint az alábbi képen! Van valami ötletetek?
Ennyire nem értek hozzá! Amikor beraktam akkor kezelte először és eltűntette az oszlopokat, de csak akkor amikor beinportáltam, aztán másnap már nem :D A google sheetbe is ugyan ezt a kódot kell beírni? Köszönöm!
Abban kérném a segítségeteket, hogy egy pivot táblának szeretném frissíteni a dátum szűrőjét, sajnos ez nem sikerül. Egy változóból szeretném megadni az értéket, de hibára fut.
Sheets("Pivot Aspen Accrual").Select ActiveSheet.PivotTables("PivotTable3").PivotFields("Report Month").CurrentPage _ = "(All)" With ActiveSheet.PivotTables("PivotTable3").PivotFields("Report Month") .ClearAllFilters .PivotItems(Z).Visible = True End With Range("D8").Select End Sub
Error:
hiba 1004 unable to the set visible property og the pivotitem class
Akkor is hibát jelez, ha felveszem a szűrő frissítését, majd makróval akarom futtatni,
hiba 1004 unable to the set visible property og the pivotitem class
Segítségeteket szeretném kérni. Nemrég ugyan itt segítettetek abban, hogy az excel a bedátumozott sorokat eltüntesse. Akkor ezt kellett tennem, hogy működjön:
A VBA nézetet az Excel munkalapról az Alt + F11 kombóval tudod előhívni. Utána kattints kettőt a Thisworkbook névre. Ezután bemásolhatod:
Private Sub Workbook_Open()
Dim i as Long i = 2 Do While Sheets("munkalap").Cells(2, i).Value < Date Cells(2, i).EntireColumn.Hidden = True i = i + 1 Loop End Sub
Mentés gomb – nem-re kattintani - A fájlt makróbarátként (xlsm) vagy binárisként (xlsb) kell mentened a mentés másként opcióval.
Ez működött is az excelben, de felraktam a google táblázatokba, hogy mindenki tudjon jelölni. MAkróbarátként van elmentve, binárisként fel sem ismeri. De sajnos itt nem működik! Március 7-én töltöttem fel egy ilyen excelt, amin feltöltötte rögtön el is tüntette azokat az oszlopokat amik már elmúltak. De feltöltés után egy nappal ránéztem és fura sárga színnel megjelenik a mai nap és az előző nem tűnik el! Tud ebbe valaki segíteni? Esetleg egy másik oldalt ajánlani ahol sokan hozzáférhetünk és működik is? Így néz ki jelenleg:
Szerintem a közönséges ÁTLAG függvény is megfelel ÁTLAG(D2:D149) formában. Az üres cellákat az sem veszi figyelembe, az ÁTLAGHATÖBB által igényelt egyéb kritériumok meg csak speciális igények esetén jönnének szóba.
"Sajnos most nincs ötletem arra, hogy a $B helyett automatizálni lehessen az oszlop változását."
Közben eszembe jutott az elv. Az indirekt függvényben az S1O1 hivatkozással lehet megoldani, de most nincs időm, hogy ki is próbáljam. Majd talán este, vagy holnap, ha addig valaki nem javítja a képletet.
(Magyarázat: A képlet megkeresi az 1. munkalapon az A2 oszlopban lévő cikkszámot tartalmazó sort a 2. munkalapon, majd annak a B oszlopából kiolvassa a neked szükséges adatot és bemásolja a D oszlopba.)
A következő oszlopba a már átjavított névvel használt képletet másold át, de a $B helyett $C legyen. (Ezzel a képlet az 1. munkalap C oszlopban lévő adatát másolja). És így tovább mindig növelve az oszlop nevét.
Ha minden oszlop 2. sora elkészült, akkor jelöld ki az összeset a D-től végig, és húzd le a táblázat végéig.
Sajnos most nincs ötletem arra, hogy a $B helyett automatizálni lehessen az oszlop változását.
Ha a fórumtársak közt van valaki, aki erre is tud megoldást, és akkor nem kell kézzel átírogatni.
A oszlop: cikkszám (ugyanazok mint az 1. Táblazatban)
B oszlop: keszitő neve
C oszlop: minősegi elvárás (egy szam 1től 30ig)
D oszlop: gyartáskor keszleten levő mennyiseg (db)
(És még 30 másik oszlop ami hasonló)
A probléma: a 2 táblazatból szeretnék 1 táblázatot készíteni. A probléma ott van, hogy a cikkszámok nem megegyező sorrendben vannak. A sorbarendezes majd ctrl c ctrl v nem működik, mert az első táblázat egy programból kiexportált fájl, azt szeretném bővítve visszaimportálni, hiába írom át sorbarendezve az 1.t nem fogadja el. A 2. At pedig nem tudom az elsőnek megfelelően sorba tenni, mert az első random sorrendben van. Es van 5400 ilyen sorom...
Valahogy össze lehet fésülni a 2t?
Az egyedüli közös oszlop a cikkszám. (5400 eltérő, így remelem valahogy csak megoldható)
"Ha igen, hogyan?" Ha cinikus szeretnék lenni, azt írnám: Szűréssel. Mert ilyen funkció van az Excelben.
Az igazság az, hogy ehhez többet kellene írnod, arról, hogy milyen módon vitted fel a táblázatba az adatokat.
Ha például az A oszlopba írtad a válaszadók nevét, és a B oszlopba a válaszokat, akkor a fenti Adatok Csoportban a Rendezés és Szűrés alcsoportban a Szűrés gombra kattintasz, ahol megjelenik egy lefelé nyíl minden oszlopban. Ekkor a válaszok oszlopban (pl.B) a nyílra kattintasz, és kiveszed a pipát azokból, ahol nem a 2-es szerepel.
Persze, ha másként töltötted ki az adatokat, akkor más az eljárás. Akkor küldj egy képet a táblázatról, biztos lesz segítség.
Egy kérdőívre adott válaszokat vittem be excel táblázatba.
Ki szeretném szűrni azokat, akik mondjuk a harmadik kérdésre 2-es választ adtak, és a továbbiakban csak azokkal az adatokkal szeretnék dolgozni. Ezt meg lehet csinálni? Ha igen, hogyan?
Lehetséges-e egy Userformon többsoros magasságú Textboxban függőlegesen középre pozicionálni a szöveget? Csak a vízszintest találom (TextAlign).
A valóságos gondom a felső, az alsó csak tévedésből született, de ha már itt van, akkor még jobban látszik a probléma.
Egyébként azért szeretném ilyen magasra állítani a Boxot, mert az előtte lévő rá vonatkozó Labelt szeretném esetenként kétsorossá tenni, és ahhoz jobban passzol a magasabb TextBox.
Az a bajom a bemásolással, hogy megszűnt az egykori tagolt formátum. Amolyan vasvillával behányt lesz a makró.
Function Darabszam(Mintacella, Terulet As Range) Dim CV As Object, db As Integer For Each CV In Terulet If CV.Interior.Color = Mintacella.Interior.Color And CV.Value = Mintacella.Value Then db = db + 1 End If Next Darabszam = db End Function
Egy saját függvénnyel megoldható. Egy modulba másold be.
Az E1 cellába másoltam a megszámolandó adatot, formátummal együtt. A képletet a G1-be írtam. Ennek első paramétere a mintacella (E1), a második a terület, ahol a megszámolandó cellák vannak ($A$2:$A$20)
Egy olyan megoldásra lenne szükségem, ahol adott színkitöltésű és adott szöveget tartalmazó cellák darabszámát számolja meg a függvény, tehát mind a kettő feltétel együttes teljesülésénél számol csak.
Nagyon köszönöm a fáradozásodat, de tekintettel arra, hogy a TakeFocusonClick = False beállítással sikerült megoldanom azt, hogy a Mégse gombra kattintva nem téved rá a vezérlés a BeforeUpdate eseményre, hanem végrehajtja a cmdMegse_Click alatt lévő utasításokat, amivel a program hibátlanul működik, egyelőre nem változtatnék a tegnap éjjel megtalált és működő módszeren.
Egyébként ezt a Property-t én inkább TakeFocusonClickWithoutExecute elnevezéssel illetném, hiszen True beállítással éppen ezt csinálta:-) Nem hajtotta végre, de a Fókuszt rajta hagyta.