Kezdeném a + ezaz-al. Feltettem ezt a kérdést normálisan stackowerflow-n is. Kaptam egy mínuszt és le lettem oltva, hogy különben is a képernyőképen van nem inglis felirat is. Nem tehetek róla, hogy Magyarországon (vagy azon kívül is) emberek milliói használnak magyar nyelvű office-t, ami néha ír ki dolgokat magyarul is. Ettől függetlenül a 10 szavas hibaüzenet le lett fordítva angolra. A többi mind angolul volt. Ezen kívül egyéb válasz nem érkezett. Hallottam, hogy gané egy hely, de hogy ennyire... válaszomtam a csókának, hogy egyébként ott van a leírásban angolul, csak a vizuális típus kedvéért illusztráltam is a dolgot. Ezek után eltűnt a kommentje. De a mínusz megmaradt.
Szóval a lényeg:
Van egy excel táblám, ami csinál ezt-azt, de leginkább bizonyos típusú switchek alapfunkcióit lehet vele bizergálni, így azok a kollégák is meg tudnak csinálni alap dolgokat, akiktől egyébként ez a konzolos dolog messze áll. Ezáltal aztán nem kell engem fél percenként hívogatni ha valami gáz van a hálózaton, mert épp csak a portsec letiltott a költözködés miatt, etc.
Most éppen így nézünk ki:

Az egész mögött snmp műveletek futnak VBA-ban. Lekérdezzük a switchet, megadunk neki bizonyos OID-k esetén paramétereket (pl. amikor letiltunk egy portot) stb.
Addig, amíg csak 1, 0, 2 értékeket kell megadni, (pl. egy port legyen tiltva, akkor az adott oid legyen 1, ha engedélyezett, akkor 2.) addig nem is volt gond. A hivatalos leírás alapján hasonlóképp kellene, hogy működjön a set is, mint a get. Igazából csak annyi különbségnek kellene lennie, hogy míg a get-nek nincs paramétere, mert csak lekérdez, a set-nek van egy paramétere, amit elküldük az eszközünknek. A hivatalos módszer valahogy így kellene, hogy működjön:
objSNMP.Set ("43.18.1.1.2", OIDValue)
Ha ezen a módon próbálom rábírni a programot a működésre, akkor "Compile error: Syntax error" hibaüzenetet kapok.
Találtam egy megoldást, ami feltételesen működik. Az előző képen a kikommentelt sor. A lényege annyi, hogy kell egy véletlenszerű/nevű változó, ami lényegében az objSNMP.Set parancsom kimenete lesz (?). Valahogy így:
randomVarName = objSNMP.Set("OID", Value)
Pontosan a kódban ez így néz ki:
temp = objSNMP.Set(".1.3.6.1.4.1.9.9.68.1.2.2.1.2." & PortNum, 21)
Számomra megmagyarázhatatlan módon bár, de ez ebben a formában tökéletesen működik. Ez azért érdekes, mert semmilyen (hivalatos) infót nem találtam erről a módszerről sehol. Valamikor régebben az internet mély bugyraiban találtam, mint lehetséges megoldás. A probléma ezzel az, hogy amint kicserélem a paramétert egy konkrét értékről (esetünkben a 21 helyett) egy változó nevére, a program nem fut le. Ha pl. erre módosítom a sort:
temp = objSNMP.Set(".1.3.6.1.4.1.9.9.68.1.2.2.1.2." & PortNum, VLANNum)
Ekkor jön a következő hibaüzenet:
Run-time error '-2147467259 (80004005)':
A kért SNMP-művelet módosítani próbált egy változót, de vagy szintaktikai vagy értékhiba történt.
A fentiek alapján így most nem tudok értéket adni az adott paraméternek egy változón keresztül, csak közvetlenül. Így a lehetőségeim eléggé korlátozottak. Ha csinálok 4096 Parancsot kézzel és elküldöm ami éppen kell, az nagyon nem hatékony. Gondoltam még arra is, hogy meghívni a VBA kódba egy cmd.exe parancsot, ami konkrétan az snmpset alkalmazás által elküldi a megfelelő paramétereket a switchnek. Sőt, ezutóbbi úgy lenne a legjobb, ha magát a kis snmpset.exe fájlt be is tudnám csomagolni valahogy az excel fájlba, hogy amikor az másolva/terjesztve van, akkor meglegyen a függősége.
Most aztán megy a fejvakarás. De nyilván az official way lenne a preferált, vagy valami hasonló.
Valakinek tipp? :)