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]