Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  29 30 31 32 33 34 35 36 37   další »

Modifikace vzdálené adresy do zavřeného sešitu není možná ani pomocí funkce NEPŘÍMÝ.ODKAZ, ani POSUN. Použít funkci ZVOLIT mne nenapadlo.
V příloze je řešení, které dovoluje zadáním adresy buňky (v notaci A1) vyvolat obsah této buňky na listu ve vzdáleném (třebas i zavřeném) sešitu.

Omlouvám se, četl jsem nepozorně dotaz (možná i proto, že ve vzorečku chybí jedna zavírací závorka) 1 . Modifikovat vzdálenou adresu pro zavřený sešit s použitím funkce NEPŘÍMÝ.ODKAZ i u mne dopadá špatně, podobně jako pokus o použití funkce POSUN. Zabralo mi až makro pro změnu vlastnosti Formula. To samozřejmě lze změnit na uživatelsky definovanou funkci, kterou pak lze použít ve vzorci místo funkce NEPŘÍMÝ.ODKAZ. Ta UDF by ale měla vědět, jakou podobu má mít změna zapsaného odkazu. Když to budu vědět, mohu takovou UDF dodat.

Už jsem to dávno nedělal, ale snad si to ještě pamatuji: dělám to tak, že pro napsání vzorce otevřu i ten "vzdálený" sešit, ve vzorci se odkážu na potřebnou buňku ze vzdáleného sešitu prostým ukázáním na ni a psaní vzorce dokončím. Když pak vzdálený sešit zavřu, změní se automaticky volání vzdálené buňky na propojovací odkaz s úplnou cestou ke vzdálené buňce, což je podstatné a nutné pro její volání v zavřeném sešitu. Jinými slovy NEPŘÍMÝ.ODKAZ pro získání hodnoty buňky ze zavřeného sešitu nepotřebuji.

Pokládám za škodu, že Dialog.Show nepatří mezi běžně používané techniky VBA. Vestavěné dialogy jsou vesměs užitečné, stručné a hlavně funkční.
Pro ty, kterým se víc líbí můj první postup, posílám upravené a komentované znění té procedury do knihovničky k archivaci:Sub Pokus()
'**********************************************************
' fyzické vložení obrázku do listu bez linku na zdroj
'
' pro následné úpravy obrázku je vhodné pro tento sešit
' upravit Možnosti / Upřesnit / Velikost a kvalita obrázku:
' - zahodit data úprav - zaškrtnout
' - nastavit výchozí cílový výstup do 220 / 150 / 96 ppi
'**********************************************************
Dim Jmeno As String, Temp As String
' možné koncovky souborů: .jpg, .gif, .png
Jmeno = Application.GetOpenFilename("Obrázky JPG (*.jpg), *.jpg")
With ActiveSheet
.Pictures.Insert(Jmeno).Select ' link na obrázek
Temp = Selection.Name
.Shapes(Temp).Copy
.PasteSpecial Format:=1 ' 1-JPG; 2-GIF; 3-PNG
Selection.Name = "Obraz" ' obrázek bez linku
.Shapes(Temp).Delete ' smazání linku
End With
ActiveWindow.RangeSelection.Select
End Sub
Hezký den!

Přesto, že můj kód z předchozího vstupu funguje jak má, nikdy se mi moc nelíbil, protože je to řešení hodně přes ruku. Před chvílí mne napadlo vyzkoušet jiný postup, který jsem úspěšně otestoval a který pokládám za daleko čistší. Navíc jde o jednořádkový kód:

Application.Dialogs(xlDialogInsertPicture).Show

Vybraný obrázek z vyvolaného dialogu se automaticky do listu vloží jako Shape.

Po delším pátrání ve svém archlívu jsem objevil, jak jsem se se sejným problémem vypořádal:

Jmeno = Application.GetOpenFilename("Obrázky JPG (*.jpg), *.jpg")
With ActiveSheet
.Pictures.Insert Jmeno
.Shapes(1).Copy
.PasteSpecial Format:="Obrázek (JPEG)", _
Link:=False, DisplayAsIcon:=False
.Shapes(1).Delete
.Shapes(.Shapes.Count).Name = "Obraz"
End With

Pokud chci následně obrázek ořezat a nepotřebných ořezů se zbavit, je ještě nutné v Možnostech dovolit odstranění ořezaných částí.

I když se tady žádná přímá odezva neodehrála, dost jsem pokročil. V první řadě mi kamarád Igor poslal výborně napsaný rozsáhlý manuál v pdf od autora Pitonyaka (vznik únor 2015). Obrácenou stranou mince je 650 stran textu v angličtině. Našel jsem ale i starší manuál ve slovenštině (250 stran) i ještě starší stručný porovnávací přehled v dokumentu VbaStarBasicXref.pdf (eng., 60 stran).
Za velmi zajímavý pokládám převodník kódu VBA na OO Basic, který je zdarma k dispozici na adrese www.business-spreadsheets.com/vba2oo.asp. Ten (spolu s převodníkem jednotlivých obratů) mi ukázal, že převést VBA na OO Basic zdaleka není triviální úlohou: zatímco samotné VBA a OO Basic jsou téměř identické, práce s objekty se liší velmi významně. Převod metod pro objekty z VBA do OO Basicu vypadá podle použitého převodníku "horribly, terribly, nepředstavitelnělibly" složitě.

Vámi zaslaný soubor při pokusu o jeho zprovoznění protestuje, že jednak nemá propojení, jednak že nemůže najít nějaký textový soubor. Jinými slovy mi je ten sešit k ničemu, zejména ne k tomu, abych pochopil, co se má dít. Za druhé nerozumím tomu, že oneskorenie potřebujete použít v nějakých buňkách. Prodleva se může týkat nějakého děje, a ne buněk. Omlouvám se, ale na dotazy, kterým nerozumím, nemohu ani odpovídat.

V dotazu se orientuji jen stěží. Pokud ale jde o časovou prodlevu, během níž lze běžně manipulovat s daty na listu, používám s výhodou proceduru, jejíž modifikovanou podobu nabízí Help v Excelu:

Sub Prodleva(Delka As Single)
Dim Kon As Single
Kon = Timer + Delka
Do While Timer < Kon
DoEvents
Loop
End Sub

Delka je čas prodlevy v sekundách, nastavitelný rozumně cca od jedné tisíciny sekundy až po délku jednoho dne. V době prodlevy lze normálně se sešitem pracovat. Po dobu jejího běhu však je zastaveno provádění procedur VBA.

Pokud jsem správně pochopil Vaši potřebu, pak řešení najdete v příloze

Ten zápis je naprosto správný. Doporučuji ho neopisovat, ale přímo zkopírovat! Za jedinou jeho vadu lze pokládat strašidelnou délku a tím i špatnou čitelnost celého příkazu. Problém je v tom, že ověření použitelnosti provedené změny na listu ani zjištění první volné buňky v řádku není ve VBA úplně triviální úloha. Čitelnosti zápisu by možná prospělo rozepsání celé konstrukce do více příkazů.

CmeldaBoris napsal/a:

Vovka napsal/a:
Kdybych zvolil kliknutím do navigátoru nějaký list a pak bych chtěl v tom listu pracovat - třeba se kurzorovými šipkami někam posunout a měl bych aktivní stále navigátor, tak se na listu s kurzorem nikam posouvat nebudu. Vám se to chová jinak?
A nebo si prostě nerozumíme:-)

Odpovídám opožděně, ale přece: to vysvětlení je dobře napsané. I u mne se to tak chová. Je zvláštní, že jsem si takového chování nevšiml nikdy předtím. Asi jsem takový fanatik do používání myši, že mne za patnáct let používání Excelu nenapadlo po přepnutí na jiný list rovnou použít kurzorové klávesy k pohybu po listu. Dík za upozornění pro příště. Nikoliv kvůli mně (já bych na to asi nikdy nenarazil), ale kvůli druhým, pro které občas něco napíšu...

Pokud chcete získat se zárukou výhradně textovou podobu datumu, použijte z VBA funkci Format, např.

cells(1,1) = Format(Cells(3, 2), "d/m/yyyy")

Anglický formátovací řetězec "d/m/yyyy" se v českém Excelu sám převede na naše lokální "d.m.rrrr"

Před pár lety jsem pro kamaráda napsal v Excelu 2007 aplikaci s makry. Kamarád je kolenovrt a používá ji s úspěchem dodnes na své trofejní technice s Excelem 97. Technika mu ale dosluhuje a on si musí koupit nový notebook. Samozřejmě za hubičku. Když jsem mu v souvislosti s tím sdělil, že nový MS Office ho bude stát přes tři tisíce, úplně ho to skácelo.
Někdo mu pak poradil, že novější OpenOffice (které je zdarma) umí mj. i OO Basic, což se něco jako VBA z pokleku. Z toho mu plyne teoretická možnost převedení mojí aplikace do prostředí Apache OO Calc. A bez investic do SW...
S tím žádnou zkušenost nemám, takže ten nápad nemohu ani potvrdit, ani vyvrátit. Ptám se proto zde, jestli někdo z vás má s takovou možností praktické zkušenosti nebo dokonce je schopný poskytnout použitelný příklad aplikace s makry OO Basic. Za technicky únosných podmínek bych totiž rád kamarádovi vyhověl (a případně si přitom rozšířil možnosti pro psaní tabulkových aplikací s makry). Jsem opravdu zvědavý, jestli se mi někdo ozve a co se při tom případně dozvím!

Pokud si stáhnete zdravá data (čísla s desetinnými čárkami místo teček), bude možné s nimi také jako s čísly zacházet. Ne že bych si s tím neuměl poradit, ale vám by to nebylo k ničemu.
Vzorec, který spočítá rozdíl mezi koncovým pátečním a začátečním pondělním kurzem ve vaší tabulce se zdravým obsahem, může vypadat např. takto:

=KDYŽ(B2="pátek";G2-INDEX(A3:D8; POZVYHLEDAT("pondělí";B3:B8;0);4);"")

Ve sloupcích D a G ovšem musejí být čísla, jak už jsem upozornil. Spočítat pak počet vypočtených kladných a záporných hodnot snad už nebude problém.


Strana:  1 ... « předchozí  29 30 31 32 33 34 35 36 37   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje