Excel VBA Validation dropdown workaround

A probléma

Microsoft Excel VBA-ból akarok egy custom dropdown validation listát rátenni egy cellára.

Erre való a Range.Validation.Add metódus – a Formula1 paraméterének egy stringet kell átadnom, amit a VBA engine elemekre splittel (valami eszement okból kifolyólag ehhez nem lehet tömböt átadni paraméterként). A split szeparátornak az engine a dokumentáció szerint a “,” karaktert használja – vagy nem, és itt kezdődnek a bajok.

Akár a “,”, akár az Application.International(xlListSeparator) által definiált szeparátor karaktert használom a Formula1 paraméternek átadott stringben, a VBA kedve szerint válogat, hogy épp mikor mivel végzi el a splitet. Vannak esetek, amikor az egyik és vannak amikor a másik szeparátor a nyerő. A probléma az, hogy nem tudom eldönteni, hogy a VBA motor mi alapján választ.

A fura helyzet csak akkor áll fenn, ha az Excel alatti regionális beállítások nem az US Intl standard szerintiek és ezért nem a standard “,” a listaelválasztó karakter.

Hab a tortán, hogy a hibát baromi nehéz reprodukálni – egy ilyen öcsi mintakód simán működik és tökéletesen legyártja a .Validation dropdown-t:

Dim wb As Workbook, s As Worksheet
Set wb = Workbooks.Add
Set s = wb.Worksheets(1)

Dim items As Variant
items = Array("egy", "ketto", "harom")

With s.Cells(1,1).Validation
    .Add _
        Type:=xlValidateList, _
        AlertStyle:=xlValidAlertStop, _
        Operator:=xlEqual, _
        Formula1:=Join(items, ",")
End With

Tovább “szépül” a feladat, ha leteszek egy breakpointot a Validation híváshoz – ekkor ugyanis soha nem hibázik a rohadék.

Nekem egy nagy monolitikus kódban jött elő a gond – 9 órán át kerestem, hogy vajon mi a fene döntheti el, hogy a VBA motor épp melyik lista szeparátor karaktert preferálja, de nem jöttem rá.

A megoldás

A VBA azt ugyan nem árulja el, hogy hány elemű lett az általa a stringből felépített lista, viszont azt megmondja, hogy egy .Validation objektumot tartalmazó cella tartalma valid-e – erre való a .Validation.Value propetry. Ha tehát a gyogyós engine nem splitteli a stringünket, akkor az általa definiált Validation csak egy elemmel lesz valid, az pedig a teljes string – és már meg is fogtuk:

Dim seps As Variant, sep As Variant

seps = Array(",", Application.International(xlListSeparator))

' create list selector for target cell
For Each sep In seps

    With tgtCell.Validation
        .delete
        .Add _
            Type:=xlValidateList, _
            AlertStyle:=xlValidAlertStop, _
            Operator:=xlEqual, _
            Formula1:=Join(items, sep)
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

    ' check if bloody VBA made the split properly
    tgtCell.value = items(LBound(items))
    If tgtCell.Validation.value Then Exit For

Next sep

És már megint gyorsabb voltam, mint a Microsoft hotline!-)

3D nyomtatás: COVID-19

A 3D print közösségben rengeteg az önzetlen ember, a rohadék járvány pedig ezt csak még jobban kidomborítja. A védőfelszerelések hiánya egy csomó designerbe beletette a boogie-t és sorra jönnek elő a szükséghelyzetben a hiányzó eszközöket pótolni képes megoldások.

Prusa protective face shield

Prusáék a szemet és az arcot védő PET pajzsot terveztek:

Prusa protective face shield

Az alsó és felső Prusa-narancs csík a nyomtatott elem, az átlátszó rész egy 0.5-1.0 mm vastagságú műanyag film. Ők a 0.5 mm vastag Covestro Vivak PETG lemezt használták, amit lézervágóval vágnak ki, de a merevítő kerethez passzoló lyukakat eleve úgy tervezték, hogy azok a mezei irodai lyukasztóval is előállíthatóak legyenek. Sőt, átlátszó lapnak egy kiterített 2 literes PET palack is megteszi!

Józsiék designja az RC3 kiadásnál jár – van belőle archoz közelibb és attól távolabb álló változat is. Josef 1000+ printerből álló gyára folyamatosan készíti a kereteket – már 12000 leadott példánynál járnak és még 90000 darabra kaptak igényt.

Az arcmaszk design komplett dedikált weboldalt kapott, összeszerelési és sterilizálási útmutatóval. A gyártás mellé komplett sterilizáló kamrát terveztek és gyártottak:

Sterilizáló kamra a Prusa arcmaszkoknak

Erre aztán rámozdult a közösség és Máltától az USÁ-ig mindenhol orrba-szájba gyártják az arcmaszkokat:


Malta, @3DMN

Formlabs

Az SLA printereiről híres magyar Formlabs amerikai oldala is gyorsan beszállt a csatába, mintavevő pálcikákat, lélegeztető gépek T elosztóit, arcmaszkokat és lélegeztető maszkokat próbálnak meg a több, mint 1500 önkéntesből összeverbuvált printfarmmal gyártatni.

OpenLung BVM Ventillator

Gui Calavanti osztotta meg március 11-én a Facebookon az általuk tervezett, 3D nyomtatható, nyílt forrású lélegeztetőgép prototípusát, melyet az Ír Egészségügyi Hatósággal vizsgáltatnak be.

Montana mask

Dr. Dusty Richardson, Dr. Spencer Zaugg és Colton Zaugg álltak elő a 3D nyomtatható, cserélhető filterbetétes maszk ötletével. A maszkba való betét kompatibilis a standard N95 szűrőbetéttel, illetve egy hagyományos sebészmaszkot 6 darabba vágva ugyanúgy készíthető hozzá filter. A maszk nem helyettesíti a standard N95-ös eszközöket, de szükségmegoldásként a semminél sokkal jobb.

A dokik maszkjából azóta több iteráció is készült.

Montana maszkok

Kéz nélküli ajtónyitók

Az ajtónyitást karral lehetővé tevő segédeszközökből is csilliót iterált már a közösség – csak a Thingiverse-en több, mint 20 féle design van fent.

ISINNOVA emergency mask

Az olcsó egész arcos búvármaszkhoz tervezett az olasz ISINNOVA egy adaptert, ami C-PAP (Continuous Positive Airway Pressure) lélegeztető eszközökkel kompatibilis maszkokká alakítja azokat:

Az ISINNOVA designereinek köszönhető az a lélegeztetőgéphez való Venturi szelep replikája, amely úgy készült, hogy az eredeti gyártó nem tudott eleget szállítani, mire a tervezőik csináltak egy klónt, hogy a kórházaik minél előbb kaphassanak belőle:

ISINNOVA Venturi szelep klón

HP

A Hewlett Packard is beszállt a saját 3D printer flottájával a küzdelembe: kéz nélküli ajtónyitókat, maszkokat és egyéb, 3D nyomtatható kiegészítők gyárásának álltak neki.

HP FFP3 maszk MultiJet Fusion technológiával nyomtatva

3D Systems

Az SLS printereket gyártó vállalat lélegeztető gépek venturi szelepeit gyártja.

És ez csak az, ami szembejött a napokban. Egész biztosan van még egy csomó hasonló kezdeményezés. Így talán már nem is látszik annyira játekszernek az egész 3D nyomtatás.

Emerald of Equator: COVID-19

Az Indonéziában élésről régóta nem írtam semmit. Ennek nem a lustaság vagy az időhiány az oka – egyszerűen csak gyűjtöm a mesélnivalót, aztán majd egyszerre megkapjátok ömlesztve.

A mai bejegyzés a koronavírus következtében kialakult helyi állapotokról próbál tájékoztatni. Előre szólok, hogy van benne pár részlet, ami bármennyire tárgyilagos is, mégis sokkolóan hat.

Indonézia ~260 millió lakosával a világ 4. legnépesebb országa, Java pedig az 1117 fő / km² népsűrűségével a bolygó legsűrűbben lakott szigete. Jakartában, a fővárosban több, mint 10 millióan élnek, valamint >+20 millió ember az azt körülvevő agglomerációban – ezzel a város Tokió után a második legsűrűbben lakott település. Ha belenagyítasz a Google Maps műholdas nézetében Java szigetébe, megdöbbenve látod majd, hogy a meredek heggyoldalak és a vulkáni kráterek kivételével szinte minden talpalatnyi földön utak és házak vannak. Na ebbe képzeld bele a koronavírust.

Indonéziában a mai adatok alapján 893 regisztrált pozitív eset van, amiből 515 jut Jakartára – a pozitívak ~9%-a már elhunyt. Arról sehol semmi adat nincs, hogy az ország mennyit tesztel. Nagy eséllyel több tízezer fertőzöttnél járthatnak már.

A kormányzat nem titkolja a pozitív tesztek lokációját – a jakartai állapotot részletes térkép mutatja, valamint publikálják az azonosított pozitív esetek visszakövetett mozgását is.

A városban még nincs kijárási tilalom. Az iskolák 2 hete zárva és home office-ra buzdítás itt is van. Ennek következményeképp az egyetlen óriási közlekedési dugóból álló város levegője hihetetlen mértékben tisztult, ráadásul az esős évszak végére csak egyre több eső érkezett/érkezik, ami tovább csökkenti a légszennyezést.

Jakarta traffic 2020 március 27 délelőtt. Ami zöldet látsz, az 2 héttel ezelőttig minden nap piros volt.

A városban számos dedikált karantén kórház létesült, az egészségügyi dolgozóknak a város által üzemeltetett hotelek adnak a kórházakhoz közeli szálláslehetőséget, hogy könnyítsék az életüket valamelyest.

A napokban Jakartában 1000 darab utcai fertőtlenítő kamrát installáltak. Ez lényegében egy átlátszó kamra, ami 360 fokban körbepermetezi a benne állót egy olyan fertőtlenítőszerrel, ami nem irritálja sem a bőrt, sem a szemet (Jakartában minden nap ugyanolyan idő van: éjjel 27 ℃, nappal 34 ℃, így itt az, hogy a ruhád nedves lesz, nem igazán probléma).

Ezen próbálj meg nem sírni: a szociális ügyek minisztériuma a több, mint 15 millió (!) szegényszégben élő indonéz család élelmiszersegélyét augusztusig havi (!) 12 USD-val (!) emelte meg, valamint rizst oszt a rászorulóknak.

A Jakartában elhunytakat 4 órán belül eltemetik. A holttestet légmentesen záró fóliába csomagolják, így kerül egy fakoporsóba, majd a koporsót is fóliázzák és a külső fóliaréteget fertőtlenítőszerrel körbepermerezik. Az elhunytakat két dedikált temetőbe temetik.

Indonézia muszlim ország, az emberek rendszeresen imádkoznak együtt mecsetekben. Az indonéz muszlim tanács kiadott egy fatwát, ameny értelmében a péntek déli közös mecsetben imádkozást mostantól otthon kell elvégezni. Ennek ellenére persze számos hívő nem törődik ezzel és egy kupacba gyűlik a tiltás ellenére.

Minderre jön április 23-ától a Ramadan, majd május 24-25-én az Idul Fitri, amikor mindenki hazatér a szülőföldjére. A kormány igyekszik erre előre készülni.

Hirtelen ennyi. Mi jól vagyunk, Era két hete, én 20 éve home office-ból nyomjuk a melót (persze az a 20 év nem pont ugyanígy nézett ki, mint az elmúlt két hét).

Merüljünk érdekes adatokba: az emu

TL;DR: a címben emlegetett emu egy böszme nagy madár, ami így néz ki:

Ez a csodálatos állat egy csomó érdekes dolgot tud – sorolom:

  • Ausztráliában őshonos és az ausztrálok az I. Világháború után még csatáztak is velük. Annak ellenére, hogy a hadsereget vetették be a szerencsétlen madarak ellen, a komplett “emuháborúban” csak 12 állatot pusztított el akkor az ember.
  • Ausztrália egyik címerállata és az 50 centesre is emut nyomnak
  • az ozzi farmerek nincsenek nagyon oda értük. Ennek az az oka, hogy ha nem találnak kaját, akár több tízezres csapatokba összeverődve mászkálnak táplálékot keresve.
  • az emu kb. úgy mászkál, ahogy én kocogok: 7 km/h a standard tempójuk
  • ha kiegyenesedik, jó 2 méter magas, ehhez képest relatíve könnyű, 30-60 kg
  • a nőstény egyedek nagyobbak, mint a hímek
  • repülni nem tud, viszont 50 km/h-val fut és nagyon jól úszik. Szeretnek fürdeni.
  • doboló, röfögő és sziszegő hangot is ki tudnak adni – ezt javarészt párzási időszakban csinálják olyan hangosan, hogy jó 2 km-re is elhallatszik.
  • a dobolásuk tényleg eszement hangos, egyszer hallottam élőben, sokáig fogalmam nem volt, miből jön ilyen erővel ilyen hang
  • zömmel növényeket esznek és néha rovarokat. Az emésztés segítéséhez letolnak a gyomorba pár kavicsot is
  • nagyon meleg napokon a tüdejüket párologtató hűtőként használva képesek a testhőmérsékletük megfelelő szinten tartására
  • kilégzéskor az orrukban kicsapják a kilélegzett gázkeverékből a vizet és az újrahasznosítják
  • nincs természetes ellenségük, viszont a kicsiket és a tojásokat a dingók vadásszák
  • 8-10 sötétzöld tojást raknak egyszerre a hím által készített lapos fészekbe:
  • a tojások 10-15 centisek, 400-600 grammosak, a héjuk kb. 1 mm vastag
  • ugyanúgy mint a cassowaryknál, amint a nőstény lerakta a tojásokat, a hím nekiáll kikölteni őket. A csaj emu vagy tovább őrzi a nem kis területet, de az is előfordul, hogy új hímet keresnek
  • a költési időszak 8 hét. Ezalatt a hím nem eszik és nem szarik, csak költ. Inni azt a lecsapódott harmatot issza, amit elér a fészekből kimozdulás nélkül. Napi 10 alkalommal átforgatják a tojásokat.
  • a hímek a költési időszak alatt a testsúlyuk kb. 1/3-át elvesztik
  • minden kis emucsirke csíkosan születik, majd a csíkos minta a 3. hónapra eltűnik róluk
  • a hím fél-másfél évig a kicsik mellett marad és nekimegy bárminek, amitől fenyegetve érzi magukat – az embert is beleértve
  • a kicsikből 2-3 éves korukra lesz ivarérett, 10-20 évet élnek meg vadon, fogságban többet
  • az ozzik tenyésztik őket és a boltokban vehetsz tojást és emuhúst is kolbász vagy burger formájában

“Can’t innovate anymore my ass!”

Pappitoval beszélgettünk reggel. Mutattam neki az új Dyson lámpát:

Csini mi? Dysonék sajna aranyárban mérik – de most nem ez a lényeg, ugorgyunk!

Elkezdjük nézni a “Getting started” videót. Érdemes, nézd meg te is:

Ugye neked is feltűntek az alábbiak:

  • ahogy kinyitod a dobozt, a fedél feléd eső részén ott van az összeszerelési utasítás, nem kell újabb papírokon keresgélni és biztosan látni fogod – nem megy a kukába a manual anélkül, hogy tudomást vennél róla
  • a csomagolás segít összeszerelni a lámpát – megtartja függőlegesben a nehéz talpat amíg te rögzíted benne a rudat
  • a tápkábelt takaró kartonok szakítás nélkül, egyben lehúzhatóak a vezetékekről
  • ugyanígy tépés nélkül bontható le a lámpatestet védő csomagolás is

…és akkor el is érkeztünk a britek által kreált brutális méretű villásdugóig. Ahogy Pappito mondja:

egy ötös hosszabító akkora mint egy pianínó

Kétségtelenül a briteké a legeslegnagyobb vadállat villásdugó – de nem ok nélkül. Mutatom:

Szóval Tom Scott videójából az alábbiakat tudhatjuk meg a brit dugóról:

  • a villásdugóban van egy beépített biztosíték
  • a föld tüske azért hosszabb, mint a többi, mert az nyitja a delejt tartalmazó lyukakat védő reteszt
  • a fázist továbbító tüskék töve azért műanyag, mert így félig kihúzott dugónál nem férsz hozzá a fázist tartalmazó részhez
  • a földvezetéket azért hagyjuk hosszabbra a dugóban, mert ha meg is tépjük a kábelt és így leszakad a fázisos ér, a földvezeték szakadhat el utoljára
  • a fázisvezeték azért barna, mert ilyen színű lesz a gatyád, amikor hozzáérsz, ha áram alatt van 🙂

Végül Tomtól megtudjuk azt is, hogy a tepsi méretű dugóban van azért egy borzalmas tervezési hiba: minden alkalommal tüskékkel felfele esik a talajra és nem annyira jó rálépni. És ebből már gurult is tovább a chat.

Egy csomó cég nekiállt ugyanis a brutál méretű brit dugón mindenféle innovatív megoldásokkal segíteni.

A Mu One pl. elforgatva összehajtja a dugót – viszont a föld tüskéből kispórolják a fémet:

A Flip nevű crowdfunding cucc ugyanezt csinálta – ők másképp hajtogattak, de a fém föld tüske itt is kimaradt:

Az Apple is gondolkodott a problémán és úgy tűnik, anno nekik sikerült megoldani, hogy a dugó összehajtható legyen és a földtüske is megmaradjon fémnek:

Sajnos ez a fajta innovatív szemlélet kihalni látszik az Apple-ből és velük együtt számos más vállalatból is.

A poszt címét adó “can’t innovate anymore my ass!” mondat Phil Schillertől, az Apple marketing igazgatójától származik az Apple 2013 szeptember 8-án tartott keynote-járól, amikor a cég bemutatta az új “kiskuka” Mac Pro-t:

A kis kompakt vadállat tényleg csodálatos szerkezet – leszámítva, hogy

  • borzasztó a vezetékezése
  • a mozdításra világítva megjelenő csatlakozó piktogrammok csak parasztvakításnak jók, ugyanis az épp csak a fekete gépház fekete csatlakozóit nem világítja meg
  • a Thunderbolt 2 csatlakozók instabilak
  • a 3×2 db Thunderbolt pár párosítása nincs jelölve a csatlakozók helyén
  • amikor beporosodik, azt csinálja, hogy a ventillátort feltekeri 100%-ra, a CPU órajelét leveszi a minimumra és az Apple Hardware Test a “There may be an issue with the System Management Controller. Reference code: PFM006” szöveggel képes megijeszteni ahelyett, hogy azt mondaná: mi lenne, ha kifújnád belőlem a port, bébi?

Szóval tényleg, hova lett ez a minden részlettel törődés, Apple?

Szerencsére néha jön egy Min-Kyu Choi és megmutatja, hogy hogyan is lehetne másképpen:

Csodák persze nincsenek.

3D nyomtatás: a dagadt csirke

A dolog úgy kezdődött, hogy felszereltem egy Raspberry Pi-t a Prusa MINI 30×30-as alumínium profilból készült Z oszlopára. Ha nem tudod, mi az a 30 mm-es aluprofil, mutatom:

A RPi-t és a Prusa MINIt egy mikro-USB kábel köti össze, ami persze nem pont akkora, mint amekkorára szükség van, így csak útban van belőle a maradék. Persze foghattam volna egy gyorskötözőt és a feltekert vezetéket 3 másodperc alatt összekötegelhettem volna vele – de akkor miből lett volna ez a post?-)

A probléma ezt a megoldást szülte:

Ezek persze csak különböző stációk, míg az 52 variáns után végre megérkeztünk a bal egyen látható Nirvánába
Eddig tart felszerelni
A Prusa MINIn igaziból itt van a szerkezet egy korai iterációja
Ha csavarral rögzítenéd, akkor így szereled össze

Ezt a racsnit már elég rég csináltam, most csak hozzájött az ötlet, hogy mi lenne, ha ráapplikálnék a talpára egy olyan T anyát, ami egyúttal befogja a profil hornyába. Ebből az ötletből aztán három verzió is kerekedett:

Era kedvence a jobb oldali “dagadt csirke” kiadás. Hiszed vagy sem, a spéci alaknak is van értelme!

Az alsó T anya nélküli verzió azoknak készült, akik mégis inkább fém T anyával rögzítenék a racsnit. Mivel a 30 mm-es aluprofilba való anyák M4-es furattal készülnek, így ebben a változatban M4-es csavarhoz való lyuk van.

A kis nyomi racsnikat látva joggal merülhet fel, hogy mi a rákért kellett ebből ötvenkettőt iterálni. Első ránézésre talán nem látszik rajtuk, de az alábbi dolgokra kellett odafigyelni:

  1. A racsni egyik oldala ne lógjon túl a 30 mm-es aluprofil szélén, mert ha arra már felszereltek mondjuk egy akril lapot, akkor nem tudod beforgatni a horonyba a kis dögöt
  2. A T anya a horonyban csak egy irányban forduljon el, a másik irányba ne tudjon körbe-körbe forogni. Ez ad némi stabilitást extra csavar használata nélkül is a horonyba fordított racsninak.
  3. Gondolni kell azokra is, akik mégis fixen szeretnék egy pozícióban rögzíteni a horonyban a racsnit, ezért bele kellett tervezni egy üreget, ami egy M3-as csavart befogad és egy másik üreget is, ami egy M3-as anyának ad helyet. Persze az nem elég, hogy a csavar befér a racsniba és az anya a racsnival együtt a horonyba, hanem arra is oda kell figyelni, hogy az imbuszkulcsnak / csavarhúzónak se legyen útban semmi, amikor a user a csavart molesztálja. Kis extra adalék: a 30×30-as aluprofilba való fém T anyákban ugyan M4-es menet van, ám az M4-es anya nem férne be a horonyba, ezért terveztem bele M3-as csavart és anyát.
  4. Ha a racsni talpába bekerül az azt rögzíteni képes csavar és anya, akkor pár fogat ki kell hagyni, viszont előfordulhat olyan eset, amikor a lehető legszorosabban kell rögzíteni a racsniba pakolt vezetékeket. Erre való a csavartól jobbra levő 3 extra fog.

Ezen felül került bele még menet közben pár apróság:

Az anya foglalatának alján van egy 2 mm-es lyuk arra az esetre, ha valamikor kiszednéd az anyát és nem szeretsz ilyen alkalmakkor káromkodva rombolni
Nem baj, ha az M3x15-ös csavar feje nincs útban a drótoknak, ezért be kellett süllyeszteni amennyire csak lehetett
A fogak az eredeti racsni egyoldalra záró megoldása helyett szimmetrikus 60°-osak lettek és picit rövidebbek is, hogy könnyebben lehessen kezelni a racsnit
A “dagadt csirke” verzió “hasas” karjának alja teljesen zárt állapotban semmi mozgásteret nem hagy a vezetékeknek.

Ha szükséged van a cuccra, az egészet szokás szerint szedheted a youmagine.com-ról.