Hozzászólások
-
SzerzőBejegyzés
-
Szia Imre!
Sehogy sem sikerült felülírnom a cdatat, az object browserben már mindent kipróbáltam, azonosítani a node-ot, stb..
úgyhogy maradt a favágó megoldás, azaz kiürítettem a meglévő cdata értéket és a createCDATASection paranccsal létrehoztam egy újat.
Végül ez lett a váz:Sub UpdateXML() Dim mainWorkBook As Workbook Set mainWorkBook = ActiveWorkbook Set oXMLFile = CreateObject("Microsoft.XMLDOM") XMLFileName = "útvonal\projectinfo.xml" oXMLFile.Load (XMLFileName) Set oAttribute = oXMLFile.SelectSingleNode("/ProjectInfo/FixKeys/Fix1/value") oAttribute.Text = "" Set ParentNode = oXMLFile.SelectSingleNode("/ProjectInfo/FixKeys/Fix1/value") Set childNode = oXMLFile.createElement("value") Set CData = oXMLFile.createCDATASection("value") CData.Data = mainWorkBook.Sheets("Munka1").Range("B2").Value & " - " & mainWorkBook.Sheets("Munka1").Range("B3").Value ParentNode.appendChild CData oXMLFile.Save (XMLFileName) End Sub
A célnak megfelel, szépen végigfut, a forrásprogram is hibátlanul visszaolvassa, de azért nem biztos, hogy az ilyen megoldásokat kellene mutogatni 😀
Szia Imre!
Egyrészt rosszul gondolod, noha messze nem vagyok egy vba guru, de írtam már pár makrót, jó párat meg összeraktam (pl ez is egy hosszabb vba ellenőrző, fájl betöltő-átíró processzus lenne, aminek a többi része már jobbára megvan).
Másrészt, ami a diagnózist illeti, miszerint hülye vagyok, ezúttal pontos.
Mentségemre szolgáljon, hogy lopott perceimben próbálom ezt összehegeszteni, xml-lel még sosem volt dolgom és arra a meggyőződésemre fókuszáltam, hogy biztosan rossz xml libraryt töltök be, akkor sem kapcsolva, mikor a megjegyzésnél állt le a kód.
Elnézést kérek érte 🙁
Ezek után persze nehéz segítséget kérni, de ha mégis megteszed, nagyon megköszönöm, mert a CDATA értékeket sehogy sem sikerül megadnom, kicserélnem. Mellékeltem az xml fájlt és kb ez lenne a kód váza:Function fnUpdateXMLByTags() Dim mainWorkBook As Workbook Set mainWorkBook = ActiveWorkbook Set oXMLFile = CreateObject("Microsoft.XMLDOM") XMLFileName = "c:\Users\Irbisz\Downloads\Munka\Nevezéktan\out\projectinfo.xml" oXMLFile.Load (XMLFileName) Set oAttribute = oXMLFile.SelectSingleNode("/ProjectInfo/Fix1/value/CDATA") oAttribute.Text = mainWorkBook.Sheets("Munka1").Range("B" & 3).Value Set oAttribute = oXMLFile.SelectSingleNode("/ProjectInfo/Custom2/value/CDATA") oAttribute.Text = mainWorkBook.Sheets("Munka1").Range("B10").Value & " - " & mainWorkBook.Sheets("Munka1").Range("B11").Value oXMLFile.Save (XMLFileName) End Function
Irbisz
- A hozzászólás módosításra került: 4 years telt el-irbisz.
Attachments:
You must be logged in to view attached files.Biztosan kihagyok vagy elrontok valamit. Első körben, mielőtt a saját xml-nek nekiállok ki akartam próbálni, hogy működik-e a megadott kód, ezért letöltöttem a link által megadott minta xml-t (https://msdn.microsoft.com/en-us/library/ms762271%28v=vs.85%29.aspx), majd egy üres excelben a vba tools/references-ben bekapcsoltam a Microsoft XML v6.0 -ot. Ezt követően a weboldalról bemásoltam a kódot és a csatolt kép alapján elakadt (az olvasás amúgy működik).
Attachments:
You must be logged in to view attached files.Szia!
Pontosan ezt szeretném csak excel cellákban kitöltött feliratokra akarom kicserélni az xml egyes értékeit.
Nem tudom, mit csinálok rosszul, de hiába pipálom be a tools/references -ben a Microsoft XML v6.0 -ot, akkor sem fut le a linken leírt makró (fnUpdateXMLByTags meghívásánál elakad).
IrbiszSzia Imre!
Sajnos hiába próbálom tömegesen, kimentésnél nem tudom azt a struktúrát reprodukálni, amit a másik program beolvas.
Az tűnik a legegyszerűbbnek, hogy egy makróval kicseréljem az xml-ben az adott értékeket.
Erre van esetleg tipped, hogyan tudnám vagy merre fele keresgéljek?Köszönöm, Irbisz!
Szia Imre!
Igen pontosan a teljes sémát ki szeretném menteni excelből, függetlenül attól, hogy csak egy részét feleltettem meg és töltöttem ki.
Egész egyszerűen a fejlesztőeszközök fülön a forrásnál betöltöttem a programból kimentett xml sémát, megfeleltettem a számomra fontos adatokat az excel egyes celláival, majd kitöltöttem, de az exportálásnál nem tudom megadni, hogy ne csak a kitöltött cellákat olvassa vissza, hanem azokkal együtt az egész sémát.
Microsoft XML v6.0 -ra gondolsz? …nem gondoltam, hogy pár érték oda-vissza írásához ilyen nagy fába kell vágnom a fejszét 🙁
PQuery nem lehet megoldás vagy akkor kezdjek neki VBA-ban?Irbisz
Szia Imre!
Ugyanúgy az adatlapokat szeretném összefűzni elforgatva egy adatbázissá.
De közben valamelyest megértettem a query működését, miszerint egy mintafájlon kell a lépéseket elvégezni, amit utána végigvezet a többin is.
Így sikerült megoldanom, hovatovább egy kis átrendezés után az eredeti hosszú adatbekérőkkel is működik:)
Valóban jóval egyszerűbb és gyorsabb megoldás, mint makróval.
Köszönöm, Irbisz!Szia Imre!
Abban kaphatok egy kis segítséget, hogyan tudom az elsőn „Név” felül a többi azonos sorokat is egyesíteni megszüntetve a „Null” cellákat.
Képet mellékeltem.
IrbiszAttachments:
You must be logged in to view attached files.Szia Imre!
Köszönöm a segítséget, makróval így már összeállt.
„Tehát a mappából történő összefűzés klasszikus estével állunk szemben.” – ezért sem értem, miért nem alkalmas rá a query:(
A valós adatlapok természetesen jó sok információt tartalmaznak, de struktúrájuk megegyezik azzal amivé leegyszerűsítettem. Az átalakításuk, azonban nem jelentene gondot, mert csak egyszer kellene nekifutni és utána rengeteg időt lehetne megspórolni, hovatovább más adminisztrációs feladatoknál is tudnánk alkalmazni, ami számomra is jobb és kényelmesebb megoldásnak tűnik a makrónál.
A PowerQuery-nél viszont elakadtam, mert nem jöttem rá, hogyan lehet megadni, hogy az egyes adatlapok bal oldali oszlopát kiemelve csak egyszer véve alakítsa át a táblázat fejlécévé.Irbisz
Szia Imre!
Köszönöm a kifejezést, így már valóban sikerül a táblázatból megtalálnom az adott oszlopokat.
Igazából nem pont ez a problémám, csak annyira témába vágott, gondoltam egyszerűbb, ha idefűzöm a kérdésem.Sziasztok!
Azt szeretném megkérdezni, hogy ha bővül a lista (pl a pálinkához felkerül a törköly…tudom Én sem rajongok érte), csak táblázattal lehet megoldani, hogy frissüljön a legördülő lista? Ugyanis mikor képletet használok a névkezelőben (index, utolsó sor hol.vannal), az indirekt függvény megadja magát (nem tudom, miért). Ha viszont táblázat (teszem azt „szeszes italok”), hogyan lehet megadni, hogy melyik oszlopából készítse a legördülő listát?
Előre is köszönöm a segítséget!🙁 Ha makróval transzponálom, akár már be is másolhatom egy új fájlba és kész az adatbázis. A problémám, hogy minden egyes adat megváltoztatásánál újra le kell futtatni. Feltételezem 100 adatlapnál már elég lassú, valamint nem vagyok róla meggyőződve, hogy az adatbázisból lekérdezett pivottáblák nem vesztik el a hivatkozást (bár mivel a táblázatnév nem változik várhatóan nem).
Szia Imre!
Elnézést, hogy kissé megkésve, de a munkák meg a nyaralás elvette az időmet és csak most jutottam oda, hogy elővegyem.
Ez a PowerPivot valóban jó megoldás lehet, más kérdés, hogy adatbázist kell tölteni és elvész a vizualitás.
Amit viszont nem sikerült megoldanom, hogy a túlóra számított oszlopában összefüggjenek azok a sorok, ahol egy ember egy nap több projekten vagy azon belül több tevékenységen dolgozik, hiszen a túlóra oszlop csak a hétvégét és a 8 órát meghaladó tevékenységet veszi figyelembe, ha valaki egy nap több mindent csinált, ami ugye több sor, azt nem.Vince
Szia Imre!
Köszönöm a választ. Természetesen érdekel, a formátumhoz nem kell ragaszkodni.
Vince
Végül megoldottam. Elég hosszú és körülményes képlet. Nem tudom, hogy lehetne egyszerűsíteni? Megszámolni a projektben résztvevők számát és ahhoz igazítani, hogy hányszor vegye a képletet csak makróval lehet?
Kicsit átrendeztem a táblázatot
=HA(HÉT.NAPJA(F10;2)>5;SZUM(F11:F23);
HA(SZUM(INDIREKT(CÍM(KICSI(SOR($A$11:$A24)+(100*($A$11:$A24=””));1);OSZLOP(F10))):INDIREKT(CÍM(KICSI(SOR($A$11:$A24)+(100*($A$11:$A24=””));2)-1;OSZLOP(F10))))>8;SZUM(INDIREKT(CÍM(KICSI(SOR($A$11:$A24)+(100*($A$11:$A24=””));1);OSZLOP(F10))):INDIREKT(CÍM(KICSI(SOR($A$11:$A24)+(100*($A$11:$A24=””));2)-1;OSZLOP(F10))))-8;0)+
HA(SZUM(INDIREKT(CÍM(KICSI(SOR($A$11:$A24)+(100*($A$11:$A24=””));2);OSZLOP(F10))):INDIREKT(CÍM(KICSI(SOR($A$11:$A24)+(100*($A$11:$A24=””));3)-1;OSZLOP(F10))))>8;SZUM(INDIREKT(CÍM(KICSI(SOR($A$11:$A24)+(100*($A$11:$A24=””));2);OSZLOP(F10))):INDIREKT(CÍM(KICSI(SOR($A$11:$A24)+(100*($A$11:$A24=””));3)-1;OSZLOP(F10))))-8;0)+….és így tovább 20 főig vittem le.Lehet, hogy az lesz a megoldás, bár nem tudom pontosan, hogy gondolod. Az is megoldás lehetne, ha egy sorba tudnám a túlórákat egyesíteni, amit elrakok a felső sorba. A helyzetet nehezíti, hogy a munkarészek és a résztvevők száma is változik projektenként a sablonból meg minden projektvezetőnek létre kell tudni hozni az adott projekthez a táblázatot és a képletek másolása mindig hibaforrás.
Szia Imre!
1. Igen, pont ez a problémám, hogy a képlet miatt nem lóg át, de ha jól értem ez akkor nem orvosolható.
2. Köszönöm a megoldást, de azt szerettem volna elkerülni, hogy még két sort be kelljen szúrni (valaki biztosan bele ír a cellákba és eltűnik a képlet),
pusztán a jobb oldalt található „Ebből túlóra” cellához kívántam egy képlettel (tömbképlettel) összegyűjteni a túlórákat.Vince
-
SzerzőBejegyzés