Jiří Spitz napsal(a):
sub ControlValue

Uvedená procedura sice plní to, co od ní žádáte (vkládá do buňky A1 datum z ovládacího prvku "Datum" na listu "List1"), ale tento přístup je v praxi velmi těžko pužitelný. Pokud potřebujete mít takových ovládacích prvků napojených do Calcu na formuláři více, musel byste pro každý z nich napsat stejnou funkci s jiným názvem, Funkce totiž nemá žádnou možnost se dozvědět, který z ovládacích prvků ji vyvolal a tudíž do které buňky uložit výslednou hodnotu.

Díky informacím předchozího příspěvku se mi podařilo vytvořit jakž takž
použitelnou proceduru, která hodnotu z "Pole pro datum" vloží do buňky
která je právě vybraná.

To má výhodu v tom že pomocí jednoho "Pole pro datum" a k ní přiřazené
proceduře lze vybrané datum zapsat do jakékoliv buňky na listu
a také možnost pole kopírovat na další listy bez ztráty funkčnosti.
Nevýhodou je určitá nepřehlednost - datum se zadává v poli (které je třeba
ve hlavičce sloupce s datumy), ale cílová buňka je někde pod ním. Uživatel musí
nejprve vybrat buňku kam se bude vkládat a potom klepnout na šipku "Pole pro 
datum".
Také je možnost zavlečení nechtěných chyb při nahodilém použití.

Takže celý postup zprovoznění je tento:
1. Do uvažovaného souboru přidat Basic modul a nakopírovat tam proceduru 
"ZapisDatum".
2. Do listu vložit "Pole pro datum", v jeho vlastnostech nastavit v "Obecné"
  Rozbalit=Ano, zajistit aby stejný "Název" byl uveden i v proceduře 
(DateField).
  V záložce "Události" přiřadit makro "ZapisDatum" k "Text změněn" (nebo
  k "Při ztrátě zaměření"?).
3. Vypnout režim návrhu a vyzkoušet. (Pokud se má v buňce ukázat opravdu datum 
tak
  je třeba také nastavit "Formát buněk/čísla/datum".)


Sub ZapisDatum 'zapise datum zadane datumovym polem do bunky s kurzorem
dim oDoc, oSelect  as object
dim Result, shtname, DatPole as string, sht as integer
DatPole = "DateField" ' nazev ve vlastnostech datumoveho pole musi souhlasit oDoc = ThisComponent oSelect=oDoc.CurrentSelection.getRangeAddress
'oBrowser(oDoc.CurrentSelection.getRangeAddress)
sht=oSelect.Sheet ' index listu s kurzorem
shtname=oDoc.sheets(sht).name 'jmeno listu
oDatum = oDoc.Sheets(sht).DrawPage.Forms(shtname).getByName(DatPole) ' odkaz na 
datumove pole
'oDatum.HelpText="Zadejte nebo vyberte datum které bude vloženo na místo 
kurzoru."
Result= oDatum.text
On Local Error GoTo NODOCUMENTTYPE ' ignoruje chyby - např nesmyslne zadane 
datum
' zapsat do bunky na ktere je kurzor.
if result <> "" then
oDoc.sheets(sht).getCellByPosition(oSelect.StartColumn,oSelect.StartRow).Value = dateValue(Result) else
 oDoc.sheets(sht).getCellByPosition(oSelect.StartColumn,oSelect.StartRow).string = 
""
end if exit sub
NODOCUMENTTYPE:
beep End Sub


Pokusný soubor zde: http://www.volny.cz/tombil/DatumVybraneZKalendare.ods

Zdraví
Tom B.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Odpovedet emailem