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.
A bállításokat a Userform inicializálásánál próbáltam. Valahogy így:
Private Sub UserForm_Initialize() Dim text As String text = "Itt olvas be adatállományból egy hosszabb" & Chr(13) & "előre összeállított" & Chr(13) & Chr(13) & _ "szöveget ahol a sorok elválasztására néha egy, vagy két bekezdésjel szolgál" & Chr(13) & Chr(13) & _ "Végül még felteszi a kérdést, hogy véggezzen-e el valamilyen műveletet, vagy sem." SzovegDoboz.Value = text SzovegDoboz.MultiLine = True SzovegDoboz.ScrollBars = fmScrollBarsHorizontal SzovegDoboz.WordWrap = True SzovegDoboz.AutoSize = True End Sub
Miközben ugyanezt a feladatot a következő sorokkal könnyedén megoldom:
Set uzenetdoboz = CreateObject("Wscript.Shell") valasz = uzenetdoboz.Popup(text, 0, cimszoveg, 4)
Ahol a valasz értéke 6, ha az Igen, 7 ha a Nem gomot választotta.
Mutatnál valamilyen kódrészletet a texbox ügyében, mert az autosize és a scrollbar kellene, hogy érvényesüljön, hacsak nem gátolod meg valamivel (pl. Te adsz neki értéket: "If you manually change the size of a control while AutoSize is True, the manual change overrides the size previously set by AutoSize.")
Lehet, hogy valami ilyesmi játszik veled "ördögöt".
Kösz a makrónévadási szabályokat. Az persze nincs köztük, amit nekem sikerült roppant kreativan megszegni :))). Vagy legalábbis nem látom köztük, hogy a cellahivatkozásként is szóbajöhető betű + szám kombinációk használata sem igazán szerencsés.
Viszont sajnos valamiért nálam nem működik az AutoSize. Azt tapasztalom, hogy az egyébként megadott Width és Heigth adatot 1-1.5 értékkel (azt hiszem pixel) módosítja, de nem látom, hogy köze lenne a benne szereplő szöveg méretéhez.
És úgy látom, hogy a ScrollBars beállítás sem eredményez Scroll Bar-t akkor sem, ha szükség lenne rá.
Szóval nem tudom, mit bénázok el, de most hogy a napom nagy része elment vele szégyenszemre átmenetileg feladom, mert holnapra szeretnék eredményt produkálni.
Ezért visszatérek a Popup technikához, ami egyetlen parancssorral egy MsgBox-ra emlékeztető képet ad. Amig ki nem derül, hogy valami gond van vele.
Próbálgatással kiderítettem, hogy miként tudom a konstansokkal befolyásolni a működését. Például azt, hogy OK, OK/Mégse, Igen/Nem, Igen/Nem/Mégse stb válaszra várjon (7 féle van), valamint azt, hogy a válasz hiányában elkapja-e a képernyőt, vagy sem, és ha igen, mennyi idő után. Ráadásul függvényként használva visszaadja a választott gombnak megfelelő konstans értékét (Igen=6, Nem = 7 stb.). És eddig nem találtam meg azt a hibát, amire az MrExelbeli válaszadó azt írja, hogy "AutoDismiss sometimes dosen't work ?". Lehet, hogy csak arra gondolt, hogy az adott konstans bizonyos értékek megadását nem fogadja el. Én mindenesetre csak a 0 értékkel használom, amivel vár a program a válaszra. Nyomjon már gombot az a fránya felhasználó:-)
Szóval köszönöm a segítő szándékot, de nekem most nem jött össze az alternatív (talán szabályosabb?) megoldás.
Néha a legkézenfekvőbb dolgok kerülik el az ember figyelmét - de sokszor jártam így én is.
Másrészt, ha a képek tulajdonságai részben azt állítod be az objektum elhelyezésénél, hogy az objektum helye és mérete nem változik, akkor rendezheted akárhogy, mindig ugyanott marad.
Tehát a rendezés csak akkor működik így, ha az objektum elhelyezése : áthelyezés a cellákkal de a méret marad, vagy áthelyezés és méretezés a cellákkal együtt.
Mertem remélni, hogy nem az első verzió van nálad.
Gyors leszek. A-Z rendezés esetén a képek ugyanott maradnak. Lehetséges hogy rendezés során adott szöveg mellé adott eredeti kép kerüljön? Ha igen hogyan?
Kösz. Azt tudom, hogy a textbox méretét tudom szabályozni, csak az a nehézségem, hogy a szöveg leghosszabb sora alapján megadjam a szélességet, és a sorok száma alapján a magasságot. Egyszer már bütyköltem a szélesség beállítással egy többoszlopos listboxnál, és úgy emlékszem, hogy gondjaim voltak vele. De majd előszedem, hogy végül mire is jutottam.
Az idézett mondatot olvastam, de őszintén szólva nem tudtam mit kezdeni vele. Különösen, hogy még ő maga sem biztos a dolgában, hiszen kérdőjelet tett a megjegyzés végére.
Szerintem külön userform kellene a textboxnak. Akár még úgy is nézhet ki, mint egy MsgBox. A form méretét, rajta a textbox méretét szabadon változtathatod runtime a Height és Width tulajdonságokkal, és a textbox tartalmazhat görgetősávot.
A scriptinges megoldásban van egy sor, amire felhívnám a figyelmedet:
'// Scripting MsgBox, AutoDismiss sometimes dosen't work ?
És még valami. Úgy láttam, hogy a popup ablak dinamikusan méreteződik, azaz alkalmazkodik a benne lévő szöveg méretéhez, úgy a sorok hosszát, mint az ablak magasságát illetően. Nem vagyok biztos abban, hogy ezt a textboxnál is meg tudom-e valósítani. Mert a kevés szöveg egy nagy ablakban nem mutat jól, a sok szöveg túl kis ablakban szintén kényelmetlen, ha sokat kell scrollozni.
Át sem gondoltam. Az újdonság varázsa, és az egysoros parancs lehetősége miatt csak ezt próbálgattam. De akkor majd megnézem textbox-al is. Úgyis egy userformról hívom meg a programrészletet, ahol használni akartam.
Miért kérdezed? Láttál már név nélküli makrót? Legalább egy karaktar kell és az betű legyen. Bővebben idézet a VBA helpből (már megint, de én is innen szoktam okos(k)odni...):
You can't use a space, period (.), exclamation mark (!), or the characters @, &, $, # in the name.
Name can't exceed 255 characters in length.
Generally, you shouldn't use any names that are the same as the functions, statements, and methods in Visual Basic. You end up shadowing the same keywords in the language. To use an intrinsic language function, statement, or method that conflicts with an assigned name, you must explicitly identify it. Precede the intrinsic function, statement, or method name with the name of the associated type library. "
Sziasztok, beleütköztem a következő problémába: Változó mennyiségű üzenetet szeretnék a felhasználóhoz eljuttatni. Ehhez az MsgBox nem alkalmas, mert benne korlátozott az elhelyezhető szöveg mennyisége, és egyes esetekben még a választ lehetővé tévő gombok sem látszanak.
Találtam az interneten egy megoldást (http://www.mrexcel.com/forum/excel-questions/383208-scroll-bar-message-box.html), ahol a scriptinget ajánlja a válaszadó. Kipróbáltam, de nem találok a paramétereiről használható leírást. A megadott konkrét példával pár másodperc múlva eltűnik a doboz a képernyőről, miközben én választ várnék a felhasználótól.
Két kérdésem lenne. Az egyik az, hogy egyáltalán használható-e ez a technika a környezettől némiképp függetlenül. Mert úgy látom, hogy talán nem az Excel, hanem a Windows szolgáltatása.
A másik, hogy hol találok egy kicsit részletesebb leírást ennek a technikának a használatáról? Mert próbálgatással már sikerült ugyan megállítanom a képet az OK megnyomásáig, de azért jobb lenne ezt elolvasni.
Azért kell két munkalap, mert az egyiken kiválasztja az összetevőket, a másikon pedig a finomhangolást végzi (gondolom).
A szinkron arról szól, hogy mindkét lapon ugyanaz az listaelem legyen kiválasztva. Ez azért kell, mert ennek az állása határozza meg, hogy milyen adatok kerülnek át az egyik lapról a másikra.
Vagyis, ha a már kiválasztott listaelemet az árajánlaton megváltoztatom, annak megfelelő elemek kell,hogy odakerüljenek erre a lapra - de azt a másik lapon levő kiválasztó determinálja.
Amíg nincs árajánlata, addig viszont az áras munkalapon "játszik" a legördülő listával. Emiatt kell mindkét lapon ugyanaz.
Utána néztem, jól emlékeztem. A különböző lapokon, füzetekben levő legördülő listák minden további nélkül hivatkozhatnak ugyanarra forrástartományra, tehát felesleges az azonos listaelemeket tartalmazó egyedi forrástarományok létesítése, majd azok szinkronizálása.