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ó:
Íme egy roppant egyszerű kis űrlap, ami nagyjából bármilyen feladatnál képezheti a kis dashboardunk, munkalapunk részét:
Az 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ó:
A 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:
Na 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).
A 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).
Vegyü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.