Celé se to dá řešit mnohem elegantněji. Jak jsem psal ve svém dalším příspěvku, může mít každá událostní procedura jako parametr objekt událost, z níž se dá vyčíst vše o prvku, který událost vyvolal.

Každý ovládací prvek formuláře má vlastnost "Další informace", která slouží k využití dle vlastních potřeb. Pokud do této vlastnosti zapíšete adresu buňky (třeba v klasickém tvaru List1!A1) můžete v událostní proceduře tuto hodnotu zjistit a použít k dosazení data do patřičné buňky. Ještě výhodnější je použít pojmenované oblasti - když budete tabulky upravovat vkládáním či mazáním řádků/sloupců, pojmenovaná oblast se bude přesouvat a nebudete v kombu muset nic měnit. Jedna událostní procedura pak snadno obslouží libovolný počet datových (a i jiných polí - i typ pole lze zjistit z objektu událost).

Jako ukázku zvolím nejjednodušší variantu - předpokládám, že všechna datová pole budou na listu List1. Přes buňku C3 budu mít překreslené datové pole a budu chtít, aby hodnota z pole se vkládala rovněž do buňky C3. Do vlastnosti "Další informace" u daného datového pole tedy zapíšu C3.

Procedura pak bude vypadat následovně:

sub ControlValue(oEvt)

        'Makro zjisti, do ktere bunky ma dosadit vybrane vybrane datum
        'Muze obslouzit libovolny pocet datovych poli bez zasahu do programu
        
        Dim oDocument as object, oSheets as object, oSheet as object
        Dim oDpage as object, oDatum as object, oRange as object
        Dim Result as string, SheetName as string, Bunka as string
        Dim radek as integer
        
        SheetName = "List1"                   'Nazev listu

        oDocument = ThisComponent
        oSheets = oDocument.Sheets
        oSheet = oSheets.GetByName(SheetName)
        Bunka = oEvt.Source.Model.Tag           'Precteni vlastnosti "Dalsi 
informace"
        Result= oEvt.Source.Text          'Hodnota data jako text
        oRange = oSheet.getCellRangeByName(Bunka)       'Ziskani oblasti z 
adresy bunky
        oRange.value = dateValue(Result)        'dosazeni hodnoty data do bunky
end subend sub

Ukazku se dvěma datovými poli obsluhovanými jednou událostní procedurou si muzete stáhnout z http://web.telecom.cz/funtrio/file/MacroTest_3.ods

Zdravím,

Jiří Spitz


Tomas Bilek napsal(a):

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]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Odpovedet emailem