Nekem ennek egy olyan programban kell működnie, ahol egy munkalap oszlopaiból egymást követően kell adatokat beolvasni, ezeket dolgozza fel a számítás, majd a kapott eredményeket egy másik munkalapra kell egymás mellé kiírni.
Azaz a programban az oszlop számát kell dinamikusan változtatni. A parancssort a program jól működő részéből másoltam ki, ami parancssor egy makró rögzítésből származott. Ha a sorokat változtatom dinamikusan, azzal nincsen problémám, de az oszlopok változtatásának szintaxisát nem tudom, és az eddigi kísérletezéseimmel még nem is találtam meg.
Éjjel őrült módon teszteltük, és úgy néz ki elcsíptük...
Jelentősen visszabontva kezdtük el az alapmegnyitást használni. Arra jutottunk, hogy a 10 lapból ha 4 megvolt, akkor a hiba jelentkezett. Ha azokat kitöröltem, nem jelentkezett a hiba.
Most építgetem vissza, és meglátom, hogy megtartja-e a működést.
Az adatok magában a munkafüzetben vannak 8 munkalapon. A form részben oda viszi be (részben a felhasználó által megadottakat, részben egyéb logika alapján), majd bizonyos feltételek alapján onnan olvas vissza adatokat, majd meghatározott helyen mappát hoz létre, abban egy másik Excel fájlt tatalommal feltölt, végül a körlevél gondolat alapján "jelentést" készít.
Ez egy ismert bug (feature) Windowson. A hibaüzenet fura, de végső soron azt jelenti, hogy egy filet olyan applikációval próbálsz megnyitni, ami valamiért ezt nem tudja megtenni.
Néha win update után jelentkezik ez, mert valamiért átállítódnak a default applikáció megnyitások.
Az Excel az egyik olyan alkalmazás, ahol ezt a hibát sokan jelezték.
Próbálok segíteni, ha tudok.
Előszór is egy kérdés: az adatok, amiket használsz honnan jönnek? Valamilyen külső fájból?
Ezt eddig úgy oldottam meg, hogy megnyitáskor egy Start makró a fenti példának megfelelő With-tel végigment a lapokon, kitöltötte magát, majd megjelent.
Egy ideje időnként megnyitáskor szó nélkül bezáródott, még debugot sem engedett.
Akkor azt gondoltam, hogy szétszedtem a With Multipage részeit, és a lapokra tettem rá egyenként. Vagyis a Startban csak egy lapnak hagytam meg a kitöltését, a többi a lapra való kattintással aktíváltam....volna :-(
Ám itt időnként újra csak behalt. "A meghívott objektum levált az ügyfeleiről" és ezt a hibaüzenetet adta. A legkülönféle soroknál állt meg. Az egyik lapon a dátumnál, egy másiknál a felhasználónál, egy harmadiknál, ha a munkafüzetből kellett kiolvasni valamit. De van olyan lap, aminek a listboxa egy szűrést követően hiba nélkül kitöltődik.
A hibajelenség nem teljesen konzekvens. Egy megnyitásnál jó, majd egy következőnél nem. Illetve azt figyeltem meg, hogy ha megnyitom az Excelt teljesen, ÉS belépek a VBA felületére, rákattintok duplán a userformra, majd ezután futtatom, akkor minden jó. Próbáltam a load és a show lehetőségeket kombinálni, cserélni, de semmi. Már levettem teljesen a Before Close-t, hogy ne az legyen, hogy a bezárás kavar bele valamit, illetve változtatja meg a megnyitásra, de semmit sem találok.
Ami végképp őrület, hogy a saját laptompomon (Win10, Office2019, 32 bit) hiba nélkül fut, a cégesen (Win10, Office2016, 32 bit) produkálja a fenti hibát. A VBA References között mindkét gépen ugyanazok vannak pipálva. Egy korábbi "iktatóra" tettem plusz funkciókat, és január 1-jével terveztük beállítani. Az extra dolgok remekül működnek, ez a fránya megnyitás vacakol.
Solidworks (3d modellező program) 2013-as programal illetve a VBA-val kapcsolatos kérdésem van. Van egy spline-om, amire ráhelyeztem 100 db pontot. Létrehoztam egy koordináta rendszert. A pontok koordinátái érdekelnek engem ebbez a koordináta rendszerben. A measure ablakban ezt meg is tudom csinálni. A gond az, hogy 10 db van, és egyesével copy/paste kicsit hosszadalmas. Ezért segítségül hívtam a VBA-t amivel szépen ki tudom gyűjteni a pontok koordinátáit egy excel munkafüzetbe. A probléma, hogy ezek a koordináták az Origin-hoz képest vannak, nem az én általam létrehozott koordináta rendszerhez.
A kérdés, hogyan tudom automatizálni a pontok koordinátáinak kimentését az általam megadott koordináta rendszerben?
Igen ebben teljesen igazad van de én naivan azt hittem hogy csak egyszerűen létrehozom a táblázatokat feltöltöm őket texboxokkal utána pedig találok valami egyszerű megoldást a mentés kialakítására, de úgytűnik hogy tévedtem. Azt majdnem elfelejtettem hogy egy olyan funkciót is szeretnék bele, hogy ha betelt mondjuk egy adott oldal akkor egy gombra kattintva létrehozza a következő teljesen ugyan ilyen oldalt amibe folytatni lehetne a töltögetést, illetve lehessen is visszalapozni az előző oldalra. Erre esetleg valmai ötlet?
És tényleg nem tudom elégszer megköszönni hogy segítesz!
Microsoft Visual Studio 2010et használok és azért nem tudsz semmit az eddigi munkáimól mert ez lenne az első :) Elküldtem a projectet tömörítve és köszi szépen hogy megnézed! A bal felső sarokban a gombok elhelyezése/kinézete nem végleges csak ott próbálkoztam a mentés funció életre keltésével.
Mindamellett megjegyzem, hogy a programozás megtanulásához nem a legjobb módszer egy elég fogós feladaton tépelődni, a lépésről lépésre módszer nagyobb hasznot ad.
És az meglehet csinálni hogy amit létrehoztam projektet azt összehozom valahogyan az activex-el vagy totál előlről kell kezdenem az egészet? (A táblázatok létrehozása textboxokkal feltöltése stb)
Hát magamtól biztos nem fogom tudni megírni a mentés töltés kódját mert tényleg segghülye vagyok hozzá. De akkor végül is miféle activeX vezérlőtjavasolsz? Vagy van esetleg másik megoldás is? Mert végül is nem csak a táblázatban szereplő adatokat szeretném ha elmentené hanem magát az összes táblázatot a módosításokkal együtt, szóval ha egyszer újra megnyitom akkor a módosításokkal együtt jelenjenek meg a táblázatok.
Az exe az executable = végrehajtható programfájl-típust jelenti, te viszont a táblázataidban lévő értékeket akarod elmenteni, vagyis csak adatot. Vagy magad megírod a mentés-visszatöltés folyamatát végrehajtó kódot, vagy keresel valami olyan activeX vezérlőt, amely előre programozottan és egyszerűsítetten kezeli az adathalmazt.
Ne törekedj arra, hogy az adatot kizárólag az exe tárolja, bár lehetséges ezt is megoldani. Csakhogy ekkor más programmal nem férsz hozzá saját adataidhoz, míg az exétől függetlenül tárolva ez lehetséges.
Egy kiss segítségre lenne szükségem! A következő a helyzet. A programban amit készíteni próbálok, találtható 4-5 táblázat(tablelayoutpanel) amikben van egy csomó textbox. A következőt szeretném elérni: Megnyitom a programot már *.exe-ként ,beírok valamit egy textboxba és a változtatást szintén .*exe formátumban szeretném ha elmentené azzal együtt amit a textboxba begépeltem. Próbáltam utána járni a dolognak, de csak a SaveFiledialogról találtam dolgokat, de ha jól értelmeztem azzal csak képet illetve txt-t lehet elmentetni. Mivel lehetne véghezvinni amit én szeretnék csinálni?
Bocsánat utólag is a hülye kérdésért de nem vagyok valami nagy visual basic mágus (de ez igaz bármelyik programozási nyelvre). Tulajdonképpen 0 alaptudással áltam neki a dolognak egy tankönyv segítségével, de itt hátha tud nekem segíteni valaki!
A gondom egy 9x9es táblázat lenne. Hogyan lehet ezt a legkönyebben megoldani? Sudoku készítéséhez kellene mert nem szeretnék 81db text boxot lerakni a 16x16 elem még időigényesebb lenne :) Visual basic 6.0ban kellene a megoldás mert ezt tanuljuk de osztályokat nem vettünk.
Talán mert ez nem valódi elem, hanem majd a form előtt fog megjelenni előugróként, ha pl. egy megfelelő gombra kattintasz, és annak klikk eseményébe elhelyezted a kódot.
Eddig csak Excelnek a visual basic felületén gyakorolgattam a programozást, viszont valamilyen "programkinézetet" ráhúznék, ezért leszedtem a Visual Basic 2008-as progit.
Olyan problémám van, hogy amikor a Formra rajzolnék pl. egy OpenFileDialog toolt, akkor nem teszi rá, hanem a Form alatt kiírja a nevét.
Az alap tooloknál nem csinálja ezt.
Mi lehet a probléma? Be kellene állítanom valamit?
Látatlanba', a lenti (dicséretes módon eredeti:-)) dokumentáció alapján, fogja a Target ranget és az L:S oszlopok alkotta ranget (ebben elvileg az összes cellát, ami azért elég tetemes...) és veszi azokat a cellákat, amelyek mindkettőben szerepelnek, és valamit szöszöl velük -
a not és az is nothing viszont kicsit zavar, a trükkös szintakszisok miatt.
A not nehezen értelmezhető egy range-en, mert a not egy logikai operátor - de a visual basic sötétebb trükköket is csinált már.
Talán inkább az jelenti, hogy "ha az intersect eredménye nem Nothing " akkor csináljon valamit.
Vagyis ha a Target range belelóg az L:S oszlopokba.