TextBoxok tartalmának makrós feldolgozása

2017. július 03. - Office Guru

Korábbi posztokban már részlegesen érintettük ezt a témát, de most olvasói kérdésre válaszként következzen annak bemutatása, hogy például egy Excelben készített űrlap vagy adatlap TextBoxként beszúrt mezőiből hogyan tudunk egyszerűen adatot kinyerni, hogy aztán később ezekkel az értékekkel műveleteket hajthassunk végre. Értelemszerűen az Excel Developer ribbonfülének Controls szekciójából beszúrható TextBoxról van szó:

textbox1.JPGÍme egy roppant egyszerű kis űrlap, ami nagyjából bármilyen feladatnál képezheti a kis dashboardunk, munkalapunk részét:

textbox2.JPGAz elvárás pedig az, hogy valahol a sheeten vagy akár egy másik sheeten elhelyezett kis táblázat megfelelően kitöltődjön, amennyiben a megfelelő mezőket kitöltötte a felhasználó:

textbox3.JPGA legegyszerűbb megoldás, amit bevetnék egy ilyen esetben, valószínűleg a TextBox tulajdonságai között fellelhető LinkedCell tulajdonság lenne, amelynek megadásakor automatikusan töltődne a kapcsolt cella:

textbox4.JPGNa de ha valamilyen okból makrót szeretnék (például mert különféle ciklusokat szeretnénk használni, hogy az egyszer beírt adatok akár tárolódjanak egy sheeten), akkor jön jól az az alapként használható kód, amelyet az ALT+F11 lenyomásával előhívható VBA-editorba pötyögünk be. Elsőként egy OLEObject típusú változó deklarálásával kezdünk, amely ugyebár egy Active-X controlt/ beágyazott OLE-objektumot tud felvenni egy adott munkalapon (OLE mint Object Linking and Embedding).

textbox5.JPGA változó deklarálása után egyetlen ciklusra van csak szükségünk, ami egyszerű konyhanyelven nem fog mást tenni, mint sorban megnézi (For Each Box) a Sheet1 munkalap (In Worksheets ("Sheet1") összes OLEObjektumát (.OleObjects), majd ha talál köztük olyat, amelynek a progID-ja (If Box.progID =) a TextBoxunk progID-ja, akkor (Then) az adott TextBox bal legfelső cellájától számítva hét oszloppal arrébb található (Box.TopLeftCell.Offset(0,7)) cellát töltse ki az adott TextBox értékével (Box.Object.Value).

textbox6.JPGVegyük észre az eddig még nem használt progID tulajdonságot, amely egy adott OLEObject elméleti/programbeli azonosítóját adja vissza. Ugyanígy egy adott OLEObject TopLeftCell tulajdonsága az adott objektum bal, legfelső celláját adja vissza.

A bejegyzés trackback címe:

http://officeguru.blog.hu/api/trackback/id/tr3312639359

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben.

toportyánféreg 2017.07.03. 23:18:50

nem egyszerűbb a textbox pld. change eventjére programozni?:

Private Sub TextBox1_Change()
Cells(1, 1) = TextBox1.Value
End Sub