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.
Ugyanazt a számot tekintheted előjeles és előjel nélküli egésznek is. Maga az 11111111 nem egyértelmű, ha nem rendeltél típust hozzá. A legtöbb nyelv ismeri a "signed int" és "unsigned int" típusokat ugyanannyi biten (bár ez éppen C-s megnevezés). Viszont ha -1-nek tekinted, az bitszámtól függetlenül minden egész típusra jó lesz, ha meg előjel nélkülinek, az 8 biten 255, 16 biten 65535 stb. A -1 meg örök és megbonthatatlan. :-)
Előjeles: -128 - +127
Előjel nélküli: 0 - +255
stb. több biten is.
Egyébként az előző hozzászólásomban az az érdekes, hogy beírás közben jöttem rá magam is. :-)
Hm. Nem tudtam. Igaz, vba-ban sosem használtam. Viszont most esett le a tantusz, hogy retro image miért írt egy régi hozzászólásában valami ilyesmit: a=-(b=c) *d. Kösz.
Régi BASIC-es hagyomány az igaz értéket -1-nek venni. Ennek az az alapja, hogy ha egy byte-ot (szót stb.) feltöltünk csupa egyes bittel, akkor a kapott szám előjeles egészként -1-nek felel meg. Vagyis ez az a szám, amelyiknek minden bitje 1 (és így pl. a bitenkénti logikai műveletekben is feltétlenül igaz értékként viselkedik).
Az igaz viszont a munkalapon = 1, VBA-ban pedig = -1.
Próbáld ki a VBA-ban a True * 1 kifejezést. Eredmény: -1.
Csak nyilván, nagyon ritkán "számolunk" vele, inkább használjuk a logikai "értéket". Pedig, mint az adott példa mutatta, egyszerűbb is lehet a képlet esetenként, ha számnak tekintjük.
Apropos: Hogy-hogy nem ugyanaz a szám van rendelve az igaz/hamis-hoz a vba-ban és a munkalapon? Én idáig abban a hiszemben voltam, hogy a hozzárendelt számok mindkét helyen 1 és 0.
Meg lehet. De attól függően, hogy mik az érényesítés feltételei, lehet egyszerű vagy komplikált. Lehet, hogy simán alkalmazható az excel Adatok/érvényesítés parancsa, de lehet, hogy önmagában nem elég, és makrót kell az érvényesítéshez írni. Ezért első lépésben nézd át az említett parancsot, és ha az nem elég, akkor írd meg a konkrét előírásaidat.
Fferinek igaza lehet. De nem csak az excel nyelve lehet eltérő a két gépen, hanem a területi beállítások is. Írtam a korábbi hsz-emben, hogy hiába copy pasteltem be a Lin.ill súgó mintapéldáját, az én gépemen nem működött. Azóta rájöttem, hogy miért nem. Hát azért, mert a súgó példa magyarított példa volt, tizedesvesszővel. Én meg a saját gépemen tizedespontot használok. Így mintapélda tizedesvesszője miatt az excelem néhány számot stringnek értelmezett, amit a Lin.ill nem akceptál. Nos ilyen banális beállítási hibákra is vadásszál.
De hagy kérdezzem meg újra: hogyan kell a kitevőket kapcsos zárójelbe tenni?
Van egy kérdőív, ahol a válasz legördülő listából "igen" és "nem" lehet.
Értékelésnél adott válaszoknál az "igen" válasz érhet 1 vagy 2 pontot kérdéstől függően, a "nem" mindenhol 0 pontot ér.
Cél, a listából kiválasztott "igen" választásánál a kérdéshez tartozó 1 vagy 2 ponttal számoljon a táblázat, "nem"-nél 0 ponttal a mellette levő oszlopban.
Próbáltam képletek / definiált nevek / kijelölésből új opciót, ahol volt a listában
"igen" - "igen." - "nem" , Hozzárendelt számok 1-2-0.
Viszont, választás után mégsem tudta számként értelmezni a mellette levő eredmény oszlop.
Lehetséges ezt kivitelezni valahogyan?
A választ előre is köszönöm, képet csatoltam róla.
Ami az ékezetes változókat illeti én már beleütköztem a problémába. Idén egy bő fél éven át egy tagnyilvántartó programot írtam. Ez zömmel interaktív, amit userformokkal oldottam meg. Aztán amikor a program egy angol nyelvű office-t használó kollégám kezébe került, előjött, hogy nem fut a progam. Pontosabban Lost Visual Basic project hibát jelzett. És néhány nap kellett, míg kiderítettük, hogy a hibát a Userformok és a rajtuk elhelyezett ékezetes objektumok okozták. Ezeket néhány órás munkával kijavítottam, szerencsére a függvények és változók nevével nem volt gondja az Excelnek.
Szóval igazad van, és rossz szokásom, hogy használom a kódban az ékezeteket. Lám hová vezet a féktelen nacionalizmus:-))) Még szerencse, hogy nem rovásírást használtam:-)
Szóval ebben is egy nagy elhatározásra lenne szükségem, hogy ezentúl leszokjak az ékezetek használatáról a programkódokban.
Hogy még szebb legyen, egyáltalán nem kell aktívnak lennie a munkafüzetnek sem:
Az előzőekben leírtak akkor is működnek, ha a
Workbooks(wbnév).Activate
sort kihagyod.
Hiszen ws.parent.name = wbnév. (Azaz a ws munkalapod a wbnév nevű munkafüzetben van!)
Még egy tanács: én abszolut nem használom az ékezetes változókat, mivel nem hordozható. Nem tudhatod, hogy egy másik gépen milyen windows fut. Ha nem magyar, akkor az ékezetes, pláne a két pontos, vesszős betűk jól bekavarhatnak.
Ezt valóban nem tudtam. Egyébként amióta többen leírtátok, magam is kerülöm a select használatát, viszont tartományban történő keresésnél egyelőre nem tudom kiváltani:
Nagyon kevés az olyan művelet, amit csak select után lehet végrehajtani. Általában erre nincs szűkség, "üldözendő" jelenség a kódban. A makrórögzítő utáni kódból ezt kell legelőször kitakarítani. (Meg az olyanokat, mint scroll...)
A select pont az a metódus, ami csak az aktív munkalapon/objektumon működik. Bár erre a help-ben nincs utalás, nagyjából logikus, hogy csak azt választhatod ki amit látsz. (A makró rögzítő ugye teleszórja select-tel meg activate-val a kódot, hogy megmutassa, mit is csináltunk, de ezt nem kell utánozni a vba kódjainkban.)
Ezért is írtam, hogy az értékadás működik akkor is, ha nem aktív munkalap egyik szereplője sem. A copy is működik így. Tehát azt kell végig gondolni, hogy melyik utasítás az, amelyhez feltétlenül kell az aktív munkalap. Erre vagy van a help-ben utasítás, vagy előbb-utóbb kiderül a gyakorlatban.
szuper, eddig működik már csak azt hogy csinálom meg, hogy úgy listázza ki külön, hogy eltüntesse a "duplikációk"? tehát most az 500 soromból lett 700 és szépen ott vannak a tulajdonságok, van amelyikből van 100 is. Mert most ha beírom a darabtelit és végighúzom, akkor ugye ott van a 100 egymás alatti tulajdonság mellett, hogy x tulajdonságból van 100 darab
Mi sem egyszerűbb: Egy teljeles üres munkafüzetben egy modulon a következőt elindítom:
Option Explicit Sub Ellenőrzés() Dim ws1 As Worksheet, ws2 As Worksheet Application.DisplayAlerts = False ' figyelmeztetések kikapcsolása Set ws1 = Workbooks("teszt.xls").Worksheets("Munka1") Set ws2 = Workbooks("teszt.xls").Worksheets("Munka2") ws1.Activate ws2.Range("A1").Select End Sub