Komentáře Postřehy z konference InstallFest 2020

user avatar kamlan
Odpovědět
Název listu do buňky
13. 03. 2020, 13:04:09
S využitím vlastní fce to jde myslím jednodušeji, neboť v makru se lépe kouskuje řetězec, resp. ve vzorcích nejspíš musím vždy zadávat vícekrát název kouskovaného řetězce abych dostal nějakou jeho požadovanou část - např. jako je tomu uvedeno v příkladě, kde je třeba 2x CELL("Filename"). Kdežto když vytvořím vlastní vzorec tak tam onen parametr mohu zadat jen jednou a potřebné části z něj získám v makru.
Je však stále potřeba přidat i druhý parametr aby se vzorec aktualizoval např. při přejmenování listu -> a funkce RAND() na tu aktualizaci slouží skutečně asi nejlépe.
Takže výsledek může být třeba takto:


Function NAZEVLISTU(s$,a) as string 'vrátí část řetězce od prvního $ do části .$A$1
s=mid(s,inStr(1,s,"$",0)+1) 'název od prvního $
s=mid(s,1,inStr(1,s,".$A$1",0)-1) 'název až do .$A$1
if inStr(1,s,"'",0)=1 then s=mid(s,2) 'odstranit případnou první uvozovku
if inStr(1,s,"'",0)=len(s) then s=mid(s,1,len(s)-1) 'odstranit případnou poslední uvozovku
NAZEVLISTU=s
End Function


A do buňky se zadává: =NAZEVLISTU(CELL("Address";$List2.$A$1);RAND())

kde List2 je list jehož název chci dostat.
Jelikož jde jen o vypsání názvu listu a nezáleží tedy na kterou buňku je odkazováno, použil jsem část adresy .$A$1 pro stanovené kouskování řetězce v makru, čili tuto část ($A$1) tedy neměnit.

Kdyby přeci jen mělo (třeba někdy jindy) záležet na odkazované buňce, tak jiný způsob rozdělení řetězce by mohl být třeba podle poslední tečky v dané adrese, neboť listy lze pojmenovat s tečkou a výsledný řetězec ze kterého bych chtěl dostat název listu by mohl vypadat třeba takto: $'List.222'.$A$1 -> a pak by bylo potřeba zjišťovat třeba právě pozici poslední tečky (tedy až té před $A$1 a nikoliv té předešlé v List.222) a vrátit řetězec třeba opět od prvního $ až do té poslední tečky. Což není nic těžkého a dá se na to použít třeba kouskování řetězce i přes regulární výrazy, nicméně pro ukázku jsem uvedl snad to nejjednodušší :-) - ostatně vždy je snažší dělat něco pro jednoznačné zadání než se trápit pro rádoby univerzální řešení na další a další kombinace typu: "a co kdyby to bylo ještě takhle onakhle" ... "až nakonec úplně mákle".
user avatar kamlan
Odpovědět
Re:Název listu do buňky
13. 03. 2020, 13:35:55
Jen drobná úprava, vzpomněl jsem si že jsou i funkce LEFT a RIGHT a nikoliv jen MID a INSTR :-).


Function NAZEVLISTU(s$,a) as string 'vrátí část řetězce od prvního $ do části .$A$1
s=mid(s,inStr(1,s,"$",0)+1) 'název od prvního $
s=mid(s,1,inStr(1,s,".$A$1",0)-1) 'název až do .$A$1
if left(s,1)="'" then s=mid(s,2) 'odstranit případnou první uvozovku
if right(s,1)="'" then s=mid(s,1,len(s)-1) 'odstranit případnou poslední uvozovku
NAZEVLISTU=s
End Function
SUSE
 
 
woo jaw demo hz